dddddddd                                                                                
FFFFFFFFFFFFFFFFFFFFFF                                                            d::::::d                                                                                
F::::::::::::::::::::F                                                            d::::::d                                                                                
F::::::::::::::::::::F                                                            d::::::d                                                                                
FF::::::FFFFFFFFF::::F                                                            d:::::d                                                                                 
  F:::::F       FFFFFFooooooooooo   uuuuuu    uuuuuunnnn  nnnnnnnn        ddddddddd:::::d     eeeeeeeeeeee  vvvvvvv           vvvvvvv eeeeeeeeeeee    rrrrr   rrrrrrrrr   
  F:::::F           oo:::::::::::oo u::::u    u::::un:::nn::::::::nn    dd::::::::::::::d   ee::::::::::::ee v:::::v         v:::::vee::::::::::::ee  r::::rrr:::::::::r  
  F::::::FFFFFFFFFFo:::::::::::::::ou::::u    u::::un::::::::::::::nn  d::::::::::::::::d  e::::::eeeee:::::eev:::::v       v:::::ve::::::eeeee:::::eer:::::::::::::::::r 
  F:::::::::::::::Fo:::::ooooo:::::ou::::u    u::::unn:::::::::::::::nd:::::::ddddd:::::d e::::::e     e:::::e v:::::v     v:::::ve::::::e     e:::::err::::::rrrrr::::::r
  F:::::::::::::::Fo::::o     o::::ou::::u    u::::u  n:::::nnnn:::::nd::::::d    d:::::d e:::::::eeeee::::::e  v:::::v   v:::::v e:::::::eeeee::::::e r:::::r     r:::::r
  F::::::FFFFFFFFFFo::::o     o::::ou::::u    u::::u  n::::n    n::::nd:::::d     d:::::d e:::::::::::::::::e    v:::::v v:::::v  e:::::::::::::::::e  r:::::r     rrrrrrr
  F:::::F          o::::o     o::::ou::::u    u::::u  n::::n    n::::nd:::::d     d:::::d e::::::eeeeeeeeeee      v:::::v:::::v   e::::::eeeeeeeeeee   r:::::r            
  F:::::F          o::::o     o::::ou:::::uuuu:::::u  n::::n    n::::nd:::::d     d:::::d e:::::::e                v:::::::::v    e:::::::e            r:::::r            
FF:::::::FF        o:::::ooooo:::::ou:::::::::::::::uun::::n    n::::nd::::::ddddd::::::dde::::::::e                v:::::::v     e::::::::e           r:::::r            
F::::::::FF        o:::::::::::::::o u:::::::::::::::un::::n    n::::n d:::::::::::::::::d e::::::::eeeeeeee         v:::::v       e::::::::eeeeeeee   r:::::r            
F::::::::FF         oo:::::::::::oo   uu::::::::uu:::un::::n    n::::n  d:::::::::ddd::::d  ee:::::::::::::e          v:::v         ee:::::::::::::e   r:::::r            
FFFFFFFFFFF           ooooooooooo       uuuuuuuu  uuuunnnnnn    nnnnnn   ddddddddd   ddddd    eeeeeeeeeeeeee           vvv            eeeeeeeeeeeeee   rrrrrrr