:::       ::: :::::::::  ::::::::::: ::::::::::: ::::::::::: ::::    :::  :::::::: 
   :+:       :+: :+:    :+:     :+:         :+:         :+:     :+:+:   :+: :+:    :+: 
  +:+       +:+ +:+    +:+     +:+         +:+         +:+     :+:+:+  +:+ +:+         
+#+  +:+  +#+ +#++:++#:      +#+         +#+         +#+     +#+ +:+ +#+ :#:          
+#+ +#+#+ +#+ +#+    +#+     +#+         +#+         +#+     +#+  +#+#+# +#+   +#+#    
#+#+# #+#+#  #+#    #+#     #+#         #+#         #+#     #+#   #+#+# #+#    #+#     
###   ###   ###    ### ###########     ###     ########### ###    ####  ########