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