====================================================================================================
====================================================================================================
====================================================================================================
====================================================================================================
====================================================================================================
====================================================================================================
====================================================================================================
====================================================*#%%%%#+========================================
==================================================+*#%%%%%%%%%#+====================================
=================================================+#%%%%%%%%%%%%%%*==================================
=================================================%%%%%%%%%%%*+#%++###*+++===========================
===============================================*%%%%%%%%%%%%%%%*#%%%*+++**==========================
==============================================%%%%%%%%%%%%%%#%%%#%#+++==============================
=============================================#%%%%%%%%%%%%%%%%#**##=================================
=============================================%%%%%%%%%%%%%%%%#####+=================================
==========================================-=*%%%%%%%%%%%%%%######+-=================================
============================================#%%%%#%############*+===================================
============================================##%%#%#######*****+**===================================
===========================================##%%%%%%######*#*+++**===================================
===========================================############*****++#**===================================
=========================================+###############***++**#*+=================================
========================================*####################*******+===============================
======================================*####################*#*****#**#==============================
====================================*#################*####************=============================
====================**#%#*+=+##*+==###*#############***###*#************============================
==================#%%%@%@@%@@%%%%%#####**%#*######*********#**********+*+===========================
=================+#%%%%%@%%@@%%%%%%%#*#%#***###****####****##********++**+==========================
===================*#%%%%%%%%%%%%%%%###******########**++****###****+*++*===========================
======================+#%%%%%%%#######***+++###%##*****##**++++****+**+++===========================
=========================*%%%%%%%%%%%%%#*+*++###**####**+++++=====+*+=+++===========================
===========================+#%%%%%%#%%%%%#++*+**####****+++=====++*+=====-==========================
============================+##%@@%###%%%%%#**+*##***+++===++*++=*+==+**+===========================
============================*####%%#%%%%%%%%**+******+*****++++=++=++++++===========================
===========================*###%%###%%%%####*###****##****+===++++=+++++============================
===========================*##%%%%%%##%%%##**##****+++++++**+++++++++*++============================
===========================+#####%%%%%%%####***++++*******%#++++*++++*++============================
===========================+*#*##%%%%%%%####**++*#==*%%###*++==*+++++*++============================
============================####%%%%%%%###%%####**#%%#*++=====+#*+*+++++============================
============================####*###%%%####%#######*+*+==---=+*##**++++=============================
============================*******#######%%%#######*++=-----+**#***+===============================
==============================+****##%%%%#%%%%%######*++=--=*******+================================
================================+**#%%%%%%%#######%%##*+=+#%#***+*+=================================
==================================+*#%%%%%%####***#%%%#%%%##****+===================================
====================================+**####%%#***##%%#*##****+======================================
===========================================###****##*##+============================================
===========================================+#+++*+++==+*=-==========================================
===========================================+*===========*+-=========================================
============================================*=============+-========================================
============================================#*=============*+=======================================
===========================================+%%#==========+#%%#+=+++++===============================
=============================++==++++*+*######*#*+*+=++#*++#++****#%#***+*******++++++==============
=+====+##*+++++++**+*******+++*****+++++**++========++**++++*********++********++*++++++++*+***++**+
==++===++======++++++++=++++++++++++++=+++++++**++++++++++++++++++++++**###******###******+*+++*****
++++++++++++++++++++++++++++++++*++++++++++++++++++++++++++++++++++++++**#%%%%#%###########*********
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******##%%%%%%%####%%%%%%%%%%%%%##
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++****++******###%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+++++++++++++++++++++**+****++++++++*******++****+************#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+++****************++++++++++++++++********************###########%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%
+++*******+++**+***+************+*********#####******########%%%%%%%%%%%@@@@%%%%%%%%%%%%%%%%%%%%%%%%