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