--------------------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------------------
------------------------------------------------------------------
--------------------------------------------------------------------
-------------------------------------------------------------------
----------------------------------------------------------------
---------------------------------------------------------------------
-----------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++