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