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