###    ###                                                
  ### ##            ##     ##             ###    ####   ####   #####   ##### 
  ##  #    ###     ##     ##    ###        ##   ##  #  ##  #    ##      ##   
  #####   ## ##    ##     ##   ## ##      # #   ####  ##        ##      ##   
 ##  #   ######   ##     ##   ##  ##     ## #     ### ##       ##      ##    
 ## ##   ##       ##     ##   ## ##     ## ##  ##  #  ## ##    ##      ##    
### ##    ####  #####  #####   ###     ###  ## ####    ###   #####   #####