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