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