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