:. . . . . . . . ..:------------------------------------:-:::::::::::--------:: . . .
:::--------------------=---------:-------=-------=++**###*++++====--:::::.::::::---====+=+++==+==--:. . . .::-------------------------------------:-:-
..:::-----=----::::. ::-==++**++==:.. .::::::----::::.. . .::-====+==--::..... ...:::----====-----::. . .:-=+
----=----::.:. :..:-:----=++***++==---=----------:----------:---:---------------:-::--:. . . :::-------::::: . . ::--------==++****+==--
===+=====================+++*****+=-----:-:-::... ........:::::----:-:-::. . . .:-=====-===================+=========-===-=-=-=-=+=++**#**==---:::::
. .. . ..::--=-::.. ..:.:::::.... . . . .::---:.:. .. . . . .. . .... . . ...:::----::.. .. . .
..:::::--======--::...:.::...:::::::.:::::::::::::::::::::::::::::... . . :::--:--------:::.::... .... ::::--------===+=---::::::::::::::::::::::::::
--===+++==------=----::::::.:.....:.:::::-:---:-::.. . ::::-------::-::-:----------:---:---------------:---=-==+++===---------:::::...::::::---------
+=++====--------------====+=+++++==========-=======+++++++=======-------------===+===++===+======---=-----===+++****+++====-----=------============+===---------
**##%%%%@@@@@@@@@%%%%#######%%%@@@@%%%####*******+++*++++*+***######%%%####%%%%%#####********###%%@%%%#%%%%%%%%%@@@%@@%@@@@@@@@@@@%#%%###**####%%%@@@@@@@%%%%###
###%#**###*######%%###%####****#************##%@@@@@%%%%#%%%%%%%%%%%%%%%#%%%%%%@@@@@@@@@@%%%%@@@@@@@@@@@@@@@%%%%%##%###########%%#%%%%%%%%%%#%#*#***************
+**########%###**#***#***##%%@@@%#*++++===+======+=+***#%%%%#%%%####*****++++***#####****##%@%#**++++=+++===+=+++*+****#######******+++++++*++*#%%@@@%#*++=+==+=
***********+**+++=-:::::::::::::::-=++*****************++====---=----====+++*#%%%%%#**++++=++++++*+++++*++***********+**+*****++****++=--:::::::::::::---=++****
. . .:-==========--::.::::--=========================+=++++***#**++=-------:::..... .. .....:::... . .:-===========-:------===++
:::::..... . . ..:-------:.:... ... .... .. . ..:----::. . .. . ..::::::::::::... ......:::::... . . ..::-::::..
.:::---::---::-::--::::. . .:.:-----::.::.. ... .::::::::...::.::.:::::.::::::::::. . . . .:--::----------:-:::.... .
::... . ....:..:.::::::::.:.:::::::..::.:. . . . .::::::.. . . . ......:.::::::::..::.:::::.:
. . .. .:. . . .. . . . . . . . . . . . .