------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX--------------
--XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX------------
XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------
--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX
----------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX--
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------