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