.d8888b.  .d8888b.  .d8888b.  .d8888888b.  
                             d88P  Y88bd88P  Y88bd88P  Y88bd88P"   "Y88b 
                                    888     .d88P       888888  d8b  888 
.d8888b 88888b.d88b.  8888b.      .d88P    8888"      .d88P888  8^8  888 
88K     888 "888 "88b    "88b .od888P"      "Y8b. .od888P" 888  8,8bd88P 
"Y8888b.888  888  888.d888888d88P"     888    888d88P"     888  Y8888P"  
     X88888  888  888888  888888"      Y88b  d88P888"      Y88b.     .d8 
 88888P'888  888  888"Y888888888888888  "Y8888P" 888888888  "Y88888888P" 
                                                                         
                                                                         
                                                                         
                             d8b888                                 
                             Y8P888                                 
                                888                                 
 .d88b. 88888b.d88b.  8888b. 888888    .d8888b .d88b. 88888b.d88b.  
d88P"88b888 "888 "88b    "88b888888   d88P"   d88""88b888 "888 "88b 
888  888888  888  888.d888888888888   888     888  888888  888  888 
Y88b 888888  888  888888  888888888d8bY88b.   Y88..88P888  888  888 
 "Y88888888  888  888"Y888888888888Y8P "Y8888P "Y88P" 888  888  888 
     888                                                            
Y8b d88P                                                            
 "Y88P"