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