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