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

 ================================================================