text: /**
   * Repositório do projeto:
   * https://github.com/axell-brendow/ComputerScience/tree/master/Grafos/TrabalhoPratico
   */
  
  // Arquivo para variáveis globais e funções globais
  
  // Relacionadas aos algoritmos dos grafos
  let numeroDeVertices = 0;
  let dictSiglas = {};
  
  /**
   * @type {Vertice[]}
   */
  let vertices = [];
  
  /**
   * @type {Aresta[][]}
   */
  let arestas = [];
  
  /**
   * @type {Aresta[][]}
   */
  let grafoDistancias = [];
  
  /**
   * @type {Aresta[][]}
   */
  let grafoPrecos = [];
  
  // Relacionadas a elementos HTML importantes
  let body;
  let inputAeroportos;
  let inputPrecos;
  let img;
  let canvas;
  let largura; // Largura do mapa. Que será igual à largura do canvas.
  let altura; // Altura do mapa. Que será igual à altura do canvas.
  
  // Relacionadas à renderização dos grafos
  let lastRender = 0;
  let context;
  let imgStyle;
  
  /**
   * Clona um objeto com campos primitivos e/ou com objetos que tenham campos
   * primitivos.
   *
   * @param {object} objeto Objeto a ser clonado.
   */
  function clonar(objeto) {
      return JSON.parse(JSON.stringify(objeto));
  }
  
  /**
   * Obtém uma função como parâmetro que deve retornar uma Promise e retorna uma nova
   * função que executa a recebida medindo o tempo de execução dela.
   *
   * @param {(...args) => Promise<any>} target Função que você deseja medir o tempo toda
   * vez que executar.
   * @param {(value: any) => void} callback Função que deve ser chamada quando a função
   * recebida como parâmetro terminar. O valor da Promise é passado para a função de
   * callback.
   */
  function medirTempo(target, callback) {
      let retValue = null;
  
      // Retorna uma função que pode receber uma quantidade variável de parâmetros
      return async (...args) => {
          console.time(target.name);
  
          try {
              retValue = await target(...args);
          } catch (value) {
              retValue = value;
          } finally {
              console.timeEnd(target.name);
              callback(retValue);
          }
      };
  }
  
  /* MAPA MUNDI
  +.........................................-....................................................................................-..........................................................-....................................................................................................................................................................................................................+
  /                                                                                                                                                                                                                                                                                                                                                                                                              /
  /                                                                                                                                                                                                                                                                                                                                                                                                              /
  /                                                                                                                      ` `` `                                                                                                                                                     o`oo:so/+`                                                                                                                   /
  /                                                                                                         ``        +/:y:soo+-       ` `` `                                                                                                                         /.:+-+/:/`    y`/ysos..`.----::::-.`                                                                                                       /
  /                                                                                                     `-:::--::--..`+/-oooo:      //-oosoo+-      .-`:..-                                                           `  ` `           .``-`.`         -ssoo++:      `h--yooy:.   ``--///+/:--.``     ``.-::-.                                                                                                   /
  /                                                                                                `.-::-``      ```.-:/+:-::-...```//.y+ss:`      `shd+y/:         -s-ss++-        .o+oo/+-          :o++/           +s+oo+/         :h+y+s/-         `oyyoo``     ``:./+/++:-::---..```.---`             ``-::-.`                                                                                              /
  /                                                                                            `.-:-.`             `---.`  ````..---:/+/:::----...``-+-++`          +yyss:`         `oyso+.`          +os.`          `/yooo`          -oo+o:````````...-:::+::::::-::--..`.-:-`           ```-:--..`            `.-::-`                                                                                          /
  /                                                                                        `--:-``             `.--.`             `--.`````````..-::/so//////::::/::://::-:-------:::/://--------------//-------------::-+:----::-:::::/::++::-----.....```.::+++o/:/++:.` `..--.`       .+oooo/o+o+-..`           `-/++:-.                                                                                      /
  /                                                                                    `-::-``              .--.`           ` .+/yho./ss. -oo-/+os+hhyoooo+::+yhyyoo+/+-:::::::::::/::ohhhys/////:``````/.`````::-:::::://:`               -:`   ``.`        `:/--:::::..-:-:o+--/+:..:--:/-.--/h:..-`.--:----------/- ```-::-`                                                                                  /
  /                                                                                `.-:o-`    `...-:------:-.`           .-::/oh/:++/+so-:soyyyysyhyhds/---`.sy+//--``  ` `            ``..-y/...`      :`    `+osy+::syo.:.                .++/++//.       `--o/.```      .+-`..``...`  `----..`                           ``-/+-`                                                                              /
  /                                                                             .:oo..-o: -.`+.````     `.-.//-..://---.`:++yds/--:++/:+s+sooohyyho/sdy:      ````://                 `-..-++`          :.      `..``     `/`              :ho+/.    `:-://+ssos.                                                              `.::::.`                                                                          /
  /                                                                         `-:/::o+/:-/o/:/-/.          `.--.`.-+::-:::-///o+/:.---++://++o::o/o/-:/:-/---`    .:..s/.              -+ss+.    `    .`  :.     .:     ``.-.:+-.`          `:/++/:.`..:o:-/s/+/--`        `                                                ` -:`    -/.-:-.                                                                       /
  /                                                                     `.-:-.+s/soo+:-:++.           `.:-`       //-:+- `:::+y/::+///ho+-/y+-/:o:.-++-  `/+   -:` `:s-           ```odydh/::.:y/:`-hs/:y//::``ys-//+shhysso+y/:----.` :/-/o:::::++.`.-/.`/oo-+/                                                         `+-/-/` :/+o.--:::-.`                                                                   /
  /                                                                  `.:/:-...ossss:..```  `.      `.--`          -/:--`     `-`   ``.-`.::+s+:/-.-+/oy---:+:`::` -s-.       ``.-:-//+s+hs+osyyyso./+:ssdyso:`//os/hyysooyh: :/`++::/++/s/:.   `         `:-.                                                         ``.-+/--/:`+s:``     `.::.`                                                                /
  /                                                               `-::.`  ````.o:o+    `-/+oo-` `-:-`              `:-.--`          :///:yo+oo. :+++..:.++o--:.`  +o.     ----.--`.+``:ys+/:-/+`.``.` ../:.``.``-+/+-` `:/+/  ./--//yo:`.                                                                           -:-.:::.   ::.-::.`       `.---`                                                             /
  /                                                            `-:-.`           :oo+-::/y/:-.--:+/:.             `////::.        `.-/s/``.+o//:--:./--oo/. .:`    /o.   -:.      `--  `//-----`         :.   `-::-/- `:::+:`   .o-`s+`                                                                              -:    `--.  .:-``./-``:.     `.-:-`                                                          /
  /                                                         `-::.`       ```-:/+/+yo++:.`      .yoy+              `-//:``      .:/-:/-.`....++.``./:..-.``-:```   ./:-.::`       `/`                    -.  .y:`  /- `+-.+-..--oh++/+.                                                                              -/..   ``.--` .::-./:```        `.::-`                                                       /
  /                                                      `.::.`    `.` :////::.` `--.`        `oyoo`              `--..+s`     +..:-```````//`   `o/:///-/:..--...--://:..-------+:.................---.//---y.`-o+`  .+:-+syo+o---`                                                                          `     `:++::-/o- `.-.``.-:/+`            `.::.`                                                    /
  /                                                    .::.`     .::/. ``      `--.          `-ss+-                   .+.`     :-/-     .`.+      ...`:::-                      ./                .o/oo.--   --++++- `os/ /so::+..`                            `.::.`  ..                                   :/---.`     ` `-+y+:.`.--`  `:.               `.:-.                                                  /
  /                                                 `-:-`                    .--`           -o:+:`                   .--+/       `---. .//-.          -o:                       :.               `./s:+-:-     /+sss::+:..so/-+/.-/-`                       .---.```.----:.`                 ``              -/ `.-:-.       ./+++.``--.                     `-:-`                                               /
  /                                              `.::.                    `.-.`             :-/+`                   -oso:          `/.::.             `oo.                     ./              `//soo+:-s:   ..:o++://:--:/::+-````/+`               ```   .+.            .:..`.``     `..``./--:-`...`` `.---o-    `----.`  ``-/+/+. `.-.`                     .::.                                             /
  /                                            `-:-`                    `--.                :so:                    /:s.           //-:`              `-/:                     /.              -s-:/-o. -:/`/:/o`   `o-`     +/---:/:-:--..``      .:--:-...:/              `.-----..`-:...-:/.  .-....---.``-+...`     `.---::``/-:o/-  .:-.                     `-:-`                                          /
  /                                          .::.                     `--`                  /so+-------.-..........```.            `.`       `..-:..::+yo`                    `/               .+-.-os--:++-//s/   `:/::::.``:/         `.--+`    -/.   ``...`                    `..+/:-.`                   `---/-          ./``/. -o/`  -y:`                      .::.                                        /
  /                                       `.:-`                     `--`                   -/s:`     `````````........--::/::.            `-++//:o-/o/-::+                    :-                   :::-//-`  `./+` `-+:-/+//+y/..::-`      :+`    .:-`          `                  /::  `.::`                 `.-:.            +- `+` `/+:-/s.--`                      `-:.                                      /
  /                                     `-:-://+:/.               `--`                   `-: `                        `/so+:/o`          :yo-:y:.`-:+:/:/+                   `/                     ./:.      `++-+++/--s/:-:/--..//+:-`.--oo`      .//-::`   .++.                `+/      .----.`            -+.              .o--+.   /::/o` `--`                      `:/-`                                   /
  /                                   `::. :hhy+o.`             `--`                   `--.                            .-:/os+::   ``-.---:sy++oso/   ``..                   --                       `/.     -s+:-.-/y+++o:/:`   `oy:-o/+++/`      ::``+/`  `o:/o/..-`     `..```.+.          `.:-..`.``  ```-/`              :o+..    `+so-    .:-``````````.....-----....::-`                                 /
  /                                 `:+:.```.--/.              .-.                    .:.                              /:/:os+:/://-.`.--:-o+/:--:                           /`                 `.`````+.    ``-+::`.++/+/:/`.+/--:+h.  :-.`.:+/:--.-/` :-.-.`///o.```/-``./::---.-/+              `....-----.`           ./` :/-/-`````..-o+::----://---.....````            -/-`                               /
  /                               `::.``````......----.-.---.:/:...`````````` ``    `:.                               ./:..sh+o/.`   `/-`  ``  `/`                          ./                 `o/:-...-----+----+o/-`/::+/o+:o/...o/: ``...```-/:::/s+-``+++--:..--.` ---.-++/.`--/`                                     ++/::/--o:...`````://-     .:`                        -:.                              /
  /                             `-:.                       .:-````.`........-.--.---/`                                   `:-.`   `-.::-`    ```:.                           :.                  o::/     `-::` ``os`.::/://:+o//++yooy:-..`.---::.-++o-./:./+`      .:-`` `/-/:-+.                                       .o/-:-.::+/::`    `s+`::     `--`                        ./.                            /
  /                            -/.                        -:`                      /`                                          `-::::-.......-//...........--------......-/:o--...........-..--:+.+`    -+:/+/--:o+:...:++o:/o.ss/+o.`             `+++/s:``-/`--.`   `.:-`/.-+``+.                                        `..-/   -/./-  ..+.`/y/`     `:.                         -/.                          /
  /                          ./-                        `:.                       -/                                         .+/.            `/`                         `-./::-.              ::`+`   -/:```   ``.` :/:o+`  .o+hs./-`  `   ` .``--:/o- .::.`-+:``-:-.` .+:/:/-:+//:-.`                                       /-`   -/-+.`o/++o+-`        -:`                        `::`                        /
  /                        `/:                         --`                        /-                                        .o`              /.                            /.  :`              `:-/:--::-/-------/+:/`.::     `/+.``:s//:-://o/.-`:/  -/`  .-.`      .+//.     `+` -/o+:.                                      ./.    `  .dyoo-`           `:.                         `/-                       /
  /                       :/`                        `:.                          /-`                                      `//              -:                             +                     `-:--/+.`       ::`+           .+/+.`.: -++:s:  ./:   /-             :-       :/` /:`  -:`                                      -:`     .:oo-               --                     `    -/`                     /
  /                     ./.                         .:`                           ://.`                                `.::-`              `/`                            .:            `       -:.   `/`       .+`./-```      .`     `/    -ss.:o/`   `::`           `+`      /.   .+`  :-                                       `::      `-.                ./`              `          `/:                    /
  /                    :/`                         :-                           `:.-//+/-...--.                      `::.`                 :-                             :-           /+      /-    .-:`        `/.:/-.-/`  -/.-::/-../---.+y::+:--:-   `/.           ./`   -:-`    /`   -::-.`            `                      `::                  -sos:-soo+yo.-h/`ho:s-soy/          -/`                  /
  /                  `/.                          :.                           `:. /+:+.``.```/.             ```..   /.                   `/`                             /`                  ./   `::`           .o/    `--:/.    +-`...`./-o+.+`   .:/``os-:`         //---/.     `+`     .+--::`       ./-/:.                    `+         `        ss-yoyo--hd+-ddh:domooy:y+           `+-                 /
  /                 -/`                         `:`                            :.  //:+`      -///`   ./:--:oo..`-:/-/                    :-                             `/           `   -- ./..::-`              ::              +.      +ooy-`      `.--/-./`        `::.      `-:`       `-:-:+/::o+:+/  .+./`                  ./                   -/- `::.-++-.`.`. .` .-.              /:                /
  /                /: +s:`---``.      `.    .. .:`                            :.  :+-/./         -/.:-.`   `/     -/-/                   `/                              .:          `++++o:+:./-                  ::              -:      `/+::            -:.-/-..::    `+-     /-              `.--:o/.  `+` ./                  `+``:`                         --             `` `` `.` .. .+/               /
  /              `+-  ++ssyhysyy/oo:`/yys: o/./d+/::::---                    :.    ::+`o`        `++.      /`     .::-:+/                --                              :.              `/-.--s::`                /-              `+        /--/`           `ss-``-++:--:+:....`  ./-                :+`-/../  `+`                 .o://:        `  `` .` `. `-``-`-/. .- `-``.` .. ``  `       ./`             /
  /             `+... -:`./+o::-++/.-/+++.`+++yso/yo/yoo`                   :-     .o/ /-         ::      --      `/-`///`               /`                              /`              /. /-`` `o+-`             `/-.             +`        -:./.           ./o-.:.o:.`:.``` `-//:-.                 -/ -::+`  -:/. .--/--     `-:+--o+o`-. .. `. `.` .` ``        -:                           ./`            /
  /            .+`               ` ``  `  ```/. `.``-.`-. .- `-` .` .. .-``:: .. .-.+s``+`       .o` `` `./`.  ````` `o:s:  `` ``  `  ``./` ``  `` `` `` ``  `` `` ``  ``/.` `` `.  .` -/. `+    `+ `--.            `:+---::.       :-         :+.+/            -:-./:`.-o/ `. `-`./+`                 `+oo:+o`    -//s+`` -+:-.:/.    :--                            --           `````.......-.--:o`           /
  /           .+`                -/::`     `:`                            ./      ` `:  ::       /-  `` `/.`. .+++o/:--`-+: .. .. `.``..::. `.``.` .. .. `.  `` `` `` `..:`` `` ``  ```+``.+`     +`   .:-`       `::.   .:.--::.   -+----::--::./.-:                /. .+/        -:--/-              /`:. /s`     -s:--::-/`:s-`  ````/.``````........-..--.---------+/--:------.-....````````    .+`          /
  /          .o---.--.-...-.........:y-```.+.``````````                  `/`           `+-      ./      :/-:/ `.` `-/+/::              `/                               .-            -+.--.      /`     `-:.`  `::`      :-    .::.:+           -:`/:             `-: .+./-........--..+`           `:+--+--/+-   /:.:/ :++:-+/o:..-...-+-:/-.`.````````  `            :.                           ./          /
  /         `+.//-+:::`      ```````-+.```+:```......--...---.....---..--+/---..--------o`      `+:---:+- -+-........+::+///-/--.--.---:+.......................-------.//.........---:o`         /.       `./:--`        ./      `:+`            //.:/        .--+-` `/-`.:````````````--          ./`   --   -/  -:``+/:+sy:```        .:+-/`                         `:`                           -/         /
  /         /. :ss+y--                   -:                             -:              .:.`     .:-:::--+/`       `::-`/ohs-/+//:.`.` :.                               :.            `/`         :-         `/.          ./       `+             .+/ -/-::.``/.``:/.-:.  `:`            :-        :-     `/    /.-+:/```  -++o-          /s`/.                          .:                            :-        /
  /        /:  :/-/-                    `/                             `/`                .:--`      `+:s:         `.-. ``.-`  `....+/`/`                               /`  `/-..     `+.--       ./`         /.         `/.       `o`            +./- `+:`.+:`   .+-`     :.            `:.     `:.       -.   .--`/+-    `/:/s:`        `o/o.                           :.                           `+`       /
  /       -/                            /.                             --                    `:----..//`+/--::                      `/-/     .:-` .::`::` :. :.`:`-/:`  /    `-::     :/``-:--.----:   `-:-----`        `/.       ./.            `o--//.:-  `  `--.`       --             `:.    .-        `:       `+o.. :--///::         -oooyo`                        `/                            ./       /
  /      `+`                           .:                             `/                          `.+-.-+:.:/o.                      //:    +s:ssoy--+do`+my-mhyy+y-ss `/     -.      /:--..+```     ./:`./-  .::-```-..++.       /-             .+``.-o++.`.--.`          `/              `/`   .:         :.       .oy+:+/` `/-/.        `++syho+`                       --                            /-      /
  /      /:                            :`                             :-                            `-o:+s-`./           `          `/:o    :s+s::s+/+yo/s/s:o.s/-o+o- `:             /s+++-+--:`  `:-.   `//:/` `..-.``-oy.      /-             :-    `+s/-`` ``..         /`              .:`  ./         .:        +d-`-+.`:+./`         o:.yy+h/                `--` -``+:-.o.--.-`.::`.::.          .+      /
  /     `+`                           .- `://.`/+/.++-`+/`+/.o./++:  `/`                             .: `::`+.        `-:o/o-`    ``.:/-     ``   ``  ```              .:             `///:````-/``/- .--::/.::         ./+.      -+-           ::      :s:-----..+`        :`               `:. ./.        `/`       /h:  `:+:::`         /y+`:yyso.               /dh++mo/h/-/y/m+/h+h:-:h:+d`          /-     /
  /     /-                            :` +h-oy+y--/mo.omd:mydh+h-oh  --                              :.  .+-+-      `/:-ss/``-:----:///`                               .-               -+--::``//.::-+-`-+/`:-         /:/.   `.:-`o`         ./        .::.`   `+         :.                `/.:/+/`       :.       -//.   .+.          `+--. :ss:+.              oo.:sos:ys/++/+`/+-s++-ooo/           ./     /
  /    `+`                           `/  .+++..++::o+:+-+-/`/:`///.  :`                              /`   ///o:-/+/:/. .+/.         -/+`                               --                `+- /+//-   `/- `+://         :-`-/..-:.`  -:-        /:          `--:: /.         --                 `-`:--:       .:       `::o-`              .-`.:`yoo.s/              `  `  ` `/.         ``  `              +`    /
  /    -/                            --                             `/                              `/      ./:::-s/`  `+.`          :+/`                              --                 `::/`:o    `/`  /-+/      `:/:  `/...       ./`      `-:           -:`:-          .-                    `/:-       `/     ``` .o++-            `+-/:/::`::o-                       --                            /-    /
  /    /.                            :`                             --                              .:        ``  /-    .--:-`      .+`.:-.-:.                         --                   .:-./: ``.+.`-:///-:` ``:.`   /.   ..`  ``-:+:``     /:`      `-:. -:           .:                     ``         /`    /:::`.:`/.         `:o/:+o/-    `                        .:                            -/    /
  /   `+`                           `/`                             :.                              --            +.        ./`  .``.o:`:+`.+-:.                       :-                     `.:/-...-../.    `---/:     --`.:/.:-:-..``.-::-.-/:..----//-.  ./            `/                                :.    `::-:./../       `.//-+-o.-:       ``                    `/                            `+    /
  /   `+                            `:                              /`                              :.            +`         /- `o:-..+./- `+`:o.                      :-                                /.         +.`....:+-/:            :/```/.   ``/.  `-:`            `/                                -.      .:../+-+-    .:o-..:- /-./.` .- .s/                     /`                           `+`   /
  /   .+`//-:.                      .:      `                      `/                               :.          `::        ``:/ `:+`  +.-+--/:-./`                     :-``                              /.        `o:/:-+/--.+`            +`  `/.    `+``-:`              `:                                --       ./.`.//.`` .o-/:-.`  //:y///+:`:s+```````````````.`````+.``````.....```````````..```.o`   /
  /   ./-so+-`  --.        `.       .-                             `/                              `/`         `:/:.`     -+-.-:-.    `-.`     .o/`````````````````````/::+.`````.......```````..........+-````....:o``  .+` ::            ::-++so      +-/:....-...........-+................-----..-.....---//.-......-/. `o:-...o- `    `+-+o+++...-yo.:o:o+y+--...........+..............````````..````.o`   /
  /   -+.//-... ys/+o+:++++sy+++o- `-:........-..........---------.-+...-----.........------......-oh/-------.-+. `.:+.   ::`                 -oo:o+//:...```````....../:.....``........```````.......```/-````````:/  `.-+ `/`           .++y--//-`   `+:`     `           `:                                -:         `+. .://``:+`    ./../-/+.   ./```//o+os-:--`        +-                           `+`   /
  /   -+``````` /+/+y++++o/////::   .:   ` `` `                    `/                             `:o/.       ./   `-/-:...-:                 :- -/` `-:..```          :-                                :.        `:--+-:- ::            :+++:/: -:. `/.                   `:     ``   `.``.` `` `` `` ..`   --          `/. `/s:/ -/::.`:: :/s/+  `/::/+--+y+:`  `:+:.`     +ss-                         `+    /
  /   .+            .`              .:                             `/`                              :.        `o.`-:.  `..+/.                          .``...:-`       -.                                -.          .+-....:`            +h/`     `::+.                    `:   `so+s.so/-yy/`od.+d/y/s++h.  -.           `/-`:-     ``.-.  `oo+y:  ```````--:::.  :- `-- ``-o+y+``                       .+    /
  /   .+                            `:                              /`                              --        :o//.     .-/:                                  .:--`    --                                -.           -oo/-:-`            /y:        ::                     `:   .h/+y:h//-ds/oyh/s+sd-y++y.  :.             --/-..````      `o:`:.        `//:  /- /.   -:/+/+/: :o`                      -:    /
  /   `+`                            /`                             :.                              .:        :-``     -:`                                       -/    .-                                -.            /+.``./``:::.      .y+`       ./                     `/    `-.` `-.`.-..````  .  ..    :`              ./:-:::-://`    /`    ..   `. `/` .+:`+``-.`+/`/:`  .ss-`                    /.    /
  /    /.                            :.                             .:                              `/        `./.    ./`                                        ./    .:     `.`...`.  .s:`. ``.--..``.-/:.-.         `+`   .... ::      -/o/``      /.                    `:                               `/                 `..----/s+o/+/o//+/+ss`  --     :/:/+.+.-/-:./`    .o///-                 `+`    /
  /    -/                            .:                             `/`                              /`         `/.   `/.                                        -:    `/    `yd:od/+y `oN//msso:do:h/y+:od+/h-        `+`        :/``   `+` .-oo.    ./                    .:                               .:                         .`.-.sy--:ss-.             `-..  -:-yo       .:y+`                -/     /
  /    `+`                           `/                              :.                              :.          `/`   `-:::  `-:-                              -/`    `/    syh/os`oy/+yysoo+d-`h..h.s+++yooo`         -/        `///-..:/`  `oyo-.-::+`                   --                               :.                              /.`/:.    `:.-`       `/.    `.++         `:.                +.     /
  /     /-                            :.                             ./                              ./           ./`     `/:+/` +.                            ::       +    ` ```` `.``  ``  `  `  `  ``-.``           ::        `-:-`../++. .oy/`.` `+       ./`          -.                              `/`                             .:         oy/----:   `/+-     `/`                           -/      /
  /     .+                            ./                              /.                              /`           `/.       +.  .--:.`                       /:        /`                               ..            .:         -/`     `-``//s+    :-      ./-:          :.                              .:                              :`    `.` :-    -+:   :--/     --                           `+.      /
  /      /:                            /.                             .:                              :-            `/-      +.     `.::                     `+`        :.                               ..            /.         /-      `+/-..+/:  .+`   `.:-`./          /`                              :`                             .:   `:-/+:/    ./-.  ./ ./-   `+`             `--`          ::       /
  /      `+`                           `:                              /.    -+:                      `/             `::.   :o/       `+-`                    /`        --                               ..           -/..`````   :/.`  `:+.-:/.::``./.   -/`  `/`         `:                              `:                              :` :-+. `-`      -:` `/`  :-   :.              .y+         `.+`       /
  /       -/                            :-                             `/   .o-o.                      :.              `-:-``:y`       `./:`                  /`        .:                               --           -+......---:/o++o::`    +. `::.     /`   :-          .-                              -.                             -:`:+/`            `:::`  `+   .:               .o-       `/oy`        /
  /        /-                           `/`                             -- `+o/o+`                     `:                 `/:/o.          ::                 `+`        `/                               -:            /-       `o` ` --`    `+ -/.      `/   ./           :.    `````` ``                `:`                            `/-/.                      ./  `/`                        :o./-         /
  /         +. `//-+:::                  ./                             `/::/` `/.                      :.``````````````.```.o./-     `:--+:                 -+----:-----o----::::----.--.---------....../+---------...-+.      .o     `+`   -:`+--.-...-o.  `/-.......-..-o-....------.-....-............/:..----------...--.-----..--:+/-.                         +/.+:--..-.....`..```````` `   `::          /
  /         `+` -ss/y-.                   -:        ``````...`....-..---:yhh+---.---..-------...--...--.-+---.......```..````-/.+     ::  `+`                /`          /`                              .-             `+`    -/:      -o:-/: ./       :-   /.           .:                             `/                        .-:.`                             ./:-  ` ```````.y/.`....-..--..+/           /
  /          `+.//-/-`.....-.-------.--.---+/---.-..-..:.`...-.````     `:+o.                            :-                   /..//::///`  `::/`         `:-/:`  `  `  ``:-`  `  ``  `  `  `` `` ``` `` `--`. `.` .` `. `+.    /.      ::` ./  .o``-` --+`  //` .. .. `.` /- .. .. `-` .. .- `-` .` .. `-:--` .. .. `- `.` .. `` ./.`                                `s-            `+o`           ::            /
  /           .s-...-::``-`` .````  `+--``o/+/+oo:+oo/+oossshhss`          :-        `` ``  `` `. `.``.` -+`.- `-``-` -- .. `-/- `o    `::-.  -/-      `::--`.-``.` .` ...+.` .` `` `` `.` .` `` `.` `` `--`` `.` `  `` `+`    o+ `:--:.   `+:::`       ::-:-            `:                             .:           `  `  `` ``./                                   `o. .. .- `.` .` -`          ::             /
  /            `+.  `s+o+ssyoyy/ss:.syhy-`s//hhho+/:++/++--:/-/: `-``-. -. .+.`-` .. `. `.  `` ``  `      .:                  .+ /-      ``./. `o-    ::                 `/                              .-              -/    /+::`      .+h/           ``              .-                             /`                      :-                                   `oo:    `  `  `` `. `.``-` -+:              /
  /             `/. `+:/:+oy:/+:-/` ::`-- `-``++``` ``  `                   `/.                            :-                  +`-/         -/`-++-   +`                  /`                             .:               ::/.-/`       `  .+`                           /`                            --                      -:                                    -/.                       `/-               /
  /              `/-.` `` ``                   :.                            `/`                           `/`                 /.`+         `..:+-    -/                  :-                             .:                /-:.       .://`/`                           .:                            .:                       -:                                    +`                       .+.                /
  /                ::                           :-                            `/`                           `/`                -/::           .o.    -+`                  .:                             ./                .+         -::::`                            :`  ./`     `   `  ``  ``    `:`                       /.                                   /-                       :/`                 /
  /                 -/`                          --                            `/`                           .:                `+-/           :::--.-d:                    /                             .:                 /.        .-+-                             .:   oo+h:y:hos/:y:y+/:y+so   :.                       -:                                  ./.                      `/-                   /
  /                  `/-                          .:`                           `:.                           -:                .o/`          `+` `+y-                     :.                            .:                 :- `..----.`/`                             /`  `h/h+hd:m/yoso+y/:/y/y+  :.                       -:       `-------:-  `             .::`                      -/`                    /
  /                    :/`                         `:.                    `   `  `/.-:````  `.` `.`            :-               `+./.         .y-``:o`                     .:                            .:                  -:-.```   `:                             --    .`. `.`... `` ..` `.`  --                      `/-  .----::.``    `o/o:           .:-`                      `/-                      /
  /                     `/-                         `--                 `yyy.yy.oo++h/yy:y/oo/:os+y:            :.               :-`+          -++-.                       `/`                           `:                            -.                            `/                           .-                       `:-:+.`` `          /h-         `-:.`                       -/`                       /
  /                       -/.                         .:`               -d+:yyd/h+/:d+d/-d-y+/-ss+y-            `:.              -/`+`           ::                         :.                           `:                            :`                            :.                          .:                          .:`             .++s-       `::.                 -/     ./-                         /
  /                        `::`                        `--              `. `.`.``-.`.-/` . `..` ..`              `:.             `+.:-        ``.:.                         ./                           `:                           `/                            --                          .:                          --`               `/-     ``-+-                  .s+`  .:-`                          /
  /                          .:-`                        .:`                          .:.                         `:.            `.+`/.      `o+/....`......--....--....--...+----....-----....------.-..-o-.----------.-.............//....--.--------------.-....:+-----....----.....-......-:/-.--.........`..``````````:-`                 -:-::.:-//`                  .+h/.`::`                            /
  /                            .:-`      `` `             `--`                         `:-`````````.`.........-.--.-+:.-.------..--/::/`   `/:/./-````````````````````````   -:                          `/                           /`                          `/`                        `-:````````````````````..`..-/-...-..-.--.--.----.:+-.+:-/-.````````         .-::++o:`                              /
  /                              -/-  .soo+++-              .:-` `````..........-.-.-.---/+-.....`..`````````````   `:-             +h+/`   .+/``/`                          `/                          `/                          ./                           :.                         --                         --`                  `-//++::-.`.....-----.---::-+:+/:/:.                                /
  /                               `-:--osoo/```````...-..-----:/:-...```````````          `:.                         --            `////`   +-  .:`                          :.                         `/                          :.                          --                         --                        `:.                    .o-:::-`              .-:o///--::.                                  /
  /                                 `-:/:---.....```````        .:`                         --`                        .:`            -o/:` -/.   .:                          `/                         `/                         `/                          .:                        `:.                        .-`                     `..--`           `..://:-.``.::`                                    /
  /                                    -/-`                      `.-`                        `:.                        .:`           :s:-/  .::   --                          /.                        `:                         --                         .:`                       `:.                       `:.                       `.-`          .-:::/-.`  `-:-`                                      /
  /                                      .::.                      `.-.                        .:`                       `:.           +y/+.  :/    -:                         ./                        `:                        `/`                        `:`                       .-`                      `--`                      `--`         `-+/:--.`   `-:.`                                        /
  /                                        `-:.`                     `-:.                       `--`                       --`         `/s+/:.+/     -+/:.                      :.                       `:                        --                        `:`                       -.                       .:`                      `--`           ./..`     .::.                                           /
  /                                          `.:-`                     `.:.                       `:-`                      .:.          `./yo/y/.    +s/.                      `/                       `/                        /`                       `:`                      .:.                      .-.                      .--`                    `-:-`                                             /
  /                                             .::.`                     .--`                      .:.                      `--           -/+sody/:.  --                        :.                      `+`                      --                       `:`                      --`                     `-.                     `.-.`                   `.::.                                                /
  /                                               `.:-.`                    `--`                      .-.                      .:.            `:--:--   --                       `/                      `+`                     `/`                      `:`                     `:.                     `:-`                    `--.                    .::-`                                                  /
  /                                                  `-:-`                    `.-.`                     .-.                     `--`                     .:`                      :-  `     ``````````````+``````````````````````::````````````````      .:`                    `--`                    `:-`                   `.--`                   `-:-.                                                     /
  /                                                     .-:-`                    `--.                     .-.                     `:.      ````````````...:/....--.---.--..--...---+-.--.....-...........-o.....................-+...............-.....-:/-.--..--..--..-..-...-/-..```````````       `--`                   `--.                   `-:-.                                                        /
  /                                                        .::.`                   `.-.`                    .-.`    ````````......--//:-.-.-..........`..``./-```````              .:                     /                     -.                     --               `````./-```..`......--.-----://--....``````       `.-.`                  `-::.                                                           /
  /                                                           .-:-`      -.-/---      `--.`        ``````...--://--.........```````  `--`                   `+//                    :.                   `/`                   ./            ``...`  `:-                   `--`                  `.:-`  ````........----://:.``````           `-::.                                                              /
  /                                                              .-:-`  :hoy+y--     ````-//------......```` `  `--`-` ``../...-///::+:`-.`               `-:/+/```  .` .` `. `.` -.`+- `.``.` .. `. `.` -+`.. `-``-. .. .- `-`/:.`--`.-.-/:-/-..-/://-:-... `.  .````````-:-`..````   ``      `--.                 `.--.`````.....-.-......-:-.                                                                 /
  /                                                                 `-::-+/:+:..----.-....``.--.`   ``  `++../:::/-:ms+sssosyos/ysyo+s/``.::` .. .- `. `--+s:+:/+-.` .` ``  `        --             `````./---.---------------:/:--::/-..```       `--.-/o+-..--::-:------:-.-...-----:--:-...:/-``````          `.--.`                `-:/:.                                                                    /
  /                                                                    `.:+:-.``           -:--://::yoo-`hoyshysso`//+o+/://..:-`-` .. `.  -:-`         `ssho--.o+:                   :.       ``.---.-.-.``  ``          `                            -:--....`                          .::---::-..--:----. `.---`                `-:--`                                                                       /
  /                                                                        .-::.`         /s./yoy/yhyyo/`:-:---..-``.` `---`                 .-.`    `` `osyss+.`.o+`                 `/` `.-----.                                                                                                        `/://:` .` .. ..  `  ``.::-.                                                                           /
  /                                                                           `.:::.`     .//+:`-:``..-:-``               `-:.`          .+:---//----------/:.`-::/::-     `.``.`   -::++--`                                                                                                                 `.::`       ` `-.:/:.`                                                                              /
  /                                                                               `.::::``.`            `.--.`           ````-:/-.--:----/s+`          .oo:o+::++-` `-:`  `-+o++/.--/+++:                                                                                                                      `::o:    `.-::-`                                                                                  /
  /                                                                                   `-::-.`               `---`    ``.:----....``    `                -/-:-------::::/::::-:---:-..---.-----------------------::::::::::::::-------::---------....``````````                                          `..-:-:----.`.-::-`                                                                                      /
  /                                                                                       `-:::.`              `.::-/+-.                        ```...----::::::--:-:--:------..........```````````                                  `````````........-----------::::::----..```                   ````/-.`.`   `.:::-`                                                                                          /
  /                                                                                           `.-::-`           `/++/::.```.`    ```..--:::::::----..````                                                                                                               ```..-----::-::-...``     //----    `-:::.`                                                                                              /
  /           .-       -`:.:.:.   :-:---::   -:-/-/:/`   ::+:+:+-   `+-+/+/+/`:.```                `-:::.`      ```.`.-/os++/::-::-...`                                                                                                                                                ``..-:::::-::+:---:::-`                                                                                                   /
  /          `so:     .y++momoo`  :ysyyhys.  .hyodsmo:  :mm+momos`  `oyodshss.syyyy-                    .-:::/:::///+/:--.``                                                                                                                                                                      `..-::.`                                                                                                       /
  +........---os:.....-o:y+yos+..-sooooooo-..+o+o/o/o-...//o/o/o/...-+:+/+///-://::-........................-:///:--.............................................................................................................................................................................................................................................................................................+
  */
  