888       888          888
888   o   888          888
888  d8b  888          888
888 d888b 888  .d88b.  888  .d8888b .d88b.  88888b.d88b.   .d88b.
888d88888b888 d8P  Y8b 888 d88P"   d88""88b 888 "888 "88b d8P  Y8b
88888P Y88888 88888888 888 888     888  888 888  888  888 88888888
8888P   Y8888 Y8b.     888 Y88b.   Y88..88P 888  888  888 Y8b.
888P     Y888  "Y8888  888  "Y8888P "Y88P"  888  888  888  "Y8888

  888                      d8888
  888                     d88888
  888                    d88P888
  888888 .d88b.         d88P 888 888d888 88888b.d88b.  888  888
  888   d88""88b       d88P  888 888P"   888 "888 "88b 888  888
  888   888  888      d88P   888 888     888  888  888 888  888
  Y88b. Y88..88P     d8888888888 888     888  888  888 Y88b 888
   "Y888 "Y88P"     d88P     888 888     888  888  888  "Y88888
                                                            888
 .d88888b.   .d888     .d8888b.                  888   Y8b d88P
d88P" "Y88b d88P"     d88P  Y88b                 888    "Y88P"
888     888 888       888    888                 888
888     888 888888    888        888d888 8888b.  88888b.  .d8888b
888     888 888       888        888P"      "88b 888 "88b 88K
888     888 888       888    888 888    .d888888 888  888 "Y8888b.
Y88b. .d88P 888       Y88b  d88P 888    888  888 888 d88P      X88
 "Y88888P"  888        "Y8888P"  888    "Y888888 88888P"   88888P'