::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::---:::::
:::----:--::::::-::::::::::::::::::::::::::::::::::::::::::::::--:--------:-::::
::-::---:---::---::----:::::::::::::::::::::::::::::::::::::-::---:-----------=---=----:
:::-:----:--------------::::::::::::::::::::::::::::::::::::::::::-------=---=---------------.
:::--:----------=-------------::::::::::::::::::::::::::::::::::----------=-======--=-==----=----:
:---:---------------=-=-----=----::::::::::::::::::::::::::::::::::----=-===============-====--------.
---:-------------===========-==-----:-::-:::::::::::::::::::::::::-----=====================-==-=-=-----
:-------------=========-=========----:-::::::::::::::::::::::::::------============================-==----
.-------=-==---=====-=====+===========-=---:--:--:-::::::::::--:-----==========+=+=====================-=----.
.------------===================+===========---------------------=-========+==+++++++==+=================-=----.
------=-=-====--=============+==+====================--===============++++++++**+*+++++===+==================---
:-----------===============+==+++++++++==+++++*=====++====+++=====+=++++********+*+**+++++==+======+=========-----
:-------=--==-===========++++++*+****++**********++++===++****+***+******++************++++++==================----:
-------=-=================++*************+*********+**+*++***+*****##*#*#***************+++++++================-=---
:----=-====-============++++************************+*******++*****#*#*********#*********++==+==+==============-----
:------=-===-===========++++****************************************#**#**##*##***********++++++====+============-----
:------================++++*********************#**#***************#*#*##*#**####***#*****++++==+++==+===========-----
:---------=-=-==========++*************#**##*****#*###**##***#*****#***########*##*##******++=++++++==============----
:--:----==-============+++************#***##*#****##***************#*#*###*##*#########*****+++==++===+===========----
:::----=-==============+++************#*********#*#*****************#**#****##*##***####*****++++==+==============----
::-----=---===========+++**********************************************#*####**###*#**##******++==+==+============----
::--------=-==-========+**************************************+*****************###*#*###***+*==+==============--=---=
::::----------==-======+***************************+++**+++++++*+****************#**######**++=+===+============-=---:
::::------=----=======++***************++++*+++++++++==++=++=++++*++*++*************##****++++===============-------
::::::----------======+++********+++++++++==========================++++=++++++************++===========-=--=-------
::::::------------=====++****++================================================++*******++++==========-=--=-------
.::::::--:--------======+++++===========-=======-=---------------===-============++++++++==========-=-=------::::
:::::::::----------====++==============-=--------:::::::::::::::--------=======================-==-=------::-:-:
:::::::::::---:---==========-==----------::::::::::::::::::::::::::::-------=-==============----------::-:::::
::::::::::::-------=====-------:::::::::::::::::::::::::::::::::::::::::::----=--==-==----------::--::::::.
::::::::::::::------------:::::::::::::::::::::::::::::::::::::::.::::::::::::-----------------:::::::::
::::::::::::::-:::::::::::::::::::::::::::::: ::::::::::::.:::::::::::-:---::::::::::::::::
::::::::::::::::::::::::::::::::::::. :::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::: .:::::::::::.::::::::::::::::::
.::::::::::::::::::::. .:::::::::::::::::::::
.::::::::: .::.:::...