::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::,:::::::::,:::::::::,:::,::,,:,,,:::::,:::,,,,,,,,,,,,,,,,,,,,,,,,
::::::::::::::::::::::::::::::::::::::::::::::::,:::,::::::::::::::::::,::::,::::::,:::,::,:,,:,,,,,,,,,,,,:,:,,,,,,,,,,,,,,,,,,,,,,,,,,
:::::::::::::::::::::::::::::::::::::::::,:::::::::,:::::::::,:::,:::,,,,:,,,,,,::,,:,,,:,,:::,,:,:,,,,,,,:::,,,,,,,,,,,,,,,,,,,,,,,,,,,
:::::::::::::::::::::::::::::::::::::::::,:,::,,,,:::::::::::::::,,,,,,,,,,,:,,,:,,::,,,,,,,,::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
::::::::::::::::::::::::::::::::,:,:::::::::,,::::::,,:::,,,,:,,:,,,,:,,,::::::,,,,,,,,,,,,,::,,,,,,,,,,,,,,,,,,,,,,,,,:,,,,,,,,,,,,,,,,
:::::::::::::::::::::::::::,,::::::,:::::::,,,:,::,,,,,:,,,,,,,:::,:::,,:,,:::,,,,,,,:,,,,:,,,,,,,:,,:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
::::::::::::::::::::::::::::,:,,,,::,::::,:::,::,:,:,,,,,::,,,:,,,,,,:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
:::::::::::::::::::::::,:::