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