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 , i , a , o ) { for ( ; -- o >= 0 ; ) { var s = t * this [ e ++ ] + n [ i ] + a ; a = Math . floor ( s / 67108864 ) , n [ i ++ ] = 67108863 & s } return a } function am2 ( e , t , n , i , a , 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 [ i ] + ( 1073741823 & a ) , a = ( l >>> 30 ) + ( d >>> 15 ) + r * c + ( a >>> 30 ) , n [ i ++ ] = 1073741823 & l } return a } function am3 ( e , t , n , i , a , 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 [ i ] + a , a = ( l >> 28 ) + ( d >> 14 ) + r * c , n [ i ++ ] = 268435455 & l } return a } 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 i ; if ( 16 == t ) i = 4 ; else if ( 8 == t ) i = 3 ; else if ( 256 == t ) i = 8 ; else if ( 2 == t ) i = 1 ; else if ( 32 == t ) i = 5 ; else { if ( 4 != t ) return void this . fromRadix ( e , t ) ; i = 2 } this . t = 0 , this . s = 0 ; for ( var a = e . length , o = ! 1 , s = 0 ; -- a >= 0 ; ) { var r = 8 == i ? 255 & e [ a ] : intAt ( e , a ) ; 0 > r ? "-" == e . charAt ( a ) && ( o = ! 0 ) : ( o = ! 1 , 0 == s ? this [ this . t ++ ] = r : s + i > 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 += i , s >= this . DB && ( s -= this . DB ) ) } 8 == i && 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 , i = ( 1 << t ) - 1 , a = ! 1 , o = "" , s = this . t , r = this . DB - s * this . DB % t ; if ( s -- > 0 ) for ( r < this . DB && ( n = this [ s ] >> r ) > 0 && ( a = ! 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 ) & i , 0 >= r && ( r += this . DB , -- s ) ) , n > 0 && ( a = ! 0 ) , a && ( o += int2char ( n ) ) ; return a ? 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 , i = e % this . DB , a = this . DB - i , o = ( 1 << a ) - 1 , s = Math . floor ( e / this . DB ) , r = this . s << i & this . DM ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + s + 1 ] = this [ n ] >> a | r , r = ( this [ n ] & o ) << i ; 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 i = e % this . DB , a = this . DB - i , o = ( 1 << i ) - 1 ; t [ 0 ] = this [ n ] >> i ; for ( var s = n + 1 ; s < this . t ; ++ s ) t [ s - n - 1 ] |= ( this [ s ] & o ) << a , t [ s - n ] = this [ s ] >> i ; i > 0 && ( t [ this . t - n - 1 ] |= ( this . s & o ) << a ) , t . t = this . t - n , t . clamp ( ) } function bnpSubTo ( e , t ) { for ( var n = 0 , i = 0 , a = Math . min ( e . t , this . t ) ; a > n ; ) i += this [ n ] - e [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; if ( e . t < this . t ) { for ( i -= e . s ; n < this . t ; ) i += this [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; i += this . s } else { for ( i += this . s ; n < e . t ; ) i -= e [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; i -= e . s } t . s = 0 > i ? - 1 : 0 , - 1 > i ? t [ n ++ ] = this . DV + i : i > 0 && ( t [ n ++ ] = i ) , t . t = n , t . clamp ( ) } function bnpMultiplyTo ( e , t ) { var n = this . abs ( ) , i = e . abs ( ) , a = n . t ; for ( t . t = a + i . t ; -- a >= 0 ; ) t [ a ] = 0 ; for ( a = 0 ; a < i . t ; ++ a ) t [ a + n . t ] = n . am ( 0 , i [ a ] , t , a , 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 i = 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 hasOnlick ( e ) { if ( e . onclick || e . getAttribute ( "ng-click" ) ) return ! 0 ; var t = $ . _data ( e , "events" ) ; return t && ( t . click || t . mousedown ) ? ! 0 : ! 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 i = e . createTextRange ( ) ; i . collapse ( ! 0 ) , i . moveEnd ( "character" , n ) , i . moveStart ( "character" , t ) , i . select ( ) } else e . setSelectionRange && e . setSelectionRange ( t , n ) } catch ( a ) { } } function getFieldSelection ( e ) { if ( e . selectionStart ) return e . selectionStart ; if ( ! document . selection ) return 0 ; var t = " " , n = document . selection . createRange ( ) , i = n . text , a = n . duplicate ( ) , o = 0 ; try { a . moveToElementText ( e ) } catch ( s ) { return 0 } return n . text = i + t , o = a . 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 , i = [ ] , a = [ ] , 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 , i , a , t , n ) , a . length && i . push ( a . join ( "" ) ) ; var r = i . join ( "\n" ) , l = r . indexOf ( " " ) ; return - 1 != l && ( r = r . substr ( 0 , l ) + r . substr ( l + 1 ) ) , [ r , l ] } function getRichElementValue ( e , t , n , i , a ) { if ( 3 != e . nodeType ) { if ( 1 == e . nodeType ) { var o , s = i === 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 && ! a && n . push ( " " ) ; for ( var o = e . firstChild ; o ; ) getRichElementValue ( o , t , n , i , a ) , o = o . nextSibling ; s && a && n . push ( " " ) , r && n . length && ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) } } else if ( i === e ) { var l = e . nodeValue ; n . push ( l . substr ( 0 , a ) + " " + l . substr ( a ) ) } 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 i = document . createRange ( ) ; t ? i . selectNode ( t ) : i . selectNodeContents ( e ) , n || i . collapse ( ! 1 ) ; var a = window . getSelection ( ) ; a . removeAllRanges ( ) , a . addRange ( i ) } 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 i = t . offsetTop - 15 , a = t . offsetHeight + 30 , o = e . scrollTop , s = e . clientHeight ; o > i ? ( e . scrollTop = i , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) : i + a - s > o && ( e . scrollTop = i + a - s , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) } function onContentLoaded ( e ) { e = onAnimationFrameCallback ( 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 ) , i = e . length ? e [ e . length - 1 ] : 4294967295 , a = 0 ; a < t . length ; a ++ ) t [ a ] < i && n . push ( t [ a ] ) ; return n } function listUniqSorted ( e ) { e = e || [ ] ; for ( var t = [ ] , n = ! 1 , i = 0 ; i < e . length ; i ++ ) e [ i ] !== n && t . push ( e [ i ] ) , n = e [ i ] ; 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 . Mo
} , guid : 1 , proxy : function ( e , t ) { var n , i , a ; return "string" == typeof t && ( a = e [ t ] , t = e , e = a ) , ae . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , i = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , i . guid = e . guid = e . guid || ae . guid ++ , i ) : void 0 } , now : function ( ) { return + new Date } , support : ne } ) , ae . 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 , i ) { var a , 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 && ! i ) { if ( a = ve . exec ( e ) ) if ( s = a [ 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 ) ) && O ( t , o ) && o . id === s ) return n . push ( o ) , n } else { if ( a [ 2 ] ) return Q . apply ( n , t . getElementsByTagName ( e ) ) , n ; if ( ( s = a [ 3 ] ) && w . getElementsByClassName && t . getElementsByClassName ) return Q . apply ( n , t . getElementsByClassName ( s ) ) , n } if ( w . qsa && ( ! R || ! R . 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 , i ) } function n ( ) { function e ( n , i ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = i } var t = [ ] ; return e } function i ( e ) { return e [ L ] = ! 0 , e } function a ( 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 ( "|" ) , i = e . length ; i -- ; ) k . attrHandle [ n [ i ] ] = t } function s ( e , t ) { var n = t && e , i = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( i ) return i ; 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 i ( function ( t ) { return t = + t , i ( function ( n , i ) { for ( var a , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ a = o [ s ] ] && ( n [ a ] = ! ( i [ a ] = n [ a ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , i = "" ; n > t ; t ++ ) i += e [ t ] . value ; return i } function m ( e , t , n ) { var i = t . dir , a = n && "parentNode" === i , o = q ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ i ] ; ) if ( 1 === t . nodeType || a ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ i ] ; ) if ( ( 1 === t . nodeType || a ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ i ] ; ) if ( 1 === t . nodeType || a ) { if ( l = t [ L ] || ( t [ L ] = { } ) , ( r = l [ i ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ i ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , i ) { for ( var a = e . length ; a -- ; ) if ( ! e [ a ] ( t , n , i ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , i ) { for ( var a = 0 , o = n . length ; o > a ; a ++ ) t ( e , n [ a ] , i ) ; return i } function f ( e , t , n , i , a ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , i , a ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , a , o , s ) { return a && ! a [ L ] && ( a = _ ( a ) ) , o && ! o [ L ] && ( o = _ ( o , s ) ) , i ( function ( i , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = i || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! i && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( i ? e : g || a ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , a ) for ( c = f ( y , m ) , a ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( i ) { 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 ( i , u ) : p [ d ] ) > - 1 && ( i [ 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 , i , a = 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 , i ) { return ! o && ( i || n !== A ) || ( ( t = n ) . nodeType ? l ( e , n , i ) : c ( e , n , i ) ) } ] ; a > r ; r ++ ) if ( n = k . relative [ e [ r ] . type ] ) d = [ m ( g ( d ) , n ) ] ; else { if ( n = k . filter [ e [ r ] . type ] . apply ( null , e [ r ] . matches ) , n [ L ] ) { for ( i = ++ r ; a > i && ! k . relative [ e [ i ] . type ] ; i ++ ) ; return _ ( r > 1 && g ( d ) , r > 1 && p ( e . sli
ae . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , i , a ) { var o , s , r , l , c , d , u , p , m , g , h , f = ae . hasData ( e ) && ae . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( ye ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Re . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = ae . event . special [ m ] || { } , m = ( i ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! a && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || i && i !== s . selector && ( "**" !== i || ! 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 || ae . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) ae . event . remove ( e , m + t [ c ] , n , i , ! 0 ) ; ae . isEmptyObject ( d ) && ( delete f . handle , ae . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , i , a ) { var o , s , r , l , c , d , u , p = [ i || ge ] , m = te . call ( t , "type" ) ? t . type : t , g = te . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = i = i || ge , 3 !== i . nodeType && 8 !== i . nodeType && ! Fe . test ( m + ae . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ ae . expando ] ? t : new ae . Event ( m , "object" == typeof t && t ) , t . isTrigger = a ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = i ) , n = null == n ? [ t ] : ae . makeArray ( n , [ t ] ) , c = ae . event . special [ m ] || { } , a || ! c . trigger || c . trigger . apply ( i , n ) !== ! 1 ) ) { if ( ! a && ! c . noBubble && ! ae . isWindow ( i ) ) { for ( l = c . delegateType || m , Fe . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( i . 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 = ( ae . _data ( r , "events" ) || { } ) [ t . type ] && ae . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && ae . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! a && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && ae . acceptData ( i ) && s && i [ m ] && ! ae . isWindow ( i ) ) { d = i [ s ] , d && ( i [ s ] = null ) , ae . event . triggered = m ; try { i [ m ] ( ) } catch ( h ) { } ae . event . triggered = void 0 , d && ( i [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = ae . event . fix ( e ) ; var t , n , i , a , o , s = [ ] , r = Y . call ( arguments ) , l = ( ae . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = ae . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = ae . event . handlers . call ( this , e , l ) , t = 0 ; ( a = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = a . elem , o = 0 ; ( i = a . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( i . namespace ) ) && ( e . handleObj = i , e . data = i . data , n = ( ( ae . event . special [ i . origType ] || { } ) . handle || i . handler ) . apply ( a . 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 , i , a , 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 ( a = [ ] , o = 0 ; r > o ; o ++ ) i = t [ o ] , n = i . selector + " " , void 0 === a [ n ] && ( a [ n ] = i . needsContext ? ae ( n , this ) . index ( l ) >= 0 : ae . find ( n , this , null , [ l ] ) . length ) , a [ n ] && a . push ( i ) ; a . length && s . push ( { elem : l , handlers : a } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ ae . expando ] ) return e ; var t , n , i , a = e . type , o = e , s = this . fixHooks [ a ] ; for ( s || ( this . fixHooks [ a ] = s = Pe . test ( a ) ? this . mouseHooks : De . test ( a ) ? this . keyHooks : { } ) , i = s . props ? this . props . concat ( s . props ) : this . props , e = new ae . Event ( o ) , t = i . length ; t -- ; ) n = i [ 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 : t . keyCode ) , e } } , mouseHooks : { props : " button buttons clientX clientY fromElement offsetX offsetY pageX pageY scre
return e = ae . propFix [ e ] || e , this . each ( function ( ) { try { this [ e ] = void 0 , delete this [ e ] } catch ( t ) { } } ) } } ) , ae . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var i , a , o , s = e . nodeType ; return e && 3 !== s && 8 !== s && 2 !== s ? ( o = 1 !== s || ! ae . isXMLDoc ( e ) , o && ( t = ae . propFix [ t ] || t , a = ae . propHooks [ t ] ) , void 0 !== n ? a && "set" in a && void 0 !== ( i = a . set ( e , n , t ) ) ? i : e [ t ] = n : a && "get" in a && null !== ( i = a . get ( e , t ) ) ? i : e [ t ] ) : void 0 } , propHooks : { tabIndex : { get : function ( e ) { var t = ae . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : xt . test ( e . nodeName ) || At . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , ne . hrefNormalized || ae . each ( [ "href" , "src" ] , function ( e , t ) { ae . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , ne . optSelected || ( ae . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , ae . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { ae . propFix [ this . toLowerCase ( ) ] = this } ) , ne . enctype || ( ae . propFix . enctype = "encoding" ) ; var It = /[\t\r\n\f]/g ; ae . fn . extend ( { addClass : function ( e ) { var t , n , i , a , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( ae . isFunction ( e ) ) return this . each ( function ( t ) { ae ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , i = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( It , " " ) : " " ) ) { for ( o = 0 ; a = t [ o ++ ] ; ) i . indexOf ( " " + a + " " ) < 0 && ( i += a + " " ) ; s = ae . trim ( i ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , i , a , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( ae . isFunction ( e ) ) return this . each ( function ( t ) { ae ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , i = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( It , " " ) : "" ) ) { for ( o = 0 ; a = t [ o ++ ] ; ) for ( ; i . indexOf ( " " + a + " " ) >= 0 ; ) i = i . replace ( " " + a + " " , " " ) ; s = e ? ae . trim ( i ) : "" , 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 ( ae . isFunction ( e ) ? function ( n ) { ae ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , i = 0 , a = ae ( this ) , o = e . match ( ye ) || [ ] ; t = o [ i ++ ] ; ) a . hasClass ( t ) ? a . removeClass ( t ) : a . addClass ( t ) ; else ( n === $e || "boolean" === n ) && ( this . className && ae . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : ae . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , i = this . length ; i > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( It , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , ae . 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 ) { ae . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , ae . 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 , i ) { return this . on ( t , e , n , i ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Et = ae . now ( ) , Tt = /\?/ , Dt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; ae . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , i = null , a = ae . trim ( t + "" ) ; return a && ! ae . trim ( a . replace ( Dt , function ( e , t , a , o ) { return n && t && ( i = 0 ) , 0 === i ? e : ( n = a || t , i += ! o - ! a , "" ) } ) ) ? Function ( "return " + a ) ( ) : ae . error ( "Invalid JSON: " + t ) } , ae . parseXML = function ( t ) { var n , i ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( i = new DOMParser , n = i . parseFromString ( t , "text/xml" ) ) : ( n = new ActiveXObject ( "Microsoft.XMLDOM" ) , n . async = "false" , n . loadXML ( t ) ) } catch ( a ) { n = void 0 } return n && n . documentElement && ! n . getElementsByTagName ( "parsererror" ) . length || ae . error ( "Invalid XML: " + t ) , n } ; var Pt , Ft , Rt = /#.*$/ , Nt = / (
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" , params : [ { name : "time" , type : "double" } , { name : "type" , type : "string" } , { name : "peer" , type : " l
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 : "key" , type : "PrivacyKey" } , { name : "rules" , type : "Vector<PrivacyRule>" } ] , type : "
} , { 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 : "InputPeer" } , { name : "limit" , type : "int" } ] , type : "messages.Dialogs" } , { id : "-1970355494" , me
"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" ] ] , "1f475" : [ "👵" , [ "older_woman" ] ] , "1f476" : [ "👶" , [ "baby" ] ] , "1f477" : [ "👷" , [ " construction _w
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 i ( ) { return l ? ( l = ! 1 , "" ) : r } function a ( ) { var e , t , n , a = Array . prototype . slice . call ( arguments ) , o = a . pop ( ) , s = [ ] , r = 1 == a . length , l = ! 0 , p = i ( ) ; for ( t = 0 ; t < a . length ; t ++ ) if ( n = a [ t ] = p + a [ 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 ( a , function ( e ) { var i ; for ( s = [ ] , t = 0 ; t < a . length ; t ++ ) n = a [ t ] , i = e [ n ] , i = void 0 === i || null === i ? ! 1 : JSON . parse ( i ) , s . push ( c [ n ] = i ) ; o ( r ? s [ 0 ] : s ) } ) } function o ( e , t ) { var n , a , o = { } , s = i ( ) ; for ( n in e ) if ( e . hasOwnProperty ( n ) ) if ( a = e [ n ] , n = s + n , c [ n ] = a , a = JSON . stringify ( a ) , u ) try { localStorage . setItem ( n , a ) } catch ( r ) { u = ! 1 } else o [ n ] = a ; return u || ! d ? void ( t && t ( ) ) : void chrome . storage . local . set ( o , t ) } function s ( ) { var e , t , n , a = Array . prototype . slice . call ( arguments ) , o = i ( ) ; for ( "function" == typeof a [ a . length - 1 ] && ( n = a . pop ( ) ) , e = 0 ; e < a . length ; e ++ ) if ( t = a [ e ] = o + a [ e ] , delete c [ t ] , u ) try { localStorage . removeItem ( t ) } catch ( s ) { u = ! 1 } d ? chrome . storage . local . remove ( a , 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 : a , 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 ( i ) { n = ! 0 } setTimeout ( function ( ) { t ( n ) } , 10 ) } , window . applicationCache && ! Config . Modes . packed && window . addEventListener ) { var t = window . applicationCache , n = ! 1 , i = ! 1 , a = function ( e ) { clearTimeout ( i ) , i = 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 } ) , a ( ) ) ) } , ! 1 ) , t . addEventListener ( "noupdate" , function ( ) { a ( ) } , ! 1 ) , t . addEventListener ( "error" , function ( ) { a ( ) } , ! 1 ) } ; a ( 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 ] , i = "en-us" , a = { dom : ! 1 , i18n _ng : ! 1 , i18n _messages : ! 1 , i18n _fallback : ! 1 } , o = function ( ) { var e , t = ! 0 ; for ( e in a ) if ( a . hasOwnProperty ( e ) && a [ e ] === ! 1 ) { t = ! 1 ; break } t && ( a . 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 } a . i18n _ng = Config . I18n . locale == i , $ . getJSON ( "js/locales/" + Config . I18n . locale + ".json" ) . success ( function ( e ) { Config . I18n . messages = e , a . i18n _messages = ! 0 , Config . I18n . locale == i && ( a . i18n _fallback = ! 0 ) , o ( ) } ) , Config . I18n . locale != i && $ . getJSON ( "js/locales/" + i + ".json" ) . success ( function ( e ) { Config . I18n . fallback _messages = e , a . i18n _fallback = ! 0 , o ( ) } ) , $ ( document ) . ready ( function ( ) { a . dom = ! 0 , a . i18n _ng ? o ( ) : $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { a . i18n _ng = ! 0 , o ( ) } ) . attr ( "src" , "vendor/angular/i18n/angular-locale_" + Config . I18n . locale + ".js" ) } ) } ) } ( ) , function ( e , t , n ) { "use strict" ; var i , a , o , s , r , l , c , d , u , p , m , g , h , f , _ , v , y , b , w , k , $ , S , C , M , x , A , I , E , T , D , P ; C = { paneClass : "nano-pane" , sliderClass : "nano-slider" , contentClass : "nano-content" , iOSNa
n . $get = function ( ) { var e = x . invoke ( i , n ) ; return x . invoke ( t , null , { $delegate : e } ) } } function m ( e ) { ue ( y ( e ) || Oi ( e ) , "modulesToLoad" , "not an array" ) ; var t , n = [ ] ; return o ( e , function ( e ) { function i ( e ) { var t , n ; for ( t = 0 , n = e . length ; n > t ; t ++ ) { var i = e [ t ] , a = S . get ( i [ 0 ] ) ; a [ i [ 1 ] ] . apply ( a , i [ 2 ] ) } } if ( ! b . get ( e ) ) { b . put ( e , ! 0 ) ; try { $ ( e ) ? ( t = Ai ( e ) , n = n . concat ( m ( t . requires ) ) . concat ( t . _runBlocks ) , i ( t . _invokeQueue ) , i ( t . _configBlocks ) ) : M ( e ) ? n . push ( S . invoke ( e ) ) : Oi ( e ) ? n . push ( S . invoke ( e ) ) : pe ( e , "module" ) } catch ( a ) { throw Oi ( e ) && ( e = e [ e . length - 1 ] ) , a . message && a . stack && - 1 == a . stack . indexOf ( a . message ) && ( a = a . message + "\n" + a . stack ) , ka ( "modulerr" , "Failed to instantiate module {0} due to:\n{1}" , e , a . stack || a . message || a ) } } } ) , n } function g ( e , n ) { function i ( t , i ) { if ( e . hasOwnProperty ( t ) ) { if ( e [ t ] === h ) throw ka ( "cdep" , "Circular dependency found: {0}" , t + " <- " + v . join ( " <- " ) ) ; return e [ t ] } try { return v . unshift ( t ) , e [ t ] = h , e [ t ] = n ( t , i ) } catch ( a ) { throw e [ t ] === h && delete e [ t ] , a } finally { v . shift ( ) } } function a ( e , n , a , o ) { "string" == typeof a && ( o = a , a = 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 ka ( "itkn" , "Incorrect injection token! Expected service name as string, got {0}" , l ) ; c . push ( a && a . hasOwnProperty ( l ) ? a [ l ] : i ( l , o ) ) } return Oi ( e ) && ( e = e [ s ] ) , e . apply ( n , c ) } function o ( e , t , n ) { var i = Object . create ( ( Oi ( e ) ? e [ e . length - 1 ] : e ) . prototype || null ) , o = a ( e , i , t , n ) ; return w ( o ) || M ( o ) ? o : i } return { invoke : a , instantiate : o , get : i , 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 : i ( a ) , factory : i ( l ) , service : i ( c ) , value : i ( d ) , constant : i ( u ) , decorator : p } } , S = k . $injector = g ( k , function ( e , t ) { throw Ri . isString ( t ) && v . push ( t ) , ka ( "unpr" , "Unknown provider: {0}" , v . join ( " <- " ) ) } ) , C = { } , x = C . $injector = g ( C , function ( e , t ) { var i = S . get ( e + f , t ) ; return x . invoke ( i . $get , i , 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 , i ) { function a ( e ) { var t = null ; return Array . prototype . some . call ( e , function ( e ) { return "a" === O ( e ) ? ( t = e , ! 0 ) : void 0 } ) , t } function o ( ) { var e = r . yOffset ; if ( M ( e ) ) e = e ( ) ; else if ( N ( e ) ) { var n = e [ 0 ] , i = t . getComputedStyle ( n ) ; e = "fixed" !== i . 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 i = e . getBoundingClientRect ( ) . top ; t . scrollBy ( 0 , i - n ) } } else t . scrollTo ( 0 , 0 ) } function r ( e ) { e = $ ( e ) ? e : n . hash ( ) ; var t ; e ? ( t = l . getElementById ( e ) ) ? s ( t ) : ( t = a ( l . getElementsByName ( e ) ) ) ? s ( t ) : "top" === e && s ( null ) : s ( null ) } var l = t . document ; return e && i . $watch ( function ( ) { return n . hash ( ) } , function ( e , t ) { ( e !== t || "" !== e ) && He ( function ( ) { i . $evalAsync ( r ) } ) } ) , r } ] } function et ( e , t ) { return e || t ? e ? t ? ( Oi ( e ) && ( e = e . join ( " " ) ) , Oi ( 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 === Sa ) return n } } function nt ( e ) { $ ( e ) && ( e = e . split ( " " ) ) ; var t = fe ( ) ; return o ( e , function ( e ) { e . length && ( t [ e ] = ! 0 ) } ) , t } function it ( e ) { return w ( e ) ? e : { } } function at ( e , t , n , i ) { function a ( 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 = a , 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 , a ) { if ( y ( a ) && ( a = null ) , p !== e . location && ( p = e . location ) , m !== e . history && ( m = e . history ) , t ) { var o = k === a ; if ( $ === t && ( ! i . history || o ) ) return u ; var r = $ && Rt ( $ ) === Rt ( t ) ; return $ = t , k = a , ! i . 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" ] ( a , "" , t ) , c ( ) , k = w ) , u } return C || p . href . replace ( /%27/g , "'" ) } , u . state = function ( ) { ret
! 0 ) : ! 1 } , a } ] } 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 ) || Va [ n . protocol ] || null } function Pt ( e , t ) { var n = "/" !== e . charAt ( 0 ) ; n && ( e = "/" + e ) ; var i = Mn ( e ) ; t . $$path = decodeURIComponent ( n && "/" === i . pathname . charAt ( 0 ) ? i . pathname . substring ( 1 ) : i . pathname ) , t . $$search = ee ( i . search ) , t . $$hash = decodeURIComponent ( i . 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 Rt ( e ) { var t = e . indexOf ( "#" ) ; return - 1 == t ? e : e . substr ( 0 , t ) } function Nt ( e ) { return e . replace ( /(#.+)|#$/ , "$1" ) } function Ut ( e ) { return e . substr ( 0 , Rt ( e ) . lastIndexOf ( "/" ) + 1 ) } function Ot ( 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 za ( "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 ( i , a ) { if ( a && "#" === a [ 0 ] ) return this . hash ( a . slice ( 1 ) ) , ! 0 ; var o , s , r ; return b ( o = Ft ( e , i ) ) ? ( s = o , r = b ( o = Ft ( n , o ) ) ? t + ( Ft ( "/" , o ) || o ) : e + s ) : b ( o = Ft ( t , i ) ) ? r = t + o : t == i + "/" && ( r = t ) , r && this . $$parse ( r ) , ! ! r } } function Bt ( e , t , n ) { Dt ( e , this ) , this . $$parse = function ( i ) { function a ( e , t , n ) { var i , a = /^\/[A-Z]:(\/.*)/ ; return 0 === t . indexOf ( n ) && ( t = t . replace ( n , "" ) ) , a . exec ( t ) ? e : ( i = a . exec ( e ) , i ? i [ 1 ] : e ) } var o , s = Ft ( e , i ) || Ft ( t , i ) ; y ( s ) || "#" !== s . charAt ( 0 ) ? this . $$html5 ? o = s : ( o = "" , y ( s ) && ( e = i , this . replace ( ) ) ) : ( o = Ft ( n , s ) , y ( o ) && ( o = s ) ) , Pt ( o , this ) , this . $$path = a ( this . $$path , o , e ) , this . $$compose ( ) } , this . $$compose = function ( ) { var t = te ( this . $$search ) , i = this . $$hash ? "#" + ne ( this . $$hash ) : "" ; this . $$url = Tt ( this . $$path ) + ( t ? "?" + t : "" ) + i , this . $$absUrl = e + ( this . $$url ? n + this . $$url : "" ) } , this . $$parseLinkUrl = function ( t , n ) { return Rt ( e ) == Rt ( t ) ? ( this . $$parse ( t ) , ! 0 ) : ! 1 } } function jt ( e , t , n ) { this . $$html5 = ! 0 , Bt . apply ( this , arguments ) , this . $$parseLinkUrl = function ( i , a ) { if ( a && "#" === a [ 0 ] ) return this . hash ( a . slice ( 1 ) ) , ! 0 ; var o , s ; return e == Rt ( i ) ? o = i : ( s = Ft ( t , i ) ) ? o = e + n + s : t === i + "/" && ( o = t ) , o && this . $$parse ( o ) , ! ! o } , this . $$compose = function ( ) { var t = te ( this . $$search ) , i = this . $$hash ? "#" + ne ( this . $$hash ) : "" ; this . $$url = Tt ( this . $$path ) + ( t ? "?" + t : "" ) + i , 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 , i , a , o , s ) { function r ( e , t , n ) { var a = c . url ( ) , o = c . $$state ; try { i . url ( e , t , n ) , c . $$state = i . state ( ) } catch ( s ) { throw c . url ( a ) , c . $$state = o , s } } function l ( e , t ) { n . $broadcast ( "$locationChangeSuccess" , c . absUrl ( ) , e , c . $$state , t ) } var c , d , u , p = i . baseHref ( ) , m = i . url ( ) ; if ( t . enabled ) { if ( ! p && t . requireBase ) throw za ( "nobase" , "$location in HTML5 mode requires a <base> tag to be present!" ) ; u = Ot ( m ) + ( p || "/" ) , d = a . history ? Lt : jt } else u = Rt ( m ) , d = Bt ; var g = Ut ( u ) ; c = new d ( u , g , "#" + e ) , c . $$parseLinkUrl ( m , m ) , c . $$state = i . 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 a = Mi ( e . target ) ; "a" !== O ( a [ 0 ] ) ; ) if ( a [ 0 ] === o [ 0 ] || ! ( a = a . parent ( ) ) [ 0 ] ) return ; var r = a . prop ( "href" ) , l = a . attr ( "href" ) || a . attr ( "xlink:href" ) ; w ( r ) && "[object SVGAnimatedString]" === r . toString ( ) && ( r = Mn ( r . animVal ) . href ) , h . test ( r ) || ! r || a . attr ( "target" ) || e . isDefaultPrevented ( ) || c . $$parseLinkUrl ( r , l ) && ( e . preventDefault ( ) , c . absUrl ( ) != i . url ( ) && ( n . $apply ( ) , s . angular [ "ff-684208-preventDefault" ] = ! 0 ) ) } } ) , Nt ( c . absUrl ( ) ) != Nt ( m ) && i . url ( c . absUrl ( ) , ! 0 ) ; var f = ! 0 ; return i . onUrlChange ( function ( e , t ) { return
return r . call ( i , l , c , d , u ) , i } 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 , i , a ) { var s , r , l = "" , c = [ ] ; if ( i = i || "mediumDate" , i = e . DATETIME _FORMATS [ i ] || i , $ ( n ) && ( n = uo . test ( n ) ? m ( n ) : t ( n ) ) , S ( n ) && ( n = new Date ( n ) ) , ! C ( n ) || ! isFinite ( n . getTime ( ) ) ) return n ; for ( ; i ; ) r = co . exec ( i ) , r ? ( c = H ( c , r , 1 ) , i = c . pop ( ) ) : ( c . push ( i ) , i = null ) ; var d = n . getTimezoneOffset ( ) ; return a && ( d = Y ( a , n . getTimezoneOffset ( ) ) , n = X ( n , a , ! 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 ( ) ) , Oi ( 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 i = 1 , a = f ; if ( M ( t ) ) a = t ; else if ( $ ( t ) && ( ( "+" == t . charAt ( 0 ) || "-" == t . charAt ( 0 ) ) && ( i = "-" == t . charAt ( 0 ) ? - 1 : 1 , t = t . substring ( 1 ) ) , "" !== t && ( a = e ( t ) , a . constant ) ) ) { var o = a ( ) ; a = function ( e ) { return e [ o ] } } return { get : a , descending : i * n } } ) } function n ( e ) { switch ( typeof e ) { case "number" : case "boolean" : case "string" : return ! 0 ; default : return ! 1 } } function i ( 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 = i ( 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 , i ) { 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 , i = 0 , a = c . length ; a > i && ! ( n = s ( e . predicateValues [ i ] , t . predicateValues [ i ] ) * c [ i ] . descending ) ; ++ i ) ; return n } if ( ! a ( e ) ) return e ; Oi ( n ) || ( n = [ n ] ) , 0 === n . length && ( n = [ "+" ] ) ; var c = t ( n , i ) ; c . push ( { get : function ( ) { return { } } , descending : i ? - 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 ei ( e , t ) { e . $name = t } function ti ( e , t , i , a , s ) { var r = this , l = [ ] ; r . $error = { } , r . $$success = { } , r . $pending = n , r . $name = s ( t . name || t . ngForm || "" ) ( i ) , 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 } , fi ( { ctrl : this , $element : e , set : function ( e , t , n ) { var i = e [ t ] ; if ( i ) { var a = i . indexOf ( n ) ; - 1 === a && i . push ( n ) } else e [ t ] = [ n ] } , unset : function ( e , t , n ) { var i = e [ t ] ; i && ( L ( i , n ) , 0 === i . length && delete e [ t ] ) } , $animate : a } ) , r . $setDirty = function ( ) { a . removeClass ( e , Jo ) , a . addClass ( e , Qo ) , r . $dirty = ! 0 , r . $pristine = ! 1 , r . $$parentForm . $setDirty ( ) } , r . $setPristine = function ( ) { a . 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 ( ) { a . addClass ( e , _o ) , r . $submitted = ! 0 , r . $$parentForm . $setSubmitted ( ) } } function ni ( e ) { e . $formatters . push ( function ( t ) { return e . $isEmpty ( t ) ? t : t . toString ( ) } ) } function ii ( e , t , n , i , a , o ) { ai ( e , t , n , i , a , o ) , ni ( i ) } function ai ( e , t , n , i , a , o ) { var s = bi ( t [ 0 ] . type ) ; if ( ! a . 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 a = t . val ( ) , l = e && e . type ; "password" === s || n . ngTrim && "false" === n . ngTrim || ( a = Bi ( a ) ) , ( i . $viewValue !== a || "" === a && i . $$hasNativeValidators ) && i . $setViewValue ( a , l ) } } ;
own : { } } , inputs : [ ] } , en ( a , i . $filter ) ; var s , r = "" ; if ( this . stage = "assign" , s = an ( a ) ) { 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 ( a . body ) ; i . stage = "inputs" , o ( c , function ( e , t ) { var n = "fn" + t ; i . state [ n ] = { vars : [ ] , body : [ ] , own : { } } , i . state . computing = n ; var a = i . nextId ( ) ; i . recurse ( e , a ) , i . return _ ( a ) , i . state . inputs . push ( n ) , e . watchId = t } ) , this . state . computing = "fn" , this . stage = "main" , this . recurse ( a ) ; 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 ( a ) , u . constant = sn ( a ) , 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 , i ) { e . push ( n + "=$filter(" + t . escape ( i ) + ")" ) } ) , 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 , i , a , s , r ) { var l , c , d , u , p = this ; if ( a = a || 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 , i , a , s , ! 0 ) ) ; switch ( e . type ) { case eo . Program : o ( e . body , function ( t , i ) { p . recurse ( t . expression , n , n , function ( e ) { c = e } ) , i !== 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 ) , a ( 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 ) , a ( 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 ) , a ( 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 ) ) , a ( 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 ) ) , a ( t ) ; break ; case eo . Identifier : t = t || this . nextId ( ) , i && ( i . context = "inputs" === p . stage ? "s" : this . assign ( this . nextId ( ) , this . getHasOwnProperty ( "l" , e . name ) + "?l:s" ) , i . computed = ! 1 , i . 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 ) , a ( t ) ; break ; case eo . MemberExpression : l = i && ( i . 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 ) , i && ( i . computed = ! 0 , i . 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 ) , i && ( i . computed = ! 1 , i . name = e . property . name ) ) } , function ( ) { p . assign ( t , "undefined" ) } ) , a ( 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 ( i , b ) ) } ) , s . $watch ( u , function ( t ) { var i = parseFloat ( t ) , a = isNaN ( i ) ; if ( a || i in g || ( i = e . pluralCat ( i - m ) ) , i !== d && ! ( a && S ( d ) && isNaN ( d ) ) ) { w ( ) ; var o = f [ i ] ; y ( o ) ? ( null != t && n . debug ( "ngPluralize: no rule defined for '" + i + "' in " + p ) , w = h , c ( ) ) : w = s . $watch ( o , c ) , d = i } } ) } } } ] , ms = [ "$parse" , "$animate" , function ( e , s ) { var r = "$$NG_REMOVED" , l = i ( "ngRepeat" ) , c = function ( e , t , n , i , a , o , s ) { e [ n ] = i , a && ( e [ a ] = 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 ( i , 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 , i , p , h ) { k && ( $ = function ( t , n , i ) { return w && ( M [ w ] = t ) , M [ b ] = n , M . $index = i , k ( e , M ) } ) ; var f = fe ( ) ; e . $watchCollection ( _ , function ( i ) { var p , _ , y , k , M , x , A , I , E , T , D , P , F = t [ 0 ] , R = fe ( ) ; if ( v && ( e [ v ] = i ) , a ( i ) ) E = i , I = $ || S ; else { I = $ || C , E = [ ] ; for ( var N in i ) wi . call ( i , N ) && "$" !== N . charAt ( 0 ) && E . push ( N ) } for ( k = E . length , D = new Array ( k ) , p = 0 ; k > p ; p ++ ) if ( M = i === E ? p : E [ p ] , x = i [ M ] , A = I ( M , x , p ) , f [ A ] ) T = f [ A ] , delete f [ A ] , R [ A ] = T , D [ p ] = T ; else { if ( R [ 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 } , R [ A ] = ! 0 } for ( var U in f ) { if ( T = f [ U ] , 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 = i === E ? p : E [ p ] , x = i [ 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 , Mi ( 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 , Mi ( F ) ) , F = n , T . clone = e , R [ T . id ] = T , c ( T . scope , p , b , x , w , M , k ) } ) ; f = R } ) } } } } ] , gs = "ng-hide" , hs = "ng-hide-animate" , fs = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , i ) { t . $watch ( i . ngShow , function ( t ) { e [ t ? "removeClass" : "addClass" ] ( n , gs , { tempClasses : hs } ) } ) } } } ] , _s = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , i ) { t . $watch ( i . 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 , i , a , s ) { var r = a . ngSwitch || a . on , l = [ ] , c = [ ] , d = [ ] , u = [ ] , p = function ( e , t ) { return function ( ) { e . splice ( t , 1 ) } } ; n . $watch ( r , function ( n ) { var i , a ; for ( i = 0 , a = d . length ; a > i ; ++ i ) e . cancel ( d [ i ] ) ; for ( d . length = 0 , i = 0 , a = u . length ; a > i ; ++ i ) { var r = he ( c [ i ] . clone ) ; u [ i ] . $destroy ( ) ; var m = d [ i ] = e . leave ( r ) ; m . then ( p ( d , i ) ) } c . length = 0 , u . length = 0 , ( l = s . cases [ "!" + n ] || s . cases [ "?" ] ) && o ( l , function ( n ) { n . transclude ( function ( i , a ) { u . push ( a ) ; var o = n . element ; i [ i . length ++ ] = t . createComment ( " end ngSwitchWhen: " ) ; var s = { clone : i } ; c . push ( s ) , e . enter ( i , o . parent ( ) , o ) } ) } ) } ) } } } ] , bs = Qn ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , i , a ) { i . cases [ "!" + n . ngSwitchWhen ] = i . cases [ "!" + n . ngSwitchWhen ] || [ ] , i . cases [ "!" + n . ngSwitchWhen ] . push ( { transclude : a , element : t } ) } } ) , ws = Qn ( { transclude : "element" , priority
if ( T || O && U . state == a || ( T = ! D ( e , h , i ) ) , T ) return u ( ) , k ; A && I ( e ) ; var L = { structural : A , element : e , event : i , close : u , options : c , runner : k } ; if ( O ) { var B = t ( "skip" , e , L , U ) ; if ( B ) return U . state === o ? ( u ( ) , k ) : ( _ ( e , U . options , c ) , U . runner ) ; var z = t ( "cancel" , e , L , U ) ; if ( z ) if ( U . state === o ) U . runner . end ( ) ; else { if ( ! U . structural ) return _ ( e , U . options , L . options ) , U . runner ; U . close ( ) } else { var W = t ( "join" , e , L , U ) ; if ( W ) { if ( U . state !== o ) return b ( e , A ? i : null , c ) , i = L . event = U . event , c = _ ( e , U . options , L . options ) , U . 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 ( ) , E ( e ) , k ; var K = ( U . counter || 0 ) + 1 ; return L . counter = K , P ( e , a , L ) , r . $$postDigest ( function ( ) { var t = F . get ( p ) , a = ! t ; t = t || { } ; var s = e . parent ( ) || [ ] , r = s . length > 0 && ( "animate" === t . event || t . structural || n ( t . options ) ) ; if ( a || t . counter !== K || ! r ) return a && ( X ( e , c ) , g ( e , c ) ) , ( a || A && t . event !== i ) && ( c . domOperation ( ) , k . end ( ) ) , void ( r || E ( e ) ) ; i = ! t . structural && n ( t . options , ! 0 ) ? "setClass" : t . event , P ( e , o ) ; var l = f ( e , i , t . options ) ; l . done ( function ( t ) { u ( ! t ) ; var n = F . get ( p ) ; n && n . counter === K && E ( y ( e ) ) , d ( k , i , "close" , { } ) } ) , k . setHost ( l ) , d ( k , i , "start" , { } ) } ) , k } function I ( 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 a : n && F . remove ( e ) } } ) } function E ( 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 i , a = B ( u [ 0 ] . body ) , o = T ( e , a ) || "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 || R . get ( c ) ) , z ( i ) || i === ! 0 ) { var m = t . data ( te ) ; W ( m ) && ( i = m ) } if ( r && i === ! 1 ) break ; s || ( s = T ( t , d ) , s || ( l = t . data ( xe ) , l && ( t = l ) ) ) , o || ( o = T ( t , a ) ) , t = t . parent ( ) } var g = ! r || i ; return g && s && o } function P ( e , t , n ) { n = n || { } , n . state = t ; var i = y ( e ) ; i . setAttribute ( Me , t ) ; var a = F . get ( i ) , o = a ? L ( a , n ) : n ; F . put ( i , o ) } var F = new h , R = new h , N = null , U = r . $watch ( function ( ) { return 0 === k . totalPendingRequests } , function ( e ) { e && ( U ( ) , r . $$postDigest ( function ( ) { r . $$postDigest ( function ( ) { null === N && ( N = ! 0 ) } ) } ) ) } ) , O = { } , G = e . classNameFilter ( ) , Z = G ? function ( e ) { return G . test ( e ) } : function ( ) { return ! 0 } , X = p ( $ ) ; return { on : function ( e , t , n ) { var i = c ( t ) ; O [ e ] = O [ e ] || [ ] , O [ e ] . push ( { node : i , callback : n } ) } , off : function ( e , t , n ) { function i ( e , t , n ) { var i = c ( t ) ; return e . filter ( function ( e ) { var t = e . node === i && ( ! n || e . callback === n ) ; return ! t } ) } var a = O [ e ] ; a && ( O [ e ] = 1 === arguments . length ? null : i ( a , t , n ) ) } , pin : function ( e , t ) { i ( K ( e ) , "element" , "not an element" ) , i ( K ( t ) , "parentElement" , "not an element" ) , e . data ( xe , t ) } , push : function ( e , t , n , i ) { return n = n || { } , n . domOperation = i , A ( e , t , n ) } , enabled : function ( e , t ) { var n = arguments . length ; if ( 0 === n ) t = ! ! N ; else { var i = K ( e ) ; if ( i ) { var a = y ( e ) , o = R . get ( a ) ; 1 === n ? t = ! o : ( t = ! ! t , t ? o && R . remove ( a ) : R . put ( a , ! 0 ) ) } else t = N = ! ! e } return t } } } ] } ] , Ie = [ "$$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 ) } } } ] , Ee = [ "$q" , "$sniffer" , "$$animateAsyncRun" , function ( e , t , n ) { function i ( e ) { this . setHost ( e ) , this . _doneCallbacks = [ ] , this . _runInAnimationFrame = n ( ) , this . _state = 0 } var a = 0 , o = 1 , s = 2 ; return i . chain = function ( e , t ) { function n ( ) { return i === e . length ? void t ( ! 0 ) : void e [ i ] ( function ( e ) { return e === ! 1 ? void t ( ! 1 ) : ( i ++ , void n ( ) ) } ) } var i = 0 ; n ( ) } , i . all = function ( e , t ) { function n ( n ) { a = a && n , ++ i === e . length && t ( a ) } var i = 0 , a = ! 0 ; j ( e , function ( e ) { e . done ( n ) } ) } , i . prototype = { setHost : function ( e ) { this . host = e || { } } , done : function ( e ) { this . _state === s ? e ( ) : this . _doneCallbacks . push ( e ) } , progress : O , 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 , i , a ) { function o ( e ) { return function ( t , i , a ) { var o , s = null ; if ( e . $attachPlaylist ( t ) , void 0 === t && void 0 !== i ) return e . pause ( ) ; if ( e . currentTrack ) { o = i ? i [ 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 , a ) , 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 i = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack ] ) , t . load ( i ) , t . currentTrack ++ } ) } } , prev : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack - 1 ) { var i = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack - 2 ] ) , t . load ( i ) , 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 i = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && i . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( i ) } ) ; 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 , i = parseInt ( e / 60 , 10 ) % 60 , a = parseInt ( e % 60 , 10 ) , o = ( 10 > i ? "0" + i : i ) + ":" + ( 10 > a ? "0" + a : a ) ; 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 a = { 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 : i ( 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 (
i . prototype . getName = function ( ) { return this . name } , i . prototype . getData = function ( ) { return this . data } , i . prototype . G = function ( ) { return this . H } , t ( "Zlib.GunzipMember" , i ) , t ( "Zlib.GunzipMember.prototype.getName" , i . prototype . getName ) , t ( "Zlib.GunzipMember.prototype.getData" , i . prototype . getData ) , t ( "Zlib.GunzipMember.prototype.getMtime" , i . 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 , i , a = [ ] ; for ( n = 3 ; 258 >= n ; n ++ ) i = t ( n ) , a [ n ] = i [ 2 ] << 24 | i [ 1 ] << 16 | i [ 0 ] ; return a } ( ) ; 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 , i = this . c , a = this . b , o = this . a , r = d , c = d , u = d , m = a . length , g = d ; switch ( this . d = this . f = 0 , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (first byte)" ) ) , c = r , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (second byte)" ) ) , c |= r << 8 , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (first byte)" ) ) , u = r , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (second byte)" ) ) , u |= r << 8 , c === ~ u && e ( Error ( "invalid uncompressed block header: length verify" ) ) , i + c > n . length && e ( Error ( "input buffer is broken" ) ) , this . k ) { case w : for ( ; o + c > a . length ; ) { if ( g = m - o , c -= g , p ) a . set ( n . subarray ( i , i + g ) , o ) , o += g , i += g ; else for ( ; g -- ; ) a [ o ++ ] = n [ i ++ ] ; this . a = o , a = this . e ( ) , o = this . a } break ; case k : for ( ; o + c > a . length ; ) a = this . e ( { t : 2 } ) ; break ; default : e ( Error ( "invalid inflate mode" ) ) } if ( p ) a . set ( n . subarray ( i , i + c ) , o ) , o += c , i += c ; else for ( ; c -- ; ) a [ o ++ ] = n [ i ++ ] ; this . c = i , this . a = o , this . b = a ; break ; case 1 : this . l ( O , 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 , I = [ 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 ] , E = p ? new Uint8Array ( I ) : I , 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 , R = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = R . length ; S > $ ; ++ $ ) R [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var N , U , O = a ( R ) , L = new ( p ? Uint8Array : Array ) ( 30 ) ; for ( N = 0 , U = L . length ; U > N ; ++ N ) L [ N ] = 5 ; var B = a ( L ) ; o . prototype . l = function ( e , t ) { var n = this . b , i = this . a ; this . r = e ; for ( var a , o , l , c , d = n . length - 258 ; 256 !== ( a = r ( this , e ) ) ; ) if ( 256 > a ) i >= d && ( this . a = i , n = this . e ( ) , i = this . a ) , n [ i ++ ] = a ; else for ( o = a - 257 , c = A [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , a = r ( this , t ) , l = D [ a ] , 0 < F [ a ] && ( l += s ( this , F [ a ] ) ) , i >= d && ( this . a = i , n = this . e ( ) , i = this . a ) ; c -- ; ) n [ i ] = n [ i ++ - l ] ; for ( ; 8 <= this . d ; ) this . d -= 8 , this . c -- ; this . a = i } , o . prototype . C = function ( e , t ) { var n = this . b , i = this . a ; this . r = e ; for ( var a , o , l , c , d = n . length ; 256 !== ( a = r ( this , e ) ) ; ) if ( 256 > a ) i >= d && ( n = this . e ( ) , d = n . length ) , n [ i ++ ] = a ; else for ( o = a - 257 , c = A [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , a = r ( this , t ) , l = D [ a ] , 0 < F [ a ] && ( l += s ( this , F [ a ] ) ) , i + c > d && ( n = this . e ( ) , d = n . length ) ; c
Te [ 2 * Oe + Ue ] = ( Qe > 1 ) + 0 , Ie [ Ie . length - 1 ] += 16 ; Fe [ Le + Oe ] = Je } Ne |= ke ( De , 8 - 2 * Le ) , Re |= ke ( Te , 8 - 2 * Le ) } $e |= ke ( Pe , 20 ) , Ce |= ke ( Fe , 20 ) , Y . X = $e , Ee . X = Ce , j . z = Ie , j . Oa = Re + 0 , j . ja = Re | Ne , 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 = gi , it = et . Ea , at = hi , ot = et . Ea , st = fi ; if ( 0 < et . i ) { for ( var rt = m , rt = - 1 ; 16 > rt ; ++ rt ) he ( tt , nt + rt * pi - 4 , tt , nt + rt * pi + 12 ) ; for ( rt = - 1 ; 8 > rt ; ++ rt ) he ( it , at + rt * pi - 4 , it , at + rt * pi + 4 ) , he ( ot , st + rt * pi - 4 , ot , st + rt * pi + 4 ) } else { for ( rt = 0 ; 16 > rt ; ++ rt ) tt [ nt + rt * pi - 1 ] = 129 ; for ( rt = 0 ; 8 > rt ; ++ rt ) it [ at + rt * pi - 1 ] = 129 , ot [ st + rt * pi - 1 ] = 129 ; 0 < et . d && ( tt [ nt - 1 - pi ] = it [ at - 1 - pi ] = ot [ st - 1 - pi ] = 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 - pi , lt , ct , 16 ) , t ( it , at - pi , dt , ut , 8 ) , t ( ot , st - pi , pt , mt , 8 ) ; else if ( 0 == et . i ) { for ( i = 0 ; 21 > i ; ++ i ) tt [ nt - pi - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) it [ at - pi - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) ot [ st - pi - 1 + i ] = 127 } if ( et . wa ) { var ft = nt - pi + 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 * pi ] = tt [ _t + ft + 4 * pi ] = tt [ _t + ft + 8 * pi ] = tt [ _t + ft + 12 * pi ] = tt [ _t + ft + 0 ] ; for ( ht = 0 ; 16 > ht ; ht ++ ) { var vt = tt , yt = nt + ha [ ht ] ; la [ et . Eb [ ht ] ] ( vt , yt ) , et . Oa & 1 << ht ? Oi ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Bi ( gt , 16 * + ht , vt , yt ) } } else { var bt = ge ( et , et . Eb [ 0 ] ) ; if ( ca [ bt ] ( tt , nt ) , et . ja ) for ( ht = 0 ; 16 > ht ; ht ++ ) vt = tt , yt = nt + ha [ ht ] , et . Oa & 1 << ht ? Oi ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Bi ( gt , 16 * + ht , vt , yt ) } if ( bt = ge ( et , et . Tc ) , da [ bt ] ( it , at ) , da [ bt ] ( ot , st ) , 983040 & et . ja ) { var wt = et . z , kt = 256 ; 983040 & et . Oa ? Li ( wt , kt , it , at ) : ji ( wt , kt , it , at ) } if ( 15728640 & et . ja ) { var $t = et . z , kt = 320 ; 15728640 & et . Oa ? Li ( $t , kt , ot , st ) : ji ( $t , kt , ot , st ) } et . d < et . hb - 1 && ( t ( lt , ct , tt , nt + 15 * pi , 16 ) , t ( dt , ut , it , at + 7 * pi , 8 ) , t ( pt , mt , ot , st + 7 * pi , 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 , It = 8 * St . Ja * St . r , Et = St . ca , Tt = St . da + 16 * St . i + 16 * St . Ja * St . H , Dt = St . aa , Pt = St . ba + 8 * St . i + It , Ft = St . ra , Rt = St . sa + 8 * St . i + It , At = 0 ; 16 > At ; ++ At ) t ( Et , Tt + At * St . H , St . Ea , + gi + At * pi , 16 ) ; for ( At = 0 ; 8 > At ; ++ At ) t ( Dt , Pt + At * St . r , St . Ea , + hi + At * pi , 8 ) , t ( Ft , Rt + At * St . r , St . Ea , + fi + At * pi , 8 ) } var Nt = e , Ut = s , Ot = 1 , Lt = Nt . oa ; if ( Nt . qb ) { var Bt = Nt . rc , Ot = Ot & WebPWorkerSync ( Bt ) ; if ( p ( Bt . a == OK ) , Ot ) { if ( Lt . N = Ut , Lt . ha = Nt . Ja , Lt . d = Nt . d , Lt . W = Nt . W , Lt . W ) { var jt = Lt . M ; Lt . M = Nt . M , Nt . M = jt } WebPWorkerLaunch ( Bt ) , ++ Nt . Ja == Nt . jb && ( Nt . Ja = 0 ) } } else { Lt . d = Nt . d , Lt . W = Nt . W ; t : { var qt = 1 , Ht = Nt . oa , Vt = pa [ Nt . A ] , zt = Vt * Nt . H , Wt = parseInt ( Vt / 2 ) * Nt . r , Gt = 16 * Ht . ha * Nt . H , Kt = 8 * Ht . ha * Nt . r , Yt = Nt . ca , Zt = Nt . da - zt + Gt , Xt = Nt . aa , Jt = Nt . ba - Wt + Kt , tn = Nt . ra , an = Nt . sa - Wt + Kt , on = 0 == Ht . d , rn = ( Ht . d >= Nt . hb - 1 ) + 0 , ln = 16 * Ht . d , cn = 16 * ( Ht . d + 1 ) ; if ( Ht . W ) { var dn = Nt , 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 && Xi ( yn , bn , _n , $n + 4 ) , vn . ab && Qi ( yn , bn , _n , $n ) , hn > 0 && Zi ( yn , bn , _n , $n + 4 ) , vn . ab && Ji ( 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 , In = mn . Ac . fb ? wn >= 40 ? 2 : wn >= 15 ? 1 : 0 : wn >= 40 ? 3 : wn >= 20 ? 2 : wn >= 15 ? 1 : 0 ; gn > 0 && ( Hi ( yn , bn , _n , $n + 4 , kn , In ) , zi ( Cn , Mn , xn , An , Sn , $n + 4 , kn , In ) ) , vn . ab && ( Gi ( yn , bn , _n , $n , kn , In ) , Yi ( Cn , Mn , xn , An , Sn , $n , kn , In ) ) , hn > 0 && ( qi ( yn , bn , _n , $n + 4 , kn , In ) , Vi ( Cn , Mn , xn , An , Sn , $n + 4 , kn , In ) ) , vn . ab && ( Wi ( yn , bn , _n , $n , kn , In ) , Ki ( Cn , Mn , xn , An , Sn , $n , kn , In ) ) } } } if ( Ut . put ) { if ( on ? ( Ut . y = Nt . ca , Ut . D = Nt . da + Gt , Ut . c = Nt . aa , Ut . B = Nt . ba + Kt , Ut . S = Nt . ra , Ut . C = Nt . sa + Kt ) : ( ln -= Vt , Ut . y = Yt , Ut . D = Zt , Ut . c = Xt , Ut . B = Jt , Ut . S = tn , Ut . C = an ) , rn || ( cn -= Vt ) , cn > Ut . K && ( cn = Ut . K ) , Nt . Ga != g && cn > ln && ( 0 == ln ? ( Ut . p = U ( Nt , ln , cn - ln ) , Ut . q = 0 ) : Ut . q = U ( Nt , ln , cn - ln ) , Ut . p == g ) ) { Ot = ye ( Nt , nn , "Could not decode alpha data." ) ; break t } if ( ln < Ut . k ) { var En = Ut . k - ln , ln = Ut . k ; p ( ! ( 1 & En ) ) , Ut . D += Nt . H * En , Ut . B += Nt . r * ( En >> 1 ) , Ut . C += Nt . r * ( En >> 1 ) , Ut . p != g && ( Ut . q += Ut . width * En ) } cn > ln && ( Ut . D += Ut . t , Ut . B += Ut . t >> 1 , Ut . C += Ut . t >> 1 , Ut . p != g && ( Ut . q += Ut . t ) , Ut . w = ln - Ut . k , Ut . m = Ut . Ka - Ut . t , Ut . h = cn - ln , qt = Ut . put ( Ut ) ) } Ht . ha + 1 == Nt . jb && ! rn && ( t ( Nt . ca , Nt . da - zt , Yt , Zt + 16 * Nt . H , zt ) , t ( Nt . aa , Nt . ba - Wt , Xt , Jt + 8 * Nt . r , Wt ) , t ( Nt . ra , Nt . sa - W
this . WebPGetDecoderVersion = this . Ld = function ( ) { return 512 } ; var ka = [ 0 , 1 , 2 , 3 , 6 , 4 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 0 ] , $a = [ [ 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 ] ] , Sa = [ 0 , 1 , 4 , 8 , 5 , 2 , 3 , 6 , 9 , 12 , 13 , 10 , 7 , 11 , 14 , 15 ] , Ca = u ( [ di , ui ] , "" ) ; c ( 4 , f ) ; var Ma = [ [ 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 ] ] , xa = 134480385 , Aa = 16 , Ia = - 227 , Ea = 482 , Ta = [ Ue , 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 ( Re ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Re ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Re ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Re ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var i = t [ n - 1 ] ; return e = Fe ( e , t [ n + 0 ] ) , ( Ne ( e >> 24 & 255 , i >> 24 & 255 ) << 24 | Ne ( e >> 16 & 255 , i >> 16 & 255 ) << 16 | Ne ( e >> 8 & 255 , i >> 8 & 255 ) << 8 | Ne ( e >> 0 & 255 , i >> 0 & 255 ) ) >>> 0 } , Ue , Ue ] , Da = { Cc : f , Bc : f , Kc : f } , Pa = 16 , Fa = 16 , Ra = 16 , Na = [ 2 , 3 , 7 ] , Ua = [ 3 , 3 , 11 ] , Oa = 0 , La = 1 , Ba = 2 , ja = 3 , qa = 4 , Ha = [ xn + An , xn , xn , xn , 40 ] , Va = 19 , za = [ 17 , 18 , 0 , 1 , 2 , 3 , 4 , 5 , 16 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] , Wa = 120 , Ga = [ 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 ] , Ka = 1 << Aa - 1 , Ya = c ( 256 , 0 ) , Za = c ( 256 , 0 ) , Xa = c ( 256 , _ ) , Ja = c ( 256 , _ ) , Qa = c ( Ea - Ia , f ) , eo = c ( Ea - Ia , f ) , to = 0 , no = Array ( Xt ) , io = [ function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { mt ( e , t , n , i , a , o , s , r , l , c , d , u , p , Me , 3 ) } , gt , function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { mt ( e , t , n , i , a , o , s , r , l , c , d , u , p , Ee , 3 ) } , ht , ft , _t , function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { mt ( e , t , n , i , a , o , s , r , l , c , d , u , p , xe , 2 ) } , gt , ht , ft , _t ] ; this . Hd = function ( e , t , n , i ) { return Ft ( Ot , e , t , n , i ) } , this . Id = function ( e , t , n , i ) { return Ft ( Lt , e , t , n , i ) } , this . Jd = function ( e , t , n , i ) { return Ft ( Ht , e , t , n , i ) } , this . Ed = function ( e , t , n , i ) { return Ft ( qt , e , t , n , i ) } , this . Fd = function ( e , t , n , i ) { return Ft ( Bt , e , t , n , i ) } , this . Gd = function ( e , t , n , i ) { return Ft ( jt , e , t , n , i ) } , this . WebPDecode = this . Dd = function ( t , n , i ) { var a = e ( un ) , o = "VP8StatusCode" ; return i == g ? tn : ( o = Rt ( t , [ 0 ] , [ n ] , i . input ) , o != Qt ? o == rn ? nn : o : ( a . j = i . j , a . Qa = i . Qa , o = Pt ( t , 0 , [ n ] , a ) ) ) } } } ( ) ; var _logTimer = ( new Date ) . getTime ( ) ; window . onAnimationFrameCallback = Config . Modes . animations && "function" == typeof window . requestAnimationFrame ? function ( e ) { return function ( ) { window . requestAnimationFrame ( e ) } } : function ( e ) { return e } , 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 i ( e ) { return e && e . toLowerCase ( ) || "" } function a ( e , t , i ) { if ( void 0 !== i . fullTexts [ e ] ) return ! 1 ; if ( t = n ( t ) , ! t . length ) return ! 1 ; var a = i . shortIndexes ; i . fullTexts [ e ] = t , angular . forEach ( t . split ( " " ) , function ( t ) { var n , i , o = Math . min ( t . length , 3 ) ; for ( i = 1 ; o >= i ; i ++ ) n = t . substr ( 0 , i ) , void 0 === a [ n ] ? a [ n ] = [ e ] : a [ n ] . push ( e ) } ) } function o ( e , t ) { var i = t . shortIndexes , a = 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 = i [ 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 = a [ 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 = /
void 0 === o && ( o = i ( n , a ) ) ; var d , u , p , g , h = 0 , f = o . length , _ = [ ] , v = 0 , y = a . emojiIconSize || m ; for ( h = 0 ; f > h ; h ++ ) { if ( d = o [ h ] , d . offset > v ) _ . push ( encodeEntities ( n . substr ( v , d . offset - v ) ) ) ; else if ( d . offset < v ) continue ; switch ( p = ! 1 , u = n . substr ( d . offset , d . length ) , d . _ ) { case "messageEntityMention" : var b = ! a . noLinks && M [ r ] ; if ( ! b ) { p = ! 0 ; break } var w = u . substr ( 1 ) , k = "" ; a . highlightUsername && a . 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 = ! a . 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 ( a . noLinks ) { p = ! 0 ; break } _ . push ( '<a href="' , encodeEntities ( "mailto:" + u ) , '" target="_blank">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityUrl" : case "messageEntityTextUrl" : if ( a . 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 , a ) , "</a>" ) ; break ; case "messageEntityLinebreak" : _ . push ( a . 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 ( a . noLinks || a . noCommands || l ) { p = ! 0 ; break } var I , E , T = u . substr ( 1 ) ; - 1 != ( E = T . indexOf ( "@" ) ) ? ( I = T . substr ( E + 1 ) , T = T . substr ( 0 , E ) ) : I = a . fromBot , _ . push ( '<a href="' , encodeEntities ( "tg://bot_command?command=" + encodeURIComponent ( T ) + ( I ? "&bot=" + encodeURIComponent ( I ) : "" ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityBold" : _ . push ( "<strong>" , s ( u , d . nested , a ) , "</strong>" ) ; break ; case "messageEntityItalic" : _ . push ( "<em>" , s ( u , d . nested , a ) , "</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 ( "" ) ) , ! a . nested && ( c || a . 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 , i = e . split ( ")" ) . length - 1 ; i > n && ")" === e . charAt ( t - 1 ) ; ) e = e . substr ( 0 , t - 1 ) , i -- , t -- ; return n > i && ( 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 , i , a = e , e = [ ] ; n = a . match ( k ) ; ) e . push ( a . substr ( 0 , n . index ) ) , e . push ( n [ 8 ] ? ( d = u [ n [ 8 ] ] ) && ( i = p [ d ] [ 1 ] [ 0 ] ) ? ":" + i + ":" : n [ 0 ] : n [ 0 ] ) , a = a . substr ( n . index + n [ 0 ] . length ) ; return e . push ( a ) , 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
originalError : e } } , u . prototype . processMessage = function ( e , n , a ) { switch ( e . _ ) { case "msg_container" : for ( var o = e . messages . length , s = 0 ; o > s ; s ++ ) this . processMessage ( e . messages [ s ] , n , a ) ; break ; case "bad_server_salt" : console . log ( dT ( ) , "Bad server salt" , 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 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 , a ) ; break ; case "new_session_created" : this . ackMessage ( n ) , this . processMessageAck ( e . first _msg _id ) , this . applyServerSalt ( e . server _salt ) ; var c = this ; i . 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 , i ) { return new u ( e , t , n , i ) } , 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 , i , a , o , s , r , l , c ) { function d ( e ) { _ !== e && ( _ = e , c . setAuthorized ( _ ) ) } function u ( t , n ) { var i = angular . extend ( { dcID : t } , n ) ; e . set ( { dc : t , user _auth : i } ) , d ( ! 0 ) , r . $broadcast ( "user_auth" , i ) , 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 i = [ ] , a = 0 ; a < n . length ; a ++ ) n [ a ] && i . push ( g ( "auth.logOut" , { } , { dcID : a + 1 } ) ) ; return l . all ( i ) . 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 ( i , a ) { a = a || { } ; var o = a . fileUpload || a . fileDownload ? y : v ; if ( ! i ) throw new Exception ( "get Networker without dcID" ) ; if ( void 0 !== o [ i ] ) return s . when ( o [ i ] ) ; var r = "dc" + i + "_auth_key" , c = "dc" + i + "_server_salt" ; return e . get ( r , c ) . then ( function ( s ) { if ( void 0 !== o [ i ] ) return o [ i ] ; var d = s [ 0 ] , u = s [ 1 ] ; if ( d && 512 == d . length ) { var p = bytesFromHex ( d ) , m = bytesFromHex ( u ) ; return o [ i ] = n . getNetworker ( i , p , m , a ) } return a . createNetworker ? t . auth ( i ) . then ( function ( t ) { var s = { } ; return s [ r ] = bytesToHex ( t . authKey ) , s [ c ] = bytesToHex ( t . serverSalt ) , e . set ( s ) , o [ i ] = n . getNetworker ( i , t . authKey , t . serverSalt , a ) } , 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 , i ) { i = i || { } ; var s , r , c = l . defer ( )
} ) } function l ( e , t , n ) { Config . Navigator . retina && ( t *= 2 , n *= 2 ) ; var i = { _ : "photoSizeEmpty" } , a = 16777215 ; return angular . forEach ( e . sizes , function ( e ) { var o = Math . abs ( e . w * e . h - t * n ) ; a > o && ( i = e , a = o ) } ) , i } function c ( e , t , n ) { var a = o . getUserInput ( e ) ; return i . invokeApi ( "photos.getUserPhotos" , { user _id : a , offset : 0 , limit : n || 20 , max _id : t || 0 } ) . then ( function ( t ) { o . saveApiUsers ( t . users ) ; for ( var n = [ ] , i = { user _id : e } , a = 0 ; a < t . photos . length ; a ++ ) r ( t . photos [ a ] , i ) , n . push ( t . photos [ a ] . id ) ; return { count : t . count || t . photos . length , photos : n } } ) } function d ( e ) { if ( f [ e ] ) { var n = f [ e ] , i = $ ( window ) . width ( ) - ( Config . Mobile ? 20 : 32 ) , o = $ ( t ) . height ( ) - ( Config . Mobile ? 150 : 116 ) ; i > 800 && ( i -= 208 ) ; var s = l ( n , i , o ) ; s && ! s . preloaded && ( s . preloaded = ! 0 , s . size ? a . downloadFile ( s . location . dc _id , { _ : "inputFileLocation" , volume _id : s . location . volume _id , local _id : s . location . local _id , secret : s . location . secret } , s . size ) : a . downloadSmallFile ( s . location ) ) } } function u ( e ) { return f [ e ] || { _ : "photoEmpty" } } function p ( e , t ) { t = t || { } ; var n = angular . copy ( f [ e ] ) || { _ : "photoEmpty" } , i = t . website ? 100 : Math . min ( _ - 80 , Config . Mobile ? 210 : 260 ) , a = t . website ? 100 : Math . min ( v - 100 , Config . Mobile ? 210 : 260 ) , o = l ( n , i , a ) , s = { placeholder : "img/placeholders/PhotoThumbConversation.gif" , width : i , height : a } ; if ( t . website && Config . Mobile && ( i = 50 , a = 50 ) , o && "photoSizeEmpty" != o . _ ) { var r = calcImageInBox ( o . w , o . h , i , a ) ; 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 ) , i = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 32 ) , a = $ ( t ) . height ( ) - ( Config . Mobile ? 0 : 116 ) ; ! Config . Mobile && i > 800 && ( i -= 208 ) ; var o = l ( n , i , a ) , s = { placeholder : "img/placeholders/PhotoThumbModal.gif" } ; if ( s . width = i , s . height = a , o && "photoSizeEmpty" != o . _ ) { var r = calcImageInBox ( o . w , o . h , i , a , ! 0 ) ; s . width = r . w , s . height = r . h , s . modalWidth = Math . max ( s . width , Math . min ( 400 , i ) ) , s . location = o . location , s . size = o . size } return n . full = s , n } function g ( t , i ) { if ( ! t || "0" === t ) return ! 1 ; var a = n . $new ( ! 0 ) ; a . photoID = t ; var o = "PhotoModalController" ; i && i . p > 0 ? ( o = "UserpicModalController" , a . userID = i . p ) : i && i . p < 0 ? ( o = "ChatpicModalController" , a . chatID = - i . p ) : i && i . m > 0 && ( a . messageID = i . m , i . w && ( a . webpageID = i . w ) ) ; e . open ( { templateUrl : templateUrl ( "photo_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : o , scope : a , windowClass : "photo_modal_window" } ) } function h ( e ) { var n = f [ e ] , i = "jpg" , o = "image/jpeg" , r = "photo" + e + "." + i , 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 , i , o ) . then ( function ( e ) { e && a . 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 = a . getCachedFile ( p ) ; return e ? s . download ( e , o , r ) : void a . 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 , i , a , 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 a = "" ; if ( "GitHub" == e . site _name ) { var l = e . url . match ( /(https?:\/\/github\.com\/[^\/]+\/[^\/]+)/ ) ; l && ( a = l [ 0 ] + "/issues/{1}" ) } if ( e . rDescription = r . wrapRichText ( e . description , { contextSite : e . site _name || "external" , contextHashtag : a } ) , 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 ) } ) , i . $broadcast ( "webpage_updated" , { id : e . id , msgs : c } ) } } function c ( t , n ) { var a = i . $new ( ! 0 ) ; a . webpageID = t , a . messageID = n , e . open ( { templateUrl : templateUrl ( " embed _
testSound : k } ; var Z , X } ] ) . service ( "PasswordManager" , [ "$timeout" , "$q" , "$rootScope" , "MtpApiManager" , "CryptoWorker" , "MtpSecureRandom" , function ( e , t , n , i , a , o ) { function s ( e ) { return i . invokeApi ( "account.getPassword" , { } , e ) . then ( function ( e ) { return e } ) } function r ( e , n ) { var a , s , r = { new _settings : { _ : "account.passwordInputSettings" , flags : 0 , hint : n . hint || "" } } ; if ( a = "string" == typeof n . cur _password && n . cur _password . length > 0 ? u ( e . current _salt , n . cur _password ) : t . when ( [ ] ) , "string" == typeof n . new _password && n . new _password . length > 0 ) { var l = new Array ( 8 ) , c = bufferConcat ( e . new _salt , l ) ; o . nextBytes ( l ) , s = u ( c , n . new _password ) , r . new _settings . new _salt = c , r . new _settings . flags |= 1 } else "string" == typeof n . new _password && ( r . new _settings . flags |= 1 , r . new _settings . new _salt = [ ] ) , s = t . when ( [ ] ) ; return "string" == typeof n . email && ( r . new _settings . flags |= 2 , r . new _settings . email = n . email || "" ) , t . all ( [ a , s ] ) . then ( function ( e ) { return r . current _password _hash = e [ 0 ] , r . new _settings . new _password _hash = e [ 1 ] , i . invokeApi ( "account.updatePasswordSettings" , r ) } ) } function l ( e , t , n ) { return u ( e . current _salt , t ) . then ( function ( e ) { return i . invokeApi ( "auth.checkPassword" , { password _hash : e } , n ) } ) } function c ( e , t ) { return i . invokeApi ( "auth.requestPasswordRecovery" , { } , t ) } function d ( e , t ) { return i . invokeApi ( "auth.recoverPassword" , { code : e } , t ) } function u ( e , t ) { for ( var n = unescape ( encodeURIComponent ( t ) ) , i = new ArrayBuffer ( n . length ) , o = new Uint8Array ( i ) , s = 0 , r = n . length ; r > s ; s ++ ) o [ s ] = n . charCodeAt ( s ) ; return i = bufferConcat ( bufferConcat ( e , o ) , e ) , a . sha256Hash ( i ) } return { check : l , getState : s , requestRecovery : c , recover : d , updateSettings : r } } ] ) . service ( "ErrorService" , [ "$rootScope" , "$modal" , "$window" , function ( e , t , n ) { function i ( n , i ) { if ( s >= 1 ) return console . log ( "Skip error box, too many open" , s , n , i ) , ! 1 ; i = i || { } ; var a = e . $new ( ) ; angular . extend ( a , n ) , s ++ ; var o = t . open ( { templateUrl : templateUrl ( "error_modal" ) , scope : a , windowClass : i . windowClass || "error_modal_window" } ) ; return o . result [ "finally" ] ( function ( ) { s -- } ) , o } function a ( e , t ) { return i ( { title : e , description : t } ) } function o ( n , i ) { i = i || { } ; var a = e . $new ( ) ; angular . extend ( a , n ) ; var o = t . open ( { templateUrl : templateUrl ( "confirm_modal" ) , scope : a , windowClass : i . windowClass || "confirm_modal_window" } ) ; return o . result } var s = 0 ; return n . safeConfirm = function ( e , t ) { "string" == typeof e && ( e = { message : e } ) , o ( e ) . then ( function ( e ) { t ( e || ! 0 ) } , function ( ) { t ( ! 1 ) } ) } , { show : i , alert : a , confirm : o } } ] ) . service ( "PeersSelectService" , [ "$rootScope" , "$modal" , function ( e , t ) { function n ( n ) { var i = e . $new ( ) ; return i . multiSelect = ! 1 , i . noMessages = ! 0 , n && angular . extend ( i , n ) , t . open ( { templateUrl : templateUrl ( "peer_select" ) , controller : "PeerSelectController" , scope : i , windowClass : "peer_select_window mobile_modal" , backdrop : "single" } ) . result } function i ( i ) { if ( Config . Mobile ) return n ( i ) . then ( function ( e ) { return [ e ] } ) ; var a = e . $new ( ) ; return a . multiSelect = ! 0 , a . noMessages = ! 0 , i && angular . extend ( a , i ) , t . open ( { templateUrl : templateUrl ( "peer_select" ) , controller : "PeerSelectController" , scope : a , windowClass : "peer_select_window mobile_modal" , backdrop : "single" } ) . result } return { selectPeer : n , selectPeers : i } } ] ) . service ( "ContactsSelectService" , [ "$rootScope" , "$modal" , function ( e , t ) { function n ( n , i ) { i = i || { } ; var a = e . $new ( ) ; return a . multiSelect = n , angular . extend ( a , i ) , ! a . action && n && ( a . action = "select" ) , t . open ( { templateUrl : templateUrl ( "contacts_modal" ) , controller : "ContactsModalController" , scope : a , windowClass : "contacts_modal_window mobile_modal" , backdrop : "single" } ) . result } return { selectContacts : function ( e ) { return n ( ! 0 , e ) } , selectContact : function ( e ) { return n ( ! 1 , e ) } } } ] ) . service ( "ChangelogNotifyService" , [ "Storage" , "$rootScope" , "$modal" , function ( e , t , n ) { function i ( ) { e . get ( "last_version" ) . then ( function ( t ) { t != Config . App . version && ( t && a ( t ) , e . set ( { last _version : Config . App . version } ) ) } ) } function a ( e ) { var i = t . $new ( ) ; i . lastVersion = e , n . open ( { controller : "ChangelogModalController" , templateUrl : templateUrl ( "changelog_modal" ) , scope : i , windowClass : "changelog_modal_window mobile_modal" } ) } return { checkUpdate : i , showChangelog : a } } ] ) . 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 ( " htt
else { if ( r ) { if ( Z != t ) { var c , d , u , p = Z > t ; for ( c = 0 ; c < V . messages . length ; c ++ ) if ( V . messages [ c ] . mid == Z ) { d = c ; break } for ( c = d ; V . messages [ c ] && ( u = V . messages [ c ] . mid ) != t ; ) e . selectedMsgs [ u ] || ( e . selectedMsgs [ u ] = ! 0 , e . selectedCount ++ ) , c += p ? - 1 : 1 } } else Z = t ; e . selectedMsgs [ t ] = ! 0 , e . selectedCount ++ , e . historyState . selectActions || ( e . historyState . selectActions = "selected" , e . $broadcast ( "ui_panel_update" ) ) } e . $broadcast ( "messages_select" ) } function P ( t , n ) { return e . $broadcast ( "inline_bot_select" , t ) , cancelEvent ( n ) } function F ( t ) { e . selectedMsgs = { } , e . selectedCount = 0 , e . historyState . selectActions = ! 1 , Z = ! 1 , t || e . $broadcast ( "ui_panel_update" ) , e . $broadcast ( "messages_select" ) } function R ( ) { h . confirm ( { type : "HISTORY_FLUSH" } ) . then ( function ( ) { l . flushHistory ( e . curDialog . peerID ) . then ( function ( ) { F ( ) } ) } ) } function N ( t ) { var n = [ ] ; t ? n . push ( t ) : e . selectedCount > 0 && angular . forEach ( e . selectedMsgs , function ( e , t ) { n . push ( t ) } ) , n . length && h . confirm ( { type : "MESSAGES_DELETE" , count : n . length } ) . then ( function ( ) { l . deleteMessages ( n ) . then ( function ( ) { F ( ) } ) } ) } function U ( t ) { var n = [ ] ; t ? n . push ( t ) : e . selectedCount > 0 && angular . forEach ( e . selectedMsgs , function ( e , t ) { n . push ( t ) } ) , n . length && u . selectPeer ( { canSend : ! 0 } ) . then ( function ( e ) { F ( ) , a . $broadcast ( "history_focus" , { peerString : e , attachment : { _ : "fwd_messages" , id : n } } ) } ) } function O ( t ) { t || 1 != e . selectedCount || angular . forEach ( e . selectedMsgs , function ( e , n ) { t = n } ) , t && ( F ( ) , e . $broadcast ( "reply_selected" , t ) ) } function L ( ) { e . historyState . selectActions ? F ( ) : ( e . historyState . selectActions = "selected" , e . $broadcast ( "ui_panel_update" ) ) } function B ( t ) { e . historyFilter . mediaType = t || ! 1 , e . curDialog . messageID = ! 1 , V . messages = [ ] , V . ids = [ ] , e . state . empty = ! 0 , M ( ) } function j ( ) { e . historyFilter . mediaType ? B ( ) : e . curDialog . messageID ? a . $broadcast ( "history_focus" , { peerString : e . curDialog . peer } ) : M ( ! 0 ) } e . $watchCollection ( "curDialog" , f ) , d . attach ( ) , p . start ( ) , m . start ( ) , e . peerHistories = [ ] , e . selectedMsgs = { } , e . selectedCount = 0 , e . historyState . selectActions = ! 1 , e . historyState . botActions = ! 1 , e . historyState . channelActions = ! 1 , e . historyState . canDelete = ! 1 , e . historyState . canReply = ! 1 , e . historyState . missedCount = 0 , e . historyState . skipped = ! 1 , e . state = { } , e . toggleMessage = D , e . selectedDelete = N , e . selectedForward = U , e . selectedReply = O , e . selectedCancel = F , e . selectedFlush = R , e . selectInlineBot = P , e . startBot = A , e . cancelBot = I , e . joinChannel = E , e . togglePeerMuted = T , e . toggleEdit = L , e . toggleMedia = B , e . returnToRecent = j , e . $on ( "history_edit_toggle" , L ) , e . $on ( "history_edit_flush" , R ) , e . $on ( "history_media_toggle" , function ( e , t ) { B ( t ) } ) , e . $on ( "history_return_recent" , j ) ; var q , H , V = ! 1 , z = ! 1 , W = ! 1 , G = ! 1 , K = 0 , Y = 0 , Z = ! 1 , X = { photos : "inputMessagesFilterPhotos" , video : "inputMessagesFilterVideo" , documents : "inputMessagesFilterDocument" , audio : "inputMessagesFilterAudio" } , J = 0 , Q = 0 , ee = ! 1 , te = ! 1 , ne = 0 , ie = ! 1 , ae = ! 1 ; e . $on ( "history_update" , angular . noop ) ; var oe = ! 1 ; e . $on ( "stateSynchronized" , function ( ) { oe && ( oe == e . curDialog . peerID && M ( ) , oe = ! 1 ) } ) , e . $on ( "reply_button_press" , function ( t , n ) { var i = e . historyState . replyKeyboard ; i && l . sendText ( q , n . text , { replyToMsgID : 0 > q && i . mid } ) } ) , e . $on ( "history_reload" , function ( t , n ) { n == e . curDialog . peerID && M ( ) } ) , e . $on ( "history_forbidden" , function ( n , i ) { i == e . curDialog . peerID && t . url ( "/im" ) , y ( i ) } ) , e . $on ( "dialog_migrate" , function ( t , n ) { if ( n . migrateFrom == e . curDialog . peerID ) { var i = c . getPeerString ( n . migrateTo ) ; a . $broadcast ( "history_focus" , { peerString : i } ) } y ( n . migrateFrom ) } ) , e . $on ( "notify_settings" , function ( t , n ) { n . peerID == e . curDialog . peerID && k ( ) } ) , e . $on ( "channel_settings" , function ( t , n ) { n . channelID == - e . curDialog . peerID && k ( ) } ) ; var se = { } ; e . $on ( "history_append" , function ( t , i ) { var o = v ( i . peerID ) ; if ( o ) { var s = i . peerID == e . curDialog . peerID ; if ( s ) { if ( e . historyFilter . mediaType || e . historyState . skipped ) return void ( i . my ? j ( ) : e . historyState . missedCount ++ ) ; e . curDialog . messageID && i . my && j ( ) , delete e . state . empty } var r = l . wrapForHistory ( i . messageID ) ; o . messages . push ( r ) , o . ids . push ( i . messageID ) , l . regroupWrappedHistory ( o . messages , - 3 ) && e . $broadcast ( "messages_regroup" ) , s && ( e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_history_append_new" , { my : i . my , idleScroll : z && ! r . pFlags . out && a . idle . isIDLE } ) , i . my && e . historyUnreadAfter && ( delete e . historyUnreadAfter , e . $broadcast ( "messages_unread_after" ) ) , a . idle . i
scope : t , windowClass : "md_simple_modal_window mobile_modal" } ) } , e . goToHistory = function ( ) { n . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } , e . hasRights = function ( t ) { return o . hasRights ( e . chatID , t ) } } ] ) . controller ( "SettingsModalController" , [ "$rootScope" , "$scope" , "$timeout" , "$modal" , "AppUsersManager" , "AppChatsManager" , "AppPhotosManager" , "MtpApiManager" , "Storage" , "NotificationsManager" , "MtpApiFileManager" , "PasswordManager" , "ApiUpdatesManager" , "ChangelogNotifyService" , "LayoutSwitchService" , "AppRuntimeManager" , "ErrorService" , "_" , function ( e , t , n , i , a , o , s , r , l , c , d , u , p , m , g , h , f , _ ) { function v ( ) { n . cancel ( b ) , b = ! 1 , u . getState ( ) . then ( function ( e ) { t . password = e , "account.noPassword" == e . _ && e . email _unconfirmed _pattern && ! w && ( b = n ( v , 5e3 ) ) } ) } function y ( e ) { e && e . type && 0 === e . type . indexOf ( "image" ) && ( t . photo . updating = ! 0 , d . uploadFile ( e ) . then ( function ( e ) { r . invokeApi ( "photos.uploadProfilePhoto" , { file : e , caption : "" , geo _point : { _ : "inputGeoPointEmpty" } , crop : { _ : "inputPhotoCropAuto" } } ) . then ( function ( e ) { a . saveApiUsers ( e . users ) , r . getUserID ( ) . then ( function ( n ) { s . savePhoto ( e . photo , { user _id : n } ) , p . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateUserPhoto" , user _id : n , date : tsNow ( ! 0 ) , photo : a . getUser ( n ) . photo , previous : ! 0 } } ) , t . photo = { } } ) } ) } ) [ "finally" ] ( function ( ) { delete t . photo . updating } ) ) } t . profile = { } , t . photo = { } , t . version = Config . App . version , r . getUserID ( ) . then ( function ( e ) { t . profile = a . getUser ( e ) } ) , r . invokeApi ( "users.getFullUser" , { id : { _ : "inputUserSelf" } } ) . then ( function ( e ) { a . saveApiUser ( e . user ) , s . savePhoto ( e . profile _photo , { user _id : e . user . id } ) } ) , t . notify = { volume : . 5 } , t . send = { } , t . $watch ( "photo.file" , y ) , t . password = { _ : "account.noPassword" } , v ( ) ; var b = ! 1 , w = ! 1 ; t . changePassword = function ( n ) { if ( n = n || { } , "cancel_email" == n . action ) return f . confirm ( { type : "PASSWORD_ABORT_SETUP" } ) . then ( function ( ) { u . updateSettings ( t . password , { email : "" } ) . then ( v ) } ) ; var a = e . $new ( ) ; a . password = t . password , angular . extend ( a , n ) ; var o = i . open ( { scope : a , templateUrl : templateUrl ( "password_update_modal" ) , controller : "PasswordUpdateModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) ; o . result [ "finally" ] ( v ) } , t . showSessions = function ( ) { i . open ( { templateUrl : templateUrl ( "sessions_list_modal" ) , controller : "SessionsListModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . $on ( "$destroy" , function ( ) { n . cancel ( b ) , w = ! 0 } ) , t . deletePhoto = function ( ) { t . photo . updating = ! 0 , r . invokeApi ( "photos.updateProfilePhoto" , { id : { _ : "inputPhotoEmpty" } , crop : { _ : "inputPhotoCropAuto" } } ) . then ( function ( e ) { r . getUserID ( ) . then ( function ( n ) { p . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateUserPhoto" , user _id : n , date : tsNow ( ! 0 ) , photo : e , previous : ! 0 } } ) , t . photo = { } } ) } ) [ "finally" ] ( function ( ) { delete t . photo . updating } ) } , t . editProfile = function ( ) { i . open ( { templateUrl : templateUrl ( "profile_edit_modal" ) , controller : "ProfileEditModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . changeUsername = function ( ) { i . open ( { templateUrl : templateUrl ( "username_edit_modal" ) , controller : "UsernameEditModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . terminateSessions = function ( ) { f . confirm ( { type : "TERMINATE_SESSIONS" } ) . then ( function ( ) { r . invokeApi ( "auth.resetAuthorizations" , { } ) } ) } , l . get ( "notify_nodesktop" , "send_ctrlenter" , "notify_volume" , "notify_novibrate" , "notify_nopreview" ) . then ( function ( i ) { t . notify . desktop = ! i [ 0 ] , t . send . enter = i [ 1 ] ? "" : "1" , t . notify . volume = i [ 2 ] !== ! 1 ? i [ 2 ] > 0 && i [ 2 ] <= 1 ? i [ 2 ] : 0 : . 5 , t . notify . canVibrate = c . getVibrateSupport ( ) , t . notify . vibrate = ! i [ 3 ] , t . notify . preview = ! i [ 4 ] , t . notify . volumeOf4 = function ( ) { return 1 + Math . ceil ( ( t . notify . volume - . 1 ) / . 33 ) } , t . toggleSound = function ( ) { t . notify . volume = t . notify . volume ? 0 : . 5 } ; var a ; t . $watch ( "notify.volume" , function ( t , i ) { t !== i && ( l . set ( { notify _volume : t } ) , e . $broadcast ( "settings_changed" ) , c . clear ( ) , a && n . cancel ( a ) , a = n ( function ( ) { c . testSound ( t ) } , 500 ) ) } ) , t . toggleDesktop = function ( ) { t . notify . desktop = ! t . notify . desktop , t . notify . desktop ? l . remove ( "notify_nodesktop" ) : l . set ( { notify _nodesktop : ! 0 } ) , e . $broadcast ( "settings_changed" ) } , t . togglePreview = function ( ) { t . notify . preview = ! t . notify . preview , t . notify . preview ? l . remove ( "notify_nopreview" ) : l . set ( { notify _nopreview : ! 0 } ) , e . $broadcast ( "settings_changed" ) }
mid : t . mid } , n ) , "replyKeyboardHide" != n . _ && ( n . fromID = t . from _id ) , e . reply _markup = n , ! 0 ) : ! 1 ; if ( t . pFlags . out ) if ( i ) { if ( i . pFlags . single _use && ! i . pFlags . hidden && ( t . mid > i . mid || t . mid < 0 ) && t . message ) return i . pFlags . hidden = ! 0 , ! 0 } else ( ! e . maxOutID || t . mid > e . maxOutID ) && ( e . maxOutID = t . mid ) ; return t . action && "messageActionChatDeleteUser" == t . action . _ && ( i ? t . action . user _id == i . fromID : r . isBot ( t . action . user _id ) ) ? ( e . reply _markup = { _ : "replyKeyboardHide" , mid : t . mid , flags : 0 , pFlags : { } } , ! 0 ) : ! 1 } function V ( t , n , i , a , o ) { var s = [ ] , d = ! n , u = { peer : t , filter : i } , p = d && angular . equals ( Fe , u ) ; if ( d && ! p && ( Fe = u , Re = [ ] ) , t && ! a && ! n ) { var m = Ce [ t ] ; if ( void 0 !== m && m . history . length ) { var g , h , _ = { } , v = o || 20 ; switch ( i . _ ) { case "inputMessagesFilterPhotos" : _ . messageMediaPhoto = ! 0 ; break ; case "inputMessagesFilterVideo" : _ . messageMediaVideo = ! 0 ; break ; case "inputMessagesFilterPhotoVideo" : _ . messageMediaPhoto = ! 0 , _ . messageMediaVideo = ! 0 ; break ; case "inputMessagesFilterDocument" : _ . messageMediaDocument = ! 0 ; break ; case "inputMessagesFilterAudio" : _ . messageMediaAudio = ! 0 } for ( g = 0 ; g < m . history . length && ( h = ke [ m . history [ g ] ] , ! ( h . media && _ [ h . media . _ ] && ( s . push ( h . mid ) , s . length >= v ) ) ) ; g ++ ) ; } if ( s . length < v && Re . length && p ) for ( var y = s . length ? s [ s . length - 1 ] : 4294967295 , g = 0 ; g < Re . length && ! ( Re [ g ] < y && ( s . push ( Re [ g ] ) , s . length >= v ) ) ; g ++ ) ; } if ( s . length || 1e3 == o ) return d && ( Re = listMergeSorted ( Re , s ) ) , e . when ( { count : null , history : s } ) ; var b ; if ( t || ! n ) { var w = 0 ; c . isChannel ( t ) && ! c . isMegagroup ( t ) && ( w |= 1 ) , b = f . invokeApi ( "messages.search" , { flags : w , peer : c . getInputPeerByID ( t ) , q : n || "" , filter : i || { _ : "inputMessagesFilterEmpty" } , min _date : 0 , max _date : 0 , limit : o || 20 , max _id : a || 0 } , { timeout : 300 , noErrorBox : ! 0 } ) } else { var k = 0 , $ = 0 , S = 0 , C = a && z ( a ) ; C && C . date && ( k = C . date + je , S = C . id , $ = se ( C ) ) , b = f . invokeApi ( "messages.searchGlobal" , { q : n , offset _date : k , offset _peer : c . getInputPeerByID ( $ ) , offset _id : R ( S ) , limit : o || 20 } , { timeout : 300 , noErrorBox : ! 0 } ) } return b . then ( function ( e ) { r . saveApiUsers ( e . users ) , l . saveApiChats ( e . chats ) , X ( e . messages ) ; var t = e . count || e . messages . length ; return s = [ ] , angular . forEach ( e . messages , function ( e ) { var t = se ( e ) ; if ( 0 > t ) { var n = l . getChat ( - t ) ; n . migrated _to && L ( t , - n . migrated _to . channel _id ) } s . push ( e . mid ) } ) , d && ( Re = listMergeSorted ( Re , s ) ) , { count : t , history : s } } , function ( t ) { return 400 == t . code && ( t . handled = ! 0 ) , e . reject ( t ) } ) } function z ( e ) { return ke [ e ] || { deleted : ! 0 } } function W ( t ) { var n = N ( t ) , i = [ ] ; return angular . forEach ( n . msgIDs , function ( e , t ) { var a ; if ( t > 0 ) { var o = l . getChat ( t ) ; if ( ! ( o . pFlags . creator || o . pFlags . editor && o . pFlags . megagroup ) ) { var r = [ ] ; if ( ( o . pFlags . editor || o . pFlags . megagroup ) && angular . forEach ( e , function ( e , i ) { var a = z ( n . mids [ t ] [ i ] ) ; a . pFlags . out && r . push ( e ) } ) , ! r . length ) return ; e = r } a = f . invokeApi ( "channels.deleteMessages" , { channel : l . getChannelInput ( t ) , id : e } ) . then ( function ( n ) { s . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateDeleteChannelMessages" , channel _id : t , messages : e , pts : n . pts , pts _count : n . pts _count } } ) } ) } else a = f . invokeApi ( "messages.deleteMessages" , { id : e } ) . then ( function ( t ) { s . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateDeleteMessages" , messages : e , pts : t . pts , pts _count : t . pts _count } } ) } ) ; i . push ( a ) } ) , e . all ( i ) } function G ( e ) { var n = c . isChannel ( e ) , i = Ce [ e ] , a = x ( e ) [ 0 ] ; if ( ! a || ! a . unread _count ) { if ( ! i || ! i . history . length ) return ! 1 ; var o , r , d = ! 1 ; for ( p = i . history . length ; p >= 0 ; p -- ) if ( o = i . history [ p ] , r = ke [ o ] , r && ! r . pFlags . out && r . pFlags . unread ) { d = ! 0 ; break } if ( ! d ) return ! 1 } if ( i . readPromise ) return i . readPromise ; var u ; if ( u = n ? f . invokeApi ( "channels.readHistory" , { channel : l . getChannelInput ( - e ) , max _id : 0 } ) : f . invokeApi ( "messages.readHistory" , { peer : c . getInputPeerByID ( e ) , max _id : 0 } ) . then ( function ( e ) { s . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updatePts" , pts : e . pts , pts _count : e . pts _count } } ) } ) , i . readPromise = u . then ( function ( ) { a && ( a . unread _count = 0 , t . $broadcast ( "dialog_unread" , { peerID : e , count : 0 } ) , t . $broadcast ( "messages_read" ) , i && i . history . length && ( a . read _inbox _max _id = i . history [ 0 ] ) ) } ) [ "finally" ] ( function ( ) { delete i . readPromise } ) , i && i . history . length ) { var o , r , p , e , a ; for ( p = 0 ; p < i . history . length ; p ++ ) o = i . history [ p ] , r = ke [ o ] , r && ! r . pFlags . out && ( r . pFlags . unread = ! 1 , $e [ o ] && ( $e [ o ] . pFlags . unread = ! 1 ) , Se [ o ] && ( Se [ o ] . pFlags . unread = ! 1 ) , y . cancel ( "msg" + o ) ) } return y . soundReset ( c . getPeerString ( e ) ) , i . readPromise } function K ( e ) { f . invokeApi ( " messages . readMessa
e . put ( "partials/desktop/changelog_modal.html" , '<div class="changelog_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 </div>\n <div class="md_modal_title" my-i18n="head_about"></div>\n </div>\n\n <div class="peer_modal_profile_wrap clearfix">\n <div class="peer_modal_photo_wrap pull-left">\n <div class="peer_modal_photo telegram_modal_logo"></div>\n </div>\n <div class="peer_modal_profile">\n <div class="peer_modal_profile_name">Telegram Web</div>\n <div class="peer_modal_profile_description">Version {{currentVersion}}</div>\n </div>\n </div>\n </div>\n\n <div class="md_modal_split_actions_wrap">\n <div class="md_modal_split_actions">\n <a href="https://twitter.com/telegram_web" target="_blank" class="md_modal_split_action">\n <i class="md_modal_split_action_twitter"></i>\n </a>\n </div>\n </div>\n\n <div class="md_modal_body">\n\n <div class="md_modal_sections">\n\n <div class="md_modal_versioned_section_wrap" ng-if="canShowVersion(\'0.5.2\')">\n <div class="md_modal_section_version">0.5.2</div>\n <div class="md_modal_section_description changelog_version_changes">\n <ul class="list-unstyled changelog_version_changes_list">\n <li>Unread counters for muted chats now colored in gray.</li>\n <li>Improved previews for sticker sets: Click on a sticker to view the whole set, click on stickers in a set to send right away, added a \'Share\' button.</li>\n <li>Improved performance.</li>\n </ul>\n </div>\n </div>\n\n <div class="md_modal_versioned_section_wrap" ng-if="canShowVersion(\'0.5.1\')">\n <div class="md_modal_section_version">0.5.1</div>\n <div class="md_modal_section_description changelog_version_changes">\n <ul class="list-unstyled changelog_version_changes_list">\n <li>Groups that have reached their capacity of 200 users can be upgraded to supergroups of up to 1,000 members.</li>\n <li>Check out the <a href="https://telegram.org/blog/supergroups" target="_blank">Telegram Blog</a> for more info</li>\n </ul>\n </div>\n </div>\n\n <div class="md_modal_versioned_section_wrap" ng-if="canShowVersion(\'0.5.0\')">\n <div class="md_modal_section_version">0.5.0</div>\n <div class="md_modal_section_description changelog_version_changes">\n <ul class="list-unstyled changelog_version_changes_list">\n <li>Removed annoying "multiple tabs open" error.</li>\n <li>Improved message forwarding.</li>\n <li>Added view counter to messages from channels.</li>\n <li>Improved image loading in Safari and Firefox.</li>\n </ul>\n </div>\n </div>\n\n <div class="md_modal_versioned_section_wrap" ng-if="canShowVersion(\'0.4.9\')">\n <div class="md_modal_section_version">0.4.9</div>\n <div class="md_modal_section_description changelog_version_changes">\n <ul class="list-unstyled changelog_version_changes_list">\n <li>New emoji and sticker menu, tabs for sticker packs.</li>\n </ul>\n </div>\n </div>\n\n <div class="md_modal_versioned_section_wrap" ng-if="canShowVersion(\'0.4.8\' ) ">\n <div class=" md _modal _section _version ">0.4.8</div>\n <div class=" md _modal _section _description changelog _version _changes ">\n <ul class=" list - unstyled changelog _version _changes _list ">\n <li>Introducing Channels – a great new way to broadcast your messages to unlimited audiences.</li>\n <li>Check out the <a href=" https : //telegram.org/blog/channels" target="_blank">Telegram Blog</a> for more info</li>\n <li>Improved performance in Safari on OS X El Capitan.</li>\n <li>Added formatting for fix
e . put ( "partials/desktop/composer_dropdown.html" , '<div ng-switch="type">\n\n <ul ng-switch-when="mentions" class="composer_dropdown">\n <li ng-repeat="user in mentionUsers">\n <a class="composer_mention_option" data-mention="{{user.username}}">\n <span class="composer_user_photo" my-peer-photolink="user.id" img-class="composer_user_photo"></span>\n <span class="composer_user_name" ng-bind-html="user.rFullName"></span>\n <span class="composer_user_mention" ng-bind="\'@\' + user.username"></span>\n </a>\n </li>\n </ul>\n\n <ul ng-switch-when="commands" class="composer_dropdown">\n <li ng-repeat="command in commands track by (command.botID + command.value)">\n <a class="composer_command_option" data-command="{{command.value}}">\n <span class="composer_user_photo" my-peer-photolink="command.botID" img-class="composer_user_photo"></span>\n <span class="composer_command_value" ng-bind="command.value"></span>\n <span class="composer_command_desc" ng-bind-html="command.rDescription"></span>\n </a>\n </li>\n </ul>\n\n <ul ng-switch-when="emoji" my-emoji-suggestions="emojiCodes" class="composer_dropdown"></ul>\n\n <div ng-switch-when="inline" my-inline-results="botResults"></div>\n\n</div>' ) , e . put ( "partials/desktop/confirm_modal.html" , ' < div class = "confirm_modal_wrap md_simple_modal_wrap" my - modal - position > \ n \ n < div class = "md_simple_modal_body" > \ n \ n < div class = "confirm_modal_description" ng - switch = "type" > \ n < span ng - switch - when = "LOGOUT" my - i18n = "confirm_modal_logout" > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " W E B O G R A M _ U P D A T E D _ R E L O A D " m y - i 1 8 n = " c o n f i r m _ m o d a l _ u p d a t e _ r e l o a d " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " H I S T O R Y _ F L U S H " m y - i 1 8 n = " c o n f i r m _ m o d a l _ h i s t o r y _ f l u s h " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " T E R M I N A T E _ S E S S I O N S " m y - i 1 8 n = " c o n f i r m _ m o d a l _ t e r m i n a t e _ s e s s i o n s " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " T E R M I N A T E _ S E S S I O N " m y - i 1 8 n = " c o n f i r m _ m o d a l _ t e r m i n a t e _ s e s s i o n " > < / s p a n > \ n \ n < s p a n n g - s w i t c h - w h e n = " F I L E S _ C L I P B O A R D _ P A S T E " > \ n < n g - p l u r a l i z e c o u n t = " f i l e s . l e n g t h " \ n w h e n = " c o n f i r m _ m o d a l _ c l i p b o a r d _ X _ f i l e s _ s e n d " > \ n < / n g - p l u r a l i z e > \ n < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " F I L E _ C L I P B O A R D _ P A S T E " m y - i 1 8 n = " c o n f i r m _ m o d a l _ c l i p b o a r d _ f i l e _ s e n d " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " M E S S A G E _ D E L E T E " m y - i 1 8 n = " c o n f i r m _ m o d a l _ m e s s a g e _ d e l e t e " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " M E S S A G E S _ D E L E T E " > \ n < n g - p l u r a l i z e c o u n t = " c o u n t " \ n w h e n = " c o n f i r m _ m o d a l _ X _ m e s s a g e s _ d e l e t e " > \ n < / n g - p l u r a l i z e > \ n < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " P H O T O _ D E L E T E " m y - i 1 8 n = " c o n f i r m _ m o d a l _ p h o t o _ d e l e t e " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " C O N T A C T S _ I M P O R T _ P E R F O R M " m y - i 1 8 n = " c o n f i r m _ m o d a l _ c o n t a c t s _ i m p o r t " > < / s p a n > \ n < d i v n g - s w i t c h - w h e n = " L O G I N _ P H O N E _ C O R R E C T " > \ n < m y - i 1 8 n m s g i d = " c o n f i r m _ m o d a l _ l o g i n _ p h o n e _ c o r r e c t " > < / m y - i 1 8 n > \ n < d i v c l a s s = " c o n f i r m _ p h o n e _ n u m b e r " > \ n < s p a n n g - b i n d = " c o u n t r y _ c o d e " > < / s p a n > < s p a n n g - b i n d = " p h o n e _ n u m b e r " > < / s p a n > \ n < / d i v > \ n < / d i v > \ n < m y - i 1 8 n > \ n < s p a n n g - s w i t c h - w h e n = " F O R W A R D _ P E E R " m y - i 1 8 n - f o r m a t = " c o n f i r m _ m o d a l _ f o r w a r d _ t o _ p e e r " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " S H A R E _ C O N T A C T _ P E E R " m y - i 1 8 n - f o r m a t = " c o n f i r m _ m o d a l _ s e n d _ t o _ p e e r " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " S H A R E _ U R L " m y - i 1 8 n - f o r m a t = " c o n f i r m _ m o d a l _ s e n d _ t o _ p e e r " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " E X T _ S H A R E _ P E E R " m y - i 1 8 n - f o r m a t = " c o n f i r m _ m o d a l _ s h a r e _ f i l e _ p e e r " > < / s p a n > \ n < s p a n n g - s w i t c h - w h e n = " I N V I T E _ T O _ G R O U P " m y - i 1 8 n - f o r m a t = " c o n f i r m _ m o d a l _ i n v i t e _ p e e r " > < / s p a n > \ n < m y - i 1 8 n - p a r a m n a m e = " p e e r " > \ n < s t r o n g m y - p e e r - l i n k = " p e e r _ i d " > < / s t r o n g > \ n < / m y - i 1 8 n - p a r a m > \ n < / m y - i 1 8 n > \ n < d i v n g - s w i t c h - w h e n = " A P P L Y _ L A N G _ W I T H _ R E L O A D " m y - i 1 8 n = " c o n f i r m _ m o d a l _ a p p l y _ l a n g _ w i t h _ r e l o a d _ m d " > < / d i v > \ n < d i v n g - s w i t c h - w h e n = " M I G R A T E _ T O _ H T T P S " m y - i 1 8 n = " c o n f i r m _ m o d a l _ m i g r a t e _ t o _ h t t p s _ m d " > < / d i v > \ n < d i v n g - s w i t c h - w h e n = " S W I T C H _ D E S K T O P _ V E R S I O N " m y - i 1 8 n = " c o n f i r m _ m o d a l _ r e s i z e _ d e s k t o p _ m d " > < / d i v > \ n < d i v n g - s w i t c h - w h e n = " S W I T C H _ M O B I L E _ V E R S I O N " m y - i 1 8 n = " c o n f i r m _ m o d a l _ r e s i z e _ m o b i l e _ m d " > < / d i v > \ n < d i v n g - s w i t
e . put ( "partials/desktop/forwarded_messages.html" , '<div class="im_message_reply clearfix" ng-class="{im_message_reply_thumbed: thumb !== false}">\n <div class="im_message_reply_border"></div>\n <div class="im_message_reply_thumb_wrap pull-left" ng-if="thumb !== false">\n <img\n class="im_message_reply_thumb"\n my-load-thumb\n thumb="thumb"\n watch="true"\n />\n </div>\n <div class="im_message_reply_author">\n <span my-peer-link="fromID" peer-watch="true"></span>\n </div>\n <div class="im_message_reply_body" ng-switch="singleMessage !== false">\n <div ng-switch-when="true">\n <span class="im_reply_message_media" ng-if="singleMessage.media" ng-switch="singleMessage.media._">\n <span ng-switch-when="messageMediaPhoto" my-i18n="conversation_media_photo"></span>\n <span ng-switch-when="messageMediaVideo" my-i18n="conversation_media_video"></span>\n <span ng-switch-when="messageMediaDocument" ng-switch="::singleMessage.media.document.sticker || false">\n <span ng-switch-when="1" my-i18n="conversation_media_sticker"></span>\n <span ng-switch-when="2">\n <span ng-bind-html="singleMessage.media.document.stickerEmoji"></span>\n (<my-i18n msgid="conversation_media_sticker"></my-i18n>)\n </span>\n <span ng-switch-default ng-bind="singleMessage.media.document.file_name"></span>\n </span>\n <span ng-switch-when="messageMediaAudio" my-i18n="conversation_media_audio"></span>\n <span ng-switch-when="messageMediaGeo" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaVenue" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaContact" my-i18n="conversation_media_contact"></span>\n </span>\n\n <span class="im_reply_message_service" ng-if="singleMessage._ == \'messageService\'" my-service-short-message="singleMessage"></span>\n\n <span class="im_reply_message_text" ng-if="singleMessage.message.length" ng-bind-html="singleMessage.richMessage"></span>\n </div>\n <div ng-switch-default>\n <span class="im_reply_message_service">\n <ng-pluralize count="count"\n when="im_X_forwarded_messages">\n </ng-pluralize>\n </span>\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/full_document.html" , '<div class="document_modal_image_wrap">\n <div class="img_fullsize_with_progress_wrap document_fullsize_with_progress_wrap" ng-style="{width: frameWidth + \'px\', height: frameHeight + \'px\'}">\n <div class="img_fullsize_progress_overlay">\n <div class="img_fullsize_progress_wrap" ng-style="{width: frameWidth + \'px\', height: frameHeight + \'px\'}">\n <div class="img_fullsize_progress progress tg_progress">\n <div class="progress-bar progress-bar-success" style="width: {{document.progress.percent}}%"></div>\n </div>\n </div>\n </div>\n <div class="img_fullsize_wrap" ng-if="thumbSrc.length > 0">\n <img\n class="img_fullsize"\n ng-src="{{thumbSrc}}"\n ng-style="{width: imageWidth + \'px\', height: imageHeight + \'px\'}"\n />\n </div>\n </div>\n <div class="document_fullsize_wrap" ng-click="toggleZoom(!zoomed)">\n <img class="document_fullsize_img" />\n </div>\n</div>' ) , e . put ( "partials/desktop/full_gif.html" , '<a class="img_gif_with_progress_wrap" ng-click="toggle($event)">\n\n <div class="img_gif_image_wrap">\n\n <div class="img_gif_meta" ng-show="!isActive" ng-switch="document.progress.enabled">\n <div ng-switch-when="true" class="img_gif_meta_contents">\n <i class="icon icon-cancel">\n <i class="icon icon-bar"></i>\n <i class="icon icon-bar"></i>\n </i>\n <div my-arc-progress="document.progress.percent"></div>\n </div>\n <div ng-switch-default class="img_gif_label noselect img_gif_meta_contents">GIF</div>\n </div>\n\n <div ng-if="document.url" ng-show="document.downloaded && isActive" ng-switch="document.mime_type == \' vide
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"></my-i18n><span my-loading-dots></span>\n </div>\n <div ng-switch-default class="login_head_submit_wrap">\n <a class="login_head_submit_btn" ng-if="!credentials.phone_code_hash" ng-click="sendCode()">\n <my-i18n msgid="modal_next"></my-i18n><i class="icon icon-next-submit"></i>\n </a>\n <a class="login_head_submit_btn" ng-if="credentials.phone_code_hash && !credentials.phone_code_valid" ng-click="logIn()">\n <my-i18n msgid="modal_next"></my-i18n><i class="icon icon-next-submit"></i>\n </a>\n <a class="login_head_submit_btn" ng-if="credentials.phone_code_valid && credentials.phone_unoccupied" ng-click="logIn(true)">\n <my-i18n msgid="modal_next"></my-i18n><i class="icon icon-next-submit"></i>\n </a>\n <a class="login_head_submit_btn" ng-if="credentials.phone_code_valid && credentials.password_needed" ng-click="checkPassword()">\n <my-i18n msgid="modal_next"></my-i18n><i class="icon icon-next-submit"></i>\n </a>\n </div>\n <a class="login_head_logo_link" href="https://telegram.org" target="_blank">\n <i class="icon icon-tg-logo"></i><i class="icon icon-tg-title"></i>\n </a>\n </div>\n\n <div class="login_form_wrap">\n <div class="error" ng-if="error.message" ng-bind="error.message"></div>\n\n <form name="mySendCodeForm" ng-if="!credentials.phone_code_hash" ng-submit="sendCode()">\n <h3 class="login_form_head" my-i18n="login_sign_in"></h3>\n <p class="login_form_lead" my-i18n="login_enter_number_description"></p>\n\n <div class="md-input-group md-input-has-value login_phone_country_input_group" ng-click="chooseCountry()">\n <label class="md-input-label" my-i18n="login_country_select_placeholder"></label>\n <div autocomplete="off" class="md-input"ng-bind="credentials.phone_country_name"></div>\n </div>\n\n <div class="login_phone_groups_wrap clearfix">\n\n <div class="md-input-group login_phone_code_input_group" ng-class="{\'md-input-error\': error.field == \'phone\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="login_code_input_placeholder"></label>\n <input autocomplete="off" class="md-input" my-focused name="phone_country" type="tel" ng-model="credentials.phone_country" />\n </div>\n\n <div class="md-input-group login_phone_num_input_group" ng-class="{\'md-input-error\': error.field == \'phone\'}" my-labeled-input ng-switch="error.field == \'phone\' ">\n <label ng-switch-when=" true " class=" md - input - label " my-i18n=" login _incorrect _number "></label>\n <label ng-switch-default class=" md - input - label " my-i18n=" login _tel _input _placeholder "></label>\n <input required autocomplete=" off " my-submit-on-enter class=" md - input " my-focus-on=" countr
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-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" 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 </button>\n\n </div>\n\n</div>' ) , e . put ( "partials/desktop/peer_select.html" , '<div class="peer_select_modal_wrap md_modal_wrap" my-modal-position>\n\n <div class="md_modal_head md_modal_head_simple">\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="$dismiss()" my-i18n="modal_close"></a>\n </div>\n </div>\n <div class="md_modal_title" my-i18n="conversations_modal_forward_title"></div>\n </div>\n\n <div class="md_modal_body">\n\n <div class="im_dialogs_modal_col_wrap" ng-controller="AppImDialogsController" my-dialogs ng-class="search.query.length > 0 ? \'im_dialogs_col_search\' : \'\' ">\n <div class=" im _dialogs _panel ">\n <div class=" im _dialogs _search ">\n <input my-focused class=" form - control im _dialogs _search _field no _outline " type=" search " placeh
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 , i ) { function a ( e ) { ConfigStorage . get ( "emojis_popular" , function ( t ) { var n = [ ] ; if ( t && t . length ) { for ( var i = 0 , a = t . length ; a > i ; i ++ ) n . push ( { code : t [ i ] [ 0 ] , rate : t [ i ] [ 1 ] } ) ; return void e ( n ) } ConfigStorage . get ( "emojis_recent" , function ( t ) { t = t || y || [ ] ; for ( var i , a , o = 0 , s = t . length ; s > o ; o ++ ) i = t [ o ] ,
this . scrollable . animate ( { scrollTop : e } , t , function ( ) { delete i . isAnimatedScroll , i . useNano && $ ( i . scroller ) . nanoScroller ( { flash : ! 0 } ) , i . scrollable . trigger ( "scroll" ) , n && n ( ) } ) } else this . scrollable [ 0 ] . scrollTop = e , this . useNano && $ ( this . scroller ) . nanoScroller ( { flash : ! 0 } ) , n && n ( ) } , Scroller . prototype . scrollToNode = function ( e ) { e = e [ 0 ] || e ; var t = e . offsetTop - 15 , n = e . offsetHeight + 30 , i = this . scrollable [ 0 ] . scrollTop , a = this . scrollable [ 0 ] . clientHeight ; i > t ? this . scrollTo ( t ) : t + n - a > i && this . scrollTo ( t + n - a ) } , angular . module ( "myApp.directives" , [ "myApp.filters" ] ) . constant ( "shouldFocusOnInteraction" , ! Config . Navigator . mobile ) . directive ( "myHead" , function ( ) { return { restrict : "AE" , templateUrl : templateUrl ( "head" ) } } ) . directive ( "myLangFooter" , function ( ) { return { restrict : "AE" , templateUrl : templateUrl ( "lang_footer" ) } } ) . directive ( "myFooter" , function ( ) { return { restrict : "AE" , templateUrl : templateUrl ( "footer" ) } } ) . directive ( "myDialog" , function ( ) { return { restrict : "AE" , templateUrl : templateUrl ( "dialog" ) } } ) . directive ( "myMessage" , [ "$filter" , "_" , function ( e , t ) { function n ( e , t , n ) { 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 = $ ( a ) , $ ( u [ 0 ] . firstChild ) . text ( i ( 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 , i ) { i == 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 i = e ( "myDate" ) , a = '<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 + " > < / d
c ( e ) } , function ( e ) { console . log ( "Download sticker failed" , e , u ) } ) } var a = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" ; return { link : i , scope : { document : "=" } } } ] ) . directive ( "myLoadDocument" , [ "MtpApiFileManager" , "AppDocsManager" , "FileManager" , function ( e , t , n ) { function i ( e , t ) { for ( ; e && ! $ ( e ) . hasClass ( "modal-dialog" ) ; ) e = e . parentNode ; e && $ ( e ) . width ( t + ( Config . Mobile ? 0 : 32 ) ) } function a ( a , o , s ) { var r = $ ( ".document_fullsize_with_progress_wrap" , o ) , l = $ ( ".document_fullsize_wrap" , o ) , c = $ ( ".document_fullsize_img" , o ) , d = $ ( window ) . width ( ) - ( Config . Mobile ? 20 : 32 ) , u = $ ( window ) . height ( ) - 150 ; d > 800 && ( d -= 208 ) , a . imageWidth = d , a . imageHeight = u ; var p = a . document . thumb ; if ( p && "photoSizeEmpty" != p . _ ) { var m = calcImageInBox ( p . width , p . height , d , u ) ; a . imageWidth = m . w , a . imageHeight = m . h ; var g = e . getCachedFile ( p . location ) ; g && ( a . thumbSrc = n . getUrl ( g , "image/jpeg" ) ) } a . frameWidth = Math . max ( a . imageWidth , Math . min ( 600 , d ) ) , a . frameHeight = a . imageHeight , onContentLoaded ( function ( ) { a . $emit ( "ui_height" ) } ) , i ( o [ 0 ] , a . frameWidth ) ; var h , f , _ ; t . downloadDoc ( a . document . id ) . then ( function ( e ) { var t = n . getUrl ( e , a . document . mime _type ) , i = new Image , o = 100 , s = function ( e ) { if ( i . height && i . width || ! -- o ) { f = i . width , _ = i . height , clearInterval ( h ) ; var n = calcImageInBox ( i . width , i . height , d , u , ! 0 ) , s = { w : f , h : _ } ; n . w >= s . w && n . h >= s . h && ( s . w *= 4 , s . h *= 4 ) ; var p = ! 0 ; a . toggleZoom = function ( ) { p = ! p ; var e = ( p ? s : n ) . w , t = ( p ? s : n ) . h ; c . css ( { width : e , height : t , marginTop : a . frameHeight > t ? Math . floor ( ( a . frameHeight - t ) / 2 ) : 0 } ) , l . toggleClass ( "document_fullsize_zoomed" , p ) } , a . toggleZoom ( ! 1 ) , c . attr ( "src" , t ) , r . hide ( ) , l . css ( { width : a . frameWidth , height : a . frameHeight } ) . show ( ) } } ; h = setInterval ( s , 20 ) , i . onload = s , i . src = t , setZeroTimeout ( s ) } ) } return { link : a , templateUrl : templateUrl ( "full_document" ) , scope : { document : "=myLoadDocument" } } } ] ) . directive ( "myGeoPointMap" , [ "ExternalResourcesManager" , function ( e ) { function t ( t , n , i ) { var a = 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=" + a + "x" + o + "&scale=2&key=" + s ; e . downloadByURL ( r ) . then ( function ( e ) { n . attr ( "src" , e . valueOf ( ) ) } ) } return { link : t , scope : { point : "=myGeoPointMap" } } } ] ) . directive ( "myLoadingDots" , [ "$interval" , function ( e ) { function t ( e , t , i ) { t . html ( n ( t [ 0 ] ) ? '<div class="loading_dots"><i></i><i></i><i></i></div>' : "..." ) } function n ( e ) { if ( void 0 === i && ( i = void 0 !== e . style . animationName , i === ! 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" ] ) { i = ! 0 ; break } } return i } return { link : t } ; var i } ] ) . directive ( "myFocused" , [ "shouldFocusOnInteraction" , function ( e ) { return { link : function ( t , n , i ) { return e ? void setTimeout ( function ( ) { setFieldSelection ( n [ 0 ] ) } , 100 ) : ! 1 } } } ] ) . directive ( "myFocusOn" , [ "shouldFocusOnInteraction" , function ( e ) { return { link : function ( t , n , i ) { t . $on ( i . 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 i = function ( t ) { var i = t . target ; if ( ! i || "INPUT" != i . tagName && "TEXTAREA" != i . 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" , i ) , e . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "keydown" , i ) } ) } 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 i = $ ( ".nano-content" , t ) [ 0 ] , a = ! 1 ; $ ( i ) . on ( "scroll" , function ( n ) { t . is ( ":visible" ) && ! a && i . scrollTop >= i . scrollHeight - i . clientHeight - 300 && ( a = ! 0 , e . $apply ( function ( ) { e . slic