d8888               888                  .d8888b.       8888888888P                           
      d88888               888                 d88P  Y88b            d88P                            
     d88P888               888                 Y88b.                d88P                             
    d88P 888 88888b.   .d88888  .d88b.  888d888 "Y888b.            d88P    .d88b.  88888b.   .d88b.  
   d88P  888 888 "88b d88" 888 d8P  Y8b 888P"      "Y88b.         d88P    d88""88b 888 "88b d8P  Y8b 
  d88P   888 888  888 888  888 88888888 888          "888        d88P     888  888 888  888 88888888 
 d8888888888 888  888 Y88b 888 Y8b.     888    Y88b  d88P       d88P      Y88..88P 888  888 Y8b.     
d88P     888 888  888  "Y88888  "Y8888  888     "Y8888P"       d8888888888 "Y88P"  888  888  "Y8888