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