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