# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <atomic> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <deque> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <functional> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <sstream> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <string> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <string_view> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <vector> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "cereal/messaging/messaging.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  CameraType  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  RoadCam  =  0 , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  DriverCam , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  WideRoadCam 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  class  ReplyMsgType  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Info , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Debug , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Warning , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Critical 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  std : : function < void ( ReplyMsgType  type ,  const  std : : string  msg ) >  ReplayMessageHandler ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  installMessageHandler ( ReplayMessageHandler ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  logMessage ( ReplyMsgType  type ,  const  char *  fmt ,  . . . ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define rInfo(fmt, ...) ::logMessage(ReplyMsgType::Info, fmt,  ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define rDebug(fmt, ...) ::logMessage(ReplyMsgType::Debug, fmt,  ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define rWarning(fmt, ...) ::logMessage(ReplyMsgType::Warning, fmt,  ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define rError(fmt, ...) ::logMessage(ReplyMsgType::Critical , fmt,  ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  MonotonicBuffer  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  MonotonicBuffer ( size_t  initial_size )  :  next_buffer_size ( initial_size )  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ~ MonotonicBuffer ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  * allocate ( size_t  bytes ,  size_t  alignment  =  16ul ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  deallocate ( void  * p )  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  * current_buf  =  nullptr ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  size_t  next_buffer_size  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  size_t  available  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : deque < void  * >  buffers ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  constexpr  float  growth_factor  =  1.5 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  sha256 ( const  std : : string  & str ) ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  precise_nano_sleep ( int64_t  nanoseconds ,  std : : atomic < bool >  & interrupt_requested ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  decompressBZ2 ( const  std : : string  & in ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  decompressBZ2 ( const  std : : byte  * in ,  size_t  in_size ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								std : : string  decompressZST ( const  std : : string  & in ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  decompressZST ( const  std : : byte  * in ,  size_t  in_size ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  getUrlWithoutQuery ( const  std : : string  & url ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								size_t  getRemoteFileSize ( const  std : : string  & url ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  httpGet ( const  std : : string  & url ,  size_t  chunk_size  =  0 ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  std : : function < void ( uint64_t  cur ,  uint64_t  total ,  bool  success ) >  DownloadProgressHandler ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  installDownloadProgressHandler ( DownloadProgressHandler ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  httpDownload ( const  std : : string  & url ,  const  std : : string  & file ,  size_t  chunk_size  =  0 ,  std : : atomic < bool >  * abort  =  nullptr ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  formattedDataSize ( size_t  size ) ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								std : : string  extractFileName ( const  std : : string &  file ) ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								std : : vector < std : : string >  split ( std : : string_view  source ,  char  delimiter ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template  < typename  Iterable > 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								std : : string  join ( const  Iterable &  elements ,  const  std : : string &  separator )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : ostringstream  oss ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  ( auto  it  =  elements . begin ( ) ;  it  ! =  elements . end ( ) ;  + + it )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( it  ! =  elements . begin ( ) )  oss  < <  separator ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    oss  < <  * it ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  oss . str ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}