************************************************************************************************************************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwtttttttttttttttppptttttttttttttttthhhhhh^^^^^^^^^^^^^^^^htt?h^^^^?^^hph^^hdddtt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwttttttttttpppppttttttttttthhhhhh^^^^^^^^^^^^^^^^^^^^^^htpphhhhh^^^^hph^^hddtt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwtttttttttpppppppttttttttth^^^^^^^^^^^^^^^^^^^^^^^^^^^^^hfpfffff^^^^^hh^^hddtt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwtttttttpppppppppttttttth^^^^^^^^^^^^^^^^^^^^^^^^^^^^^hfffpfffffh^^^^^^^hdttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwttttttppp^^^^^^^^^^^^^^^hhhhhhhwwwwwwwhh^^^^^^^?^^^^hffphffffhhh^^^^^hddttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppptttth^^^^^^^^hhhhppppppppffFFFFffhhhhh^^^^hwhfffpfhhfpppphhhhddddttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppph^^hhp--&\phhhppffFFFFFFFFFfffh^^^hwfffpfh^^hwppppffddddtttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww^^wwppppppp---/ppph\hppppfffFfffffffffh?hhhhwfffppphhhwhhhpffddddtttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww^^wwwwwppp/p?pppphhh\ppppppfffpppppffppppppwpfffhhpppwh^^^hppdddddttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww&/ppppphhhppp-\ppppppppppppppwwwwwwppffh^^h?wpphhhpppdddddttt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|fffphhhpppppp\pppppphhppppwbbbbbbwfww?----wppppppffddddddtt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|fffhhppppppppp\pppphhhpppwbbbbbbbbwfhw^hpwpppppppffddddddtt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|fff^^ffffpppph?\pphhhhppwbbbwbbbbbbfhhwwwphhhhhhhhhdddddddt*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\pf^FFFffffffhhp\pphhhppwwwwbbbbbbbpffpphh^^^^^^^^hdddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|ppfFFFFfffffhhhp\pphhhwphhpbbbbbbpffffppfh^^^w^^^hdddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|ppffF?fffffppppp|ppphhwhhppppppppfffffffffh^^w^^hddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwww^^^^?wwwwwwwwwwwwwwwwwwwwwwwwp|pppffffppppppppp|pppphwhppppppppfffffffffffhhwhhhddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwp|pppffffppphhhhhp|pppppwppppppppffFFFFFFfffpppwpffddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp|ppppppppph^^^^^h|ppppwpppppppffffFFFFFFFffpppwpffddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?|ppppppph^^^^ffff|ppppwppppppff^^FFFFFFFFfffpwpfffddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpp-\pppph^^hffffff|ppppwwwwwwwwww^FFFFFFFFFFfwpffffddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppph\hh^^^hffffppp|hhhhwhhhppfff^^FFFFFFFFfffwpfffdddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssssh\hhhhpffpppp/pphhhwhhhpppfffFFhhFFFFFFffwpfffdddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssssss\pppppppppp|pppphhwhhppfffFFh^^hFFFFfffw^^ffddddddddd?*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssssss\pphhppppp|ppppppwhhppffFFh^^^^hFFFFffw^^ffdddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssssp|hh^^hhppp|pppphhwppppffFFh^w^hFFFFFffw^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwsssp|h^^^^hhppp\pphhwhpppfffFFhhwhhFFFFffwf^ddddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssp|h^^^^^^hpp|pphhwhpppfffFFhhhwhFFFfffwf^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\h^^^^hhff|pphwhhpppffffFFhwhFFFFffwf^^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\h^^^hfff|pphhwhpppffFFFFFwFFFFFffwf^^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\h^^hff?|pppwpppppfffFFFFwFFFfffww^^^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\h^^hff|ppwppppppffFFFFFwFFFFfwf^^^^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\hhhpp|pwppppppppffff?wfffffw^^^^^^^^ddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\hhp/pfwppppphhppfffwfffffwpppp^^^^dddddddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp\p?ppwfpppphhhpppppwffffwpfpp^^^^^ddpddddddddd*****************************************************************************************************************
 *wwwwwwwwwwww^^wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww-***wfffppphhhhppfwppwwfffppp^^^^^^pffddddddd*****************************************************************************************************************
 *wwwwwwwwwwww^^wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?***wf?fppphhhhppwppwfffff^^^^^^^^pffffdddddd*****************************************************************************************************************
 *wwwwwwwwwwwww^^wwwwwwwwwwwwwwwwwwwpwwpwwwwwwwwwwwwwwwwwwwww?*wpffppp?hhppwwwwwwffff^^^^^^^^ppppppddddd*****************************************************************************************************************
 *wwwwwwwwwwwww^^pwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwww\wpppppppppwwbbbbbbwpppp^^^^^^^^ppppdpdddd*****************************************************************************************************************
 *wwwwwwwwwwwwwppwwwwwwwwwwwwwwwww?wwwwwwwwwwwwwwwwwwwwwwwwwww?-\ppppppwwFbbbbbbbwppp?p^^^^^^hpppddddddd*****************************************************************************************************************
 *wwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?wwwwwwp\?ppwwpFFFbbbbbbbwwwbph^^^^^^hffddddddd*****************************************************************************************************************
 *wwwwwwwwwww^^wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpp\wpppFFFFbbbbbbbbbbbbph^^^^^hffdddddddddddddddddddddddddddddfFFfph^hppppppbbbbbbh^^hpppppphw^^^ppppwppppppppppppppppppppwwpppppwwpppwpppppppwhwppwph^^*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\ppFFFFbbbbbbbbbbbbbpphhhhhfffpddddddddddddddddddddddddddddfFFffphpppppppbbbbbbh^^hpppphh^^^hhppppwpppppppppppppppppppwwwpppppwwppppwppwwpwphhwwpphhh*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwsspp\pFFFFbbbbbbbbbbbbhpppppssffpppdddddddddddddddddddddddddddfFFFfphh^^^^?^hbbbbbh^^hppphh^^^pppppppwppppppppphhhhh^^^^wwwwppppppppppppwwwpwppppwpppppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwssp|pFFFFFbbbbbbbbbbbhppppsssffphhhdddddddddddddddddddddddddfFFFffphh^^hhppwfbbbbbh^^hphh^^pwpppppppwppppppphh^^^^^^^hppppppppppppppppppwwpwppppwpppppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwsppp\pFF?Fbbbbbbbbbbhhppppssssfphhhddddddddddddddddddddddddff?Fffppppppp?pppwpbbbbh^^^^^^^ppwppppwwpwpppppppph^^^^hppppppp?ppppppppppppppwpwpppppwppppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppp\pFFFbbbbbbbbhhhhppppsssssphhhdddddddddddddddddddddddh^^^^fppppppww|wwwwwwpppwwww^^^^ppwpppwppwpwpppppph^^^^^^hppppppppppppppppppppppppppppppwpppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppp\pFFbbbbbbbbhhhhpppppsssppppppdddddddddddddddddddddh^^^^wwwwwwwwp/&\wwwwwwwwwwwww^^^^pwwwwpppppwppppppfFFFF^^^hpppppppppppppppppppppppppffpppwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpffpppp\pbbbbbbbbbhhhhhpppsssppppphhhddddddddddddddddddddh^^^^^phhhff-/fpp\pwwww?wwwwpw^^^^^hppppppppwppppffFFFFF^^^hpppppppppppppppppppppppppfffffwwpp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffpfpp|ppbbbbbbbbhhhhhpppsspppppphhhdddddddddddddddddddddh^^^^phhhf&ppFffp&ppwwwwwphhh^^^^^hppppppppwppfF?FFFFFw^^^^hpppppppppppppppppppphppffffffwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwffffpfp\-\pbbbbbbbhhhhhppppppppppphhhdddddddddddddddddddddh^^^^whhp/fffFFFfp\pffpwp\ffh^^t^^hppppppwwwppfFFFFFwwFFFF^^hppppppppppppfffffp^^^^^fpfffwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfFFfffpppp\pbbbbbbhhhpppppppppppppppdddddddddddddddddddddh^^^^fpwf?pppfFFFFf|fFfpwpp\fh^^t^^wwwpwwwphwpppfFFFwFFFFFF^^hpppppppppfffFFFffpppphpppffwwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwpwwwwwwwfFFFfffpppp\pbbbbbbpppppppppppppppppddddddddddddddddddddh^^^^ffpf/fpffFFFF-/fFFffpwsp\h^^tt^^hpwppph^whpppppwFFFFFFFFFffppppppffFfFFFfppppppwwwwwwwwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwh^^^^^^hpppp-\bbbbbpppppppppppppppppddddddddddddddddddddh^^^^pp-/fwwwwFFF/ffFFFfpwsss|h^^^^^^hppphh^whhhpppwfFFFFFFFFFFFffppffFFFFFFFfppppppwwwwwwwpppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwhhhhhhpppp/pp\bbbwpppppppppppppppppddddddddddddddddddddd^^^^p/?pfffffwF&ffFFFFfpwssf|h^^^^^^hpph^^^^whhppwppFFFFwFFFFFFFFffFFFFFfFFFfppppppwwwwwpppppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppwwwwwwwwpwpppppppp/pppp\bwfffppffpppphhpppppddddddddddddddddddddh^^^^/^^hff----/f\FFFFfppwsspp\^^^^^^ffff^^^^whhppwppfFfFwFFFFFFFFFFFffffpfffpppppppwwww&ppppp&*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppwwwwwwwwppwwpppppp|pppwp\wfffffFfpppphhpppddddddddddddddddddddddh^^^^|^^^h/f?fwfFf|FFFfpfwphpp|^^^^^^ffff^^^^hwhhwppppfpfwffFFFFFFFFfppppppppppppppppwwwffffpfp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppwppppw|hhwpww\fpfFFFfpppppppppddddddddddddddddddddddhh^^h|h^^/pfffwfFf|FFfppfww^^/^^^^^^^hww^^^^^hwhhwpppppppwppffFFFFFfpppppffffffppppppwwwfffwpfp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwpppppwppw/whhwppp|ppfffpfppppppppppppddddddddddddddddddpphhhpp&-/pffFfwfFf|FFppppww^^|^^^^^^^^ww^wwwwwwhwpppppppwwwppffFFffpppppffFFFFFfpppppwwwffwppfp*
 *wwwwwwwwwwwwwwwwwwwwwwwwww?pwwpwwwwpwwwwwwwwwwwwwwwwpwwwwwwwwwwwpppppwwp|hwwpppp|ppppffpppppffpppppppdddddddddpppddddppppppp/p^^pfFFfwffp|fppppwww^^|h^^^^hhw^pwppppppwwppppppwwwpppppffppppppfFFFFFFFfppppppwwfwpppf&*
 *wwwwwwwwwwwwwwwwwwwwwpwwpwpwwpwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppppp|hhpppppp\pppffppppffpppppwwpppppppppppp?ppppppppp-?ph^^hfwwwwwff|hppppwww^|wwhhwwwwhhpppppppppwwppppwwwpppppppppppfffFFFFFFffpppppppwwwpppppp*
 *wwwwwpwpwwwwwwwwwwwwwpppwwwwwpwpwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppppp|ppppppppp\pphhhhhfffppppwppwp^^^hpppssshhhhhhhhp/pwww^^hffffwfww|wppppwwwww\pwwpppppppppppppppppwppppwwppppppppfffFFFFFffffpppppppppwwpppwpp&*
 *wwwwwwwwwwwwwwwwwwwwppppwwwwwwwppppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppppp|pppppppppp\phhhh-fpppppwpp^w^^^^^ppssss^^^^^^--/wwph^^^^fffwphhhp\wwwwwwppp|pppppppppphh^^^^hhpppwwwwwwwppfffffFFFFFFFfpppppppppppppwwwwwwwpp*
 *wwwwwwwwwwwwwwwwwwwwwwppwwwwwwwpppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppppp|ppppppppppp?---/f----\wpp^^w^^^^hpwh^^^^^whp/^^wpppfh^^^ffwpphhpp|ppppwwpppp\pppppppphh^^^^^^hppppppwwwwpfFFFFFFFFF?FFffppppppppppppwwpppppph*
 *wwwwwwwwwwwwwwwwwwwwwppwwwwwwwwwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppp/ppppp?pppppp|pppffffppw\p?^^^^hhppwphh-\^hpwp|ppwffFfh^^^fffppsspp|ppppwww?ppf\wwwwwwwww^^^^^^^hhppppwwwwpfFFFFFFFFFfFFfppppppppppppppww?pwpph*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppp|pppppppppppp|pppffffpwpf\h^^hhpwppwph/^^\----&-------------?-\sspp|ppppwwwwwww|pppppppphwww^^^^^^hpppwwwwppfwFFFFFFfpffppppppppppppppppwwwwwwh*
 *wwwwwwwwwwwwwwwwwwwwwppwwww*wwwww?pwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppp/pppppppppppp/pppppffwwfff|?hhhpppwwpp|?^^hffwf|ppwpfffh^^^^?pff----&ppppwwh^h^^|hh^^^hh^^^^^ww^^^^hppwwwwwwwwpfFfFFfpppppppppppppppppppppwwwwwh*
 *wwwwwwwwwwwwwwwwwwwwwp?pww***wwwwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppp|pppwwppppppp|ppppppwffff?|phhhpppsspph\^^hf?wf|ppwpfffh^^^^^wffffppp\pwwww^^h^^|h?^^^^^^^^^^^^^^^hppppwwwwppp?ffpfFffpppppppppppppppppppwwwwwph*
 *wwwwwwwwwwwwwwwwwwwwwwppww*****wwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppp/ppwwppwwwwww/ppppppwpffffp|phhhhppsspp^|^^hffwf|pwwwwwww^^^^^^wpppppp|pwwww^^hff|fhhppphhhh^^^^hhhppppwwwwwppppppppffpppppppppppppppppssssppppwp*
 *wwwwwwwwwwwwwwwwwwwwwwpwww*****wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpp&wwwppppppppp|wwwwwwwp?ffppp|hhhhhhhppwph/^^hfwff|wwwpppss^hhppppwppppp|pwwww^hpf/pffppppffffff?^hhppppwwwwwwwpppppppppppppppppppppppppwpssspppppw*
 *wwwwwwwwwwwwwwwwwwpwwwwwww*****wwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\pppppppppppp\ppppppwfffppp|hh^^^hhppwp|h^^hffwf|ppwppssshhppppppwwppp|pwwwwwhp/pppppfffFFFFFhhhhppppwwwwwwwwppppppppppppppppppppppppwppsppwppppp*
 *wwwwwwwwwwwwwwwwwwwwwwppwww?**wwwwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppp\ppppffpppppp\pppppwfffppp|h^^^^^hppwp|h^^hpppw&\pwppsshhpppppppppwwp|ppwwwwppppppfffFFFFFffppppwwwwwwwwwwwwppppppphh^hppppppppwwwwwpppppppwpppp*
 *wwwwwwwwwwwwwwwwwwwwwwwppw*****wwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppp|pffpffffppppp\pppppwffppp|?^^^^^^hppw|h^^hpp&/wp-----?--\ppppppppppw|ppwwwwwppppwwwwwwwwwwwwwwwwwwwwwwwwwwwppppppph^^^^^^^hppwpppppppppppwppppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwpwwwwwwwpppp|pfffffffpppppp\pppwffpppp|h^^^?^^hhpw?p^^hwwwpwffwpppwppp----------?wwppwwwwwwppwwwwwwwwwwwwwwwwwwwwwwwww^^^^^hhhpphhh^^^hpppwppppppppppppwpppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwfffpp|ppfFFFffppppppp\pwffp----+ph^^^^^^hh/wh^^wwwwwwwwppppwppppppppppwpppwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww^^^^hhppppppppppppppphhhhhppppppwppp*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffppp|pfFFFffpppppppp\w--/pppp\pph^^^^^h/+pwwwwwwwwwwwwpppwpppppppppwwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww^wwhhhppppppppppppph^^^^^hhppppwwww*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffpp/?ppfFfffppppppppp?wwpppppp\p?hwhhh/pp\pppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww&pppppppppwwwwww^^^^wwhppppwwww*
 *wwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwfp/pppffFfppppppppppppppwppppp|pwwppp/pppp\pppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwpppppppppppwwppph^^w^^hwwwppwwww*
 *wwwwpwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwpp|ppffFFfpppppppppppppppwwwwp|wpppp/pppppp\p?pwwwwwpppppppwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwp?pwwwwwwppppwwwwwwwwwwwwwpppphhhwhhppppwwwwww*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpw&--+pffFFffppppppp?pppppppppppww----/pppppppp--\pppppppp---?pwwwwwwwwwwwwwppwww?wwpwwwwwwwwwwwwwwwwwwwwwppwwwpppppppppp^?^pssspppppppppwppppppp&/pww*
 *wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppp\pfffffppppppppppppppppppppppwppppppppppppppp-------/ppppppwwwwwwwwwwwwwwwppwwwwwwwwwwwwwwwwwwwwwwwwpwpffffppffppppppppssssspppppppwpppppppp/pppw*
 ****************************************************wwwwwwwwwwwwwwwpppp&ppppppppppppppppppppphhhhhhhpppp*************************************************wwwwwwwwwwwwwwwwwpwpffffffffffffffffsssssppppp&wpppppppp/ppppp
 ****************************************************wwwwwwwwwwwwwwwwpppp\ppppppppppppppppppph^^^^^^^hhpp*************************************************wwwwwwwwwwwwwwwwpwwpfffffffffffffffffssssppppww\pppppppp|ppppw*
 ****************************************************wwwwwwwwwwwwwwwwppppp\ppppppppppppppppph^^^^^^^^hppp*************************************************wwwwwwwwwwwwwwwwwpwwppppppfffpffpfffssssppwwwppp-----\p/ppppwp*
 ****************************************************wwwwwwwwwwwwwwwwwhhhhp\pppppppppppppppph^^^^^^hhhppp*************************************************wwwwwwwwwwwwwwwwwwwpppwpppp?ppppppfppssppwpppppppppppp?ppppwpp*
 ****************************************************wwwwwwwwwwwwwwwwwh^^^hh\phhhhhhppppppph^^^^^^hhhpppp*************************************************wwwwwwwwwwwwwwwwwwpwwwwwwppppppppppppppwwpppppppppppp/p----wpp*
 ****************************************************wwwwwwwwwwwwwwwwwh^^?^^h\h^^^^^hpppppphh^^^^hhpppppp*************************************************wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppwwppppppppppppp/ppppp&wpp*
 ****************************************************wwwwwwwwwwwwwwwwwwh^^^^^h\h^^w^hpffffffffhhhhppppppp*************************************************wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppppppppppppp|&pppppwpp*
 ****************************************************wwwwwwwwwwwwwwwwwwh^^hhhh|p?whhppffwfFF?fhhhpppppppp*************************************************pwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppwwwpppppppppwwwwppwppp*
 ****************************************************wwwwwwwwwwwwwwwwwwwwwwwww|wwppppppwpppffhhhhpppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwppppppp|pppppppwppppffhhhhpppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwwwww/pppppppwppppphhhhhppppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwppppp|wwwwpppwppppppppppppppppffff****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwpppp|?pppwwwwwpppppppppppppffFff****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwhhwppp/pppppwwwpppppppppppppppfFFFf****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwh^^wh/hhhppppppppppppphhhpppppfFFFh****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwh^^^^|h^^hhhhppppppppphhhpppppfFFh^****************************************************************************************************************
 ****************************************************wwwwwwpffpwwwwwwwh^^^^|h^^^^^^^hppphhpppppppppfffh^^****************************************************************************************************************
 ****************************************************wwwwwwwfffwwwwwwwhhhhh|phhh?hhhpphhhhhhppppppp?fh^^^****************************************************************************************************************
 ****************************************************wwwwwwwpfff?wwwwwwpppp|ppppppppphhhhhhhpppppppfffh^^****************************************************************************************************************
 ****************************************************wwwwwwpfffffffffffffff|fffffppppppppppppppppphhh?^^^****************************************************************************************************************
 ****************************************************wwwwwwpwwwwfffffffffff|fFFFFFFFFFFFffppppppppph^^^^h****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwff|fF**********Ffpppppppppphhhhh****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwf/fF************Ffpppppppppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwff|F************FFfppppppppphhhhh****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwhhwpf|fF**********FFfppppppppppph^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwh?hhhp/ffFFFFwFFFFFFffpppppppppppph^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwp?hhhhpwhhhhppppppppppppppppph^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwww\wwwwwppppppppppppppppppppph^w^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwpp\ppppppppppppppppppppppwwwww^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwphh\ppppppppppppppppppppwpppph^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwhhhh-------------pwwwwwwppppp?hhh****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwhhhpp&pppppp?wwwwwppppppw?ppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwhhhh/ppppwwwwppppppppppppwppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwww/wwwwwpppppppffffppppppwhppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwp/pppppppppppppffFffffppphwhpppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwp/ppppppppppppppfFFFFfffpph^^hppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwww|wwpppppwwwwpfffFFFFFfffpphhpppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwpdd|ddwwwwwppppwwwffFFFFFffpppppppp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwpddddd|dddddddddpwhhhw^^^^^Fffpppphhpp****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwpdddddddd\dddddddpwhh^?^^hwhfFFfppph^^ww****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwpddddddddd\dddddpwppppppppwpffffppph^^ww****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwdddddd?dd\dpppwppppppppwpppffppph^^www****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwddddd&wwpwppppppppwppssspppph^^ww****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppssssppph^^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwsspppph^^^****************************************************************************************************************
 ****************************************************wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww****************************************************************************************************************
 ************************************************************************************************************************************************************************************************************************