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