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