@ -74,10 +74,10 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    OutgoingMessageError . prototype  =  new  ReplayableError ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    OutgoingMessageError . prototype . constructor  =  OutgoingMessageError ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    function  SendMessageNetworkError ( number ,  jsonData ,  legacy,   httpError)  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    function  SendMessageNetworkError ( number ,  jsonData ,   httpError)  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ReplayableError . call ( this ,  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            functionCode  :  Type . TRANSMIT _MESSAGE , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            args          :  [ number ,  jsonData , legacy  ]
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            args          :  [ number ,  jsonData  ]
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        this . name  =  'SendMessageNetworkError' ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        this . number  =  number ; 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -38954,15 +38954,7 @@ var TextSecureServer = (function() {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                return  res ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        sendMessages :  function ( destination ,  messageArray ,  legacy )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            //TODO: Do this conversion somewhere else?
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            for  ( var  i  =  0 ;  i  <  messageArray . length ;  i ++ )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                messageArray [ i ] . content  =  btoa ( messageArray [ i ] . content ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                if  ( legacy )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    messageArray [ i ] . body  =  messageArray [ i ] . content ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    delete  messageArray [ i ] . content ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        sendMessages :  function ( destination ,  messageArray )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            var  jsonData  =  {  messages :  messageArray  } ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            jsonData . timestamp  =  messageArray [ 0 ] . timestamp ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -39627,8 +39619,9 @@ function MessageSender(url, username, password) {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				MessageSender . prototype  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    constructor :  MessageSender , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        // message == DataMessage or ContentMessage proto
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    sendMessageToDevices :  function ( timestamp ,  number ,  deviceObjectList ,  message )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    // message == DataMessage or ContentMessage proto
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    encryptToDevices :  function ( timestamp ,  number ,  deviceObjectList ,  message )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        var  legacy  =  ( message  instanceof  textsecure . protobuf . DataMessage ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        var  relay  =  deviceObjectList [ 0 ] . relay ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  ( var  i = 1 ;  i  <  deviceObjectList . length ;  ++ i )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            if  ( deviceObjectList [ i ] . relay  !==  relay )  { 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -39643,7 +39636,6 @@ MessageSender.prototype = {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            type :  encryptedMsg . type , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            destinationDeviceId :  textsecure . utils . unencodeNumber ( device . encodedNumber ) [ 1 ] , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            destinationRegistrationId :  registrationId , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            content :  encryptedMsg . body , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            timestamp :  timestamp 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        } ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -39651,20 +39643,26 @@ MessageSender.prototype = {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            json . relay  =  device . relay ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        var  content  =  btoa ( encryptedMsg . body ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        if  ( legacy )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            json . body  =  content ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        }  else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            json . content  =  content ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        return  json ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } ) ) . then ( function ( jsonData )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            var  legacy  =  ( message  instanceof  textsecure . protobuf . DataMessage ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return  this . sendMessageRequest ( number ,  jsonData ,  legacy ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } . bind ( this ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    sendMessageRequest :  function ( number ,  jsonData ,  legacy )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        return  this . server . sendMessages ( number ,  jsonData , legacy  ). catch ( function ( e )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    transmitMessage :  function ( number ,  jsonData )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        return  this . server . sendMessages ( number ,  jsonData  ). catch ( function ( e )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            if  ( e . name  ===  'HTTPError'  &&  ( e . code  !==  409  &&  e . code  !==  410 ) )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                throw  new  textsecure . SendMessageNetworkError ( number ,  jsonData ,  legacy ,  e ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                // 409 and 410 should bubble and be handled by doSendMessage
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                // all other network errors can be retried later.
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                throw  new  textsecure . SendMessageNetworkError ( number ,  jsonData ,  e ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            throw  e ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } ) ; 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -39759,10 +39757,12 @@ MessageSender.prototype = {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } . bind ( this ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        var  doSendMessage  =  function ( number ,  devicesForNumber ,  recurse )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return  this . sendMessageToDevices ( timestamp ,  number ,  devicesForNumber ,  message ) . then ( function ( result )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                successfulNumbers [ successfulNumbers . length ]  =  number ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                numberCompleted ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } ) . catch ( function ( error )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return  this . encryptToDevices ( timestamp ,  number ,  devicesForNumber ,  message ) . then ( function ( jsonData )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                return  this . transmitMessage ( number ,  jsonData ) . then ( function ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    successfulNumbers [ successfulNumbers . length ]  =  number ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    numberCompleted ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                } . bind ( this ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } . bind ( this ) ) . catch ( function ( error )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                if  ( error  instanceof  Error  &&  error . name  ==  "HTTPError"  &&  ( error . code  ==  410  ||  error . code  ==  409 ) )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    if  ( ! recurse ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                        return  registerError ( number ,  "Hit retry limit attempting to reload device list" ,  error ) ; 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -40047,7 +40047,7 @@ window.textsecure = window.textsecure || {};
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				textsecure . MessageSender  =  function ( url ,  username ,  password )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    var  sender  =  new  MessageSender ( url ,  username ,  password ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    textsecure . replay . registerFunction ( sender . tryMessageAgain . bind ( sender ) ,  textsecure . replay . Type . ENCRYPT _MESSAGE ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    textsecure . replay . registerFunction ( sender . sendMessageRequest . bind ( sender ) ,  textsecure . replay . Type . TRANSMIT _MESSAGE ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    textsecure . replay . registerFunction ( sender . transmitMessage . bind ( sender ) ,  textsecure . replay . Type . TRANSMIT _MESSAGE ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    this . sendRequestGroupSyncMessage    =  sender . sendRequestGroupSyncMessage   . bind ( sender ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    this . sendRequestContactSyncMessage  =  sender . sendRequestContactSyncMessage . bind ( sender ) ;