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