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