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