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