
// +------------------------------------------------------------------------------------------+ //
// |    .-._______                           XARD777                            _______.-.    | //
// |---( )_)______)                 Knowledge of the ancients                  (______(_( )---| //
// |  (    ()___)                              \¦/                               (___()    )  | //
// |       ()__)                              (o o)                               (__()       | //
// |--(___()_)__________________________oOOo___(_)___oOOo___________________________(_()___)--| //
// |______|______|______|______|______|______|______|______|______|______|______|______|______| //
// |___|______|_Cam__|______|______|______|______|______|______|______|Ismael|______|______|__| //
// |______|______|______|______|______|______|__Big_Joe____|______|______|______|______|______| //
// |___|______|______|______|_Mundu|______|______|______|______|______|______|______|______|__| //
// |______|__cja_|______|______|______|__Hendrik____|______|______|______|______|______|______| //
// |___|______|______|______|______|______|______|______|Tzuman|______|______|______|______|__| //
// |______|______|______|Hercs_|______|______|______|______|______|______|Joy22_|______|______| //
// |___|______|______|______|______|______|___Poruchik__|______|______|______|______|______|__| //
// |______|___Pava_the_Clown___|______|______|______|______|__Leledc_____|______|______|_Xard_| //
// |                                                                                     2011 | //
// |                 File:     !XPS v8 SESSIONS.mq4                                           | //
// | Programming language:     MQL4                                                           | //
// | Development platform:     MetaTrader 4                                                   | //
// |          End product:     THIS SOFTWARE IS FOR FOREX TRADERS                             | //
// |                                                                                          | //
// |                                                                                          | //
// |     Online Resources:     http://search4metatrader.com/index.php                         | //
// |                           www.2bgoogle.com/forex4.html                                   | //
// |                           www.forex-tsd.com                                              | //
// |                           www.forexstrategiesresources.com                               | //
// |                           www.traderszone.com                                            | //
// |                           http://fxcoder.ru/indicators                                   | //
// |                           www.worldwide-invest.org/                                      | //
// |                           http://indo-investasi.com                                      | //
// |                                                                                          | //
// |                                                           [Xard777 Proprietory Software] | //
// +------------------------------------------------------------------------------------------+ //

#property indicator_chart_window

extern int DaysToShow = 30;
extern string XXXXXXXXXXXXXXXX_TITLE_1 = "XXXXX Session Time Settings XXXXX";
extern bool ShowASIAN = TRUE;
extern string AsiaLabel = "Asia";
extern string AsiaLabel2 = " HiLo = ";
extern string AsiaStart = "03:00";
extern string AsiaEnd = "12:00";
extern string AsiaStart2 = "03:00";
extern string AsiaEnd2 = "06:00";
extern color AsiaColor = Goldenrod;
extern color AsiaColor2 = SaddleBrown;
extern bool ShowEURO = TRUE;
extern string EurLabel = "Euro";
extern string EurLabel2 = " HiLo = ";
extern string EurStart = "08:00";
extern string EurEnd = "19:00";
extern string EurStart2 = "08:00";
extern string EurEnd2 = "13:00";
extern color EurColor = DeepSkyBlue;
extern color EurColor2 = DarkBlue;
extern bool ShowUS = TRUE;
extern string USLabel = "US";
extern string USLabel2 = " HiLo = ";
extern string USStart = "14:00";
extern string USEnd = "23:30";
extern string USStart2 = "14:00";
extern string USEnd2 = "20:00";
extern color USColor = PaleGreen;
extern color USColor2 = DarkGreen;
extern string XXXXXXXXXXXXXXXX_TITLE_2 = "XXXXX Price Label Settings XXXXX";
extern bool ShowSessionLabels = TRUE;
extern bool ShowSessionPips = TRUE;
extern int PriceLabelSize = 9;
extern string PriceTextFont = "Tahoma Narrow";
extern bool SelectPriceColor = FALSE;
extern color PriceColorUpper = LimeGreen;
extern color PriceColorLower = Tomato;
extern string XXXXXXXXXXXXXXXX_TITLE_3 = "XXXX Session Level Settings XXXXX";
extern bool ShowBestTradingZones = TRUE;
extern bool ShowSolidRectangle = TRUE;
extern bool ExtendLines_to_CurrentPrice = FALSE;
extern bool ExtendLines_to_ChartSide = FALSE;
extern int Line_Style = 4;
extern int Line_Width = 0;
extern string XXXXXXXXXXXXXXXX_TITLE_4 = "XXXXX Session Color Index XXXXX";
extern bool Session_Color_Index = FALSE;
int g_datetime_352;
int g_str2time_356;
int g_str2time_360;
int g_str2time_364;
int g_str2time_368;
int g_str2time_372;
int g_str2time_376;
int g_str2time_380;
int g_str2time_384;
int g_count_388;
int g_shift_392;
int g_shift_396;
int g_shift_400;
int g_shift_404;
int g_shift_408;
int g_shift_412;
int g_shift_416;
int g_shift_420;
double g_high_424;
double g_high_440;
double g_low_464;
double g_low_480;
int g_str2time_488;
int g_str2time_492;
int g_str2time_496;
int g_str2time_500;
double gd_504;
double gd_512;
double g_high_520;
double gd_528;
int g_shift_536;
int g_shift_540;
int g_shift_544;
int g_shift_548;
bool gi_552;
int gi_556;

int init() {
   DeleteObjects();
   for (g_count_388 = 0; g_count_388 < DaysToShow; g_count_388++) {
      CreateObjects("AS_H" + g_count_388, AsiaColor);
      CreateObjects("EU_H" + g_count_388, EurColor);
      CreateObjects("US_H" + g_count_388, USColor);
      CreateObjects2("AS_L" + g_count_388, AsiaColor);
      CreateObjects2("EU_L" + g_count_388, EurColor);
      CreateObjects2("US_L" + g_count_388, USColor);
      CreateObjects3("AS_UP" + g_count_388, AsiaColor);
      CreateObjects3("EU_UP" + g_count_388, EurColor);
      CreateObjects3("US_UP" + g_count_388, USColor);
      CreateObjects4("AS_DN" + g_count_388, AsiaColor);
      CreateObjects4("EU_DN" + g_count_388, EurColor);
      CreateObjects4("US_DN" + g_count_388, USColor);
      CreateObjects5("AS_REC" + g_count_388, AsiaColor2);
      CreateObjects5("EU_REC" + g_count_388, EurColor2);
      CreateObjects5("US_REC" + g_count_388, USColor2);
      CreateObjects6("AS_txt" + g_count_388, AsiaColor2);
      CreateObjects6("EU_txt" + g_count_388, EurColor2);
      CreateObjects6("US_txt" + g_count_388, USColor2);
   }
   return (0);
}

int deinit() {
   DeleteObjects();
   ObjectDelete("Title");
   ObjectDelete("Title1");
   ObjectDelete("Title2");
   ObjectDelete("Title3");
   ObjectDelete("ASIA");
   ObjectDelete("EURO");
   ObjectDelete("USA");
   ObjectDelete("CANDLE");
   return (0);
}

int start() {
   int l_ind_counted_0 = IndicatorCounted();
   g_datetime_352 = TimeCurrent();
   for (g_count_388 = 0; g_count_388 < DaysToShow; g_count_388++) {
      if (ShowASIAN) {
         DrawObjects(g_datetime_352, "AS_H" + g_count_388, AsiaStart, AsiaEnd);
         DrawObjects2(g_datetime_352, "AS_L" + g_count_388, AsiaStart, AsiaEnd);
         DrawObjects3(g_datetime_352, "AS_UP" + g_count_388, AsiaStart, AsiaEnd, AsiaLabel);
         DrawObjects4(g_datetime_352, "AS_DN" + g_count_388, AsiaStart, AsiaEnd, AsiaLabel, AsiaLabel2);
      }
      if (ShowEURO) {
         DrawObjects(g_datetime_352, "EU_H" + g_count_388, EurStart, EurEnd);
         DrawObjects2(g_datetime_352, "EU_L" + g_count_388, EurStart, EurEnd);
         DrawObjects3(g_datetime_352, "EU_UP" + g_count_388, EurStart, EurEnd, EurLabel);
         DrawObjects4(g_datetime_352, "EU_DN" + g_count_388, EurStart, EurEnd, EurLabel, EurLabel2);
      }
      if (ShowUS) {
         DrawObjects(g_datetime_352, "US_H" + g_count_388, USStart, USEnd);
         DrawObjects2(g_datetime_352, "US_L" + g_count_388, USStart, USEnd);
         DrawObjects3(g_datetime_352, "US_UP" + g_count_388, USStart, USEnd, USLabel);
         DrawObjects4(g_datetime_352, "US_DN" + g_count_388, USStart, USEnd, USLabel, USLabel2);
      }
      if (ShowBestTradingZones) {
         DrawObjects5(g_datetime_352, "AS_REC" + g_count_388, AsiaStart2, AsiaEnd2);
         DrawObjects5(g_datetime_352, "EU_REC" + g_count_388, EurStart2, EurEnd2);
         DrawObjects5(g_datetime_352, "US_REC" + g_count_388, USStart2, USEnd2);
         DrawObjects6(g_datetime_352, "AS_txt" + g_count_388, AsiaStart2, AsiaEnd2, AsiaLabel, " zone = ");
         DrawObjects6(g_datetime_352, "EU_txt" + g_count_388, EurStart2, EurEnd2, EurLabel, " zone = ");
         DrawObjects6(g_datetime_352, "US_txt" + g_count_388, USStart2, USEnd2, USLabel, " zone = ");
      }
      for (g_datetime_352 = decDateTradeDay(g_datetime_352); TimeDayOfWeek(g_datetime_352) > 5; g_datetime_352 = decDateTradeDay(g_datetime_352)) {
      }
   }
   if (Session_Color_Index) {
      drawLabel("Title", " Session HiLo ", 12, Silver, 5, 15, "Arial Narrow Bold");
      drawLabel("Title1", " cjatradingtools.com", 10, DimGray, 5, 30, "Arial Narrow Bold");
      drawLabel("Title2", "---------------------------", 10, DimGray, 5, 40, "Arial Bold");
      drawLabel("ASIA", " ASIAN Market :  ", 12, AsiaColor, 5, 55, "Arial Narrow Bold");
      drawLabel("EURO", " EURO Market :  ", 12, EurColor, 5, 70, "Arial Narrow Bold");
      drawLabel("USA", " US Market :  ", 12, USColor, 5, 85, "Arial Narrow Bold");
      drawLabel("Title3", "---------------------------", 10, DimGray, 5, 100, "Arial Bold");
   }
   return (0);
}

void CreateObjects(string a_name_0, color a_color_8) {
   ObjectCreate(a_name_0, OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_STYLE, Line_Style);
   ObjectSet(a_name_0, OBJPROP_WIDTH, Line_Width);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_BACK, TRUE);
}

void CreateObjects2(string a_name_0, color a_color_8) {
   ObjectCreate(a_name_0, OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_STYLE, Line_Style);
   ObjectSet(a_name_0, OBJPROP_WIDTH, Line_Width);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_BACK, TRUE);
}

void CreateObjects3(string a_name_0, color a_color_8) {
   if (ShowSessionLabels) ObjectCreate(a_name_0, OBJ_TEXT, 0, 0, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_BACK, FALSE);
}

void CreateObjects4(string a_name_0, color a_color_8) {
   if (ShowSessionLabels) ObjectCreate(a_name_0, OBJ_TEXT, 0, 0, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_BACK, FALSE);
}

void CreateObjects5(string a_name_0, color a_color_8) {
   ObjectCreate(a_name_0, OBJ_RECTANGLE, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_WIDTH, 2);
   ObjectSet(a_name_0, OBJPROP_STYLE, STYLE_DOT);
   ObjectSet(a_name_0, OBJPROP_BACK, ShowSolidRectangle);
}

void CreateObjects6(string a_name_0, color a_color_8) {
   if (ShowSessionLabels) ObjectCreate(a_name_0, OBJ_TEXT, 0, 0, 0, 0, 0);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8);
   ObjectSet(a_name_0, OBJPROP_BACK, FALSE);
}

void DeleteObjects() {
   for (g_count_388 = 0; g_count_388 < DaysToShow; g_count_388++) {
      ObjectDelete("AS_H" + g_count_388);
      ObjectDelete("EU_H" + g_count_388);
      ObjectDelete("US_H" + g_count_388);
      ObjectDelete("AS_L" + g_count_388);
      ObjectDelete("EU_L" + g_count_388);
      ObjectDelete("US_L" + g_count_388);
      ObjectDelete("AS_UP" + g_count_388);
      ObjectDelete("EU_UP" + g_count_388);
      ObjectDelete("US_UP" + g_count_388);
      ObjectDelete("AS_DN" + g_count_388);
      ObjectDelete("EU_DN" + g_count_388);
      ObjectDelete("US_DN" + g_count_388);
      ObjectDelete("AS_REC" + g_count_388);
      ObjectDelete("EU_REC" + g_count_388);
      ObjectDelete("US_REC" + g_count_388);
      ObjectDelete("AS_txt" + g_count_388);
      ObjectDelete("EU_txt" + g_count_388);
      ObjectDelete("US_txt" + g_count_388);
   }
}

void DrawObjects(int ai_0, string a_name_4, string as_12, string as_20) {
   g_str2time_356 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_360 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_392 = iBarShift(NULL, 0, g_str2time_356 - 60 * Period());
   g_shift_396 = iBarShift(NULL, 0, g_str2time_360);
   g_high_424 = High[iHighest(NULL, 0, MODE_HIGH, g_shift_392 - g_shift_396, g_shift_396)];
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_356);
   ObjectSet(a_name_4, OBJPROP_PRICE1, g_high_424);
   if (ExtendLines_to_CurrentPrice) ObjectSet(a_name_4, OBJPROP_TIME2, Time[0]);
   else ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_360);
   ObjectSet(a_name_4, OBJPROP_PRICE2, g_high_424);
   ObjectSet(a_name_4, OBJPROP_RAY, ExtendLines_to_ChartSide);
}

void DrawObjects2(int ai_0, string a_name_4, string as_12, string as_20) {
   g_str2time_364 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_368 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_400 = iBarShift(NULL, 0, g_str2time_364 - 60 * Period());
   g_shift_404 = iBarShift(NULL, 0, g_str2time_368);
   g_low_464 = Low[iLowest(NULL, 0, MODE_LOW, g_shift_400 - g_shift_404, g_shift_404)];
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_364);
   ObjectSet(a_name_4, OBJPROP_PRICE1, g_low_464);
   if (ExtendLines_to_CurrentPrice) ObjectSet(a_name_4, OBJPROP_TIME2, Time[0]);
   else ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_368);
   ObjectSet(a_name_4, OBJPROP_PRICE2, g_low_464);
   ObjectSet(a_name_4, OBJPROP_RAY, ExtendLines_to_ChartSide);
}

void DrawObjects3(int ai_0, string a_name_4, string as_12, string as_20, string as_28) {
   g_str2time_372 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_376 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_408 = iBarShift(NULL, 0, g_str2time_372 - 60 * Period());
   g_shift_412 = iBarShift(NULL, 0, g_str2time_376);
   g_high_440 = High[iHighest(NULL, 0, MODE_HIGH, g_shift_408 - g_shift_412, g_shift_412)];
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_372);
   ObjectSet(a_name_4, OBJPROP_PRICE1, g_high_440);
   ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_376);
   ObjectSet(a_name_4, OBJPROP_PRICE2, g_high_440);
   if (SelectPriceColor) {
      ObjectSetText(a_name_4, "" + as_28 + " " + DoubleToStr(g_high_440, Digits) + "", PriceLabelSize, PriceTextFont, PriceColorUpper);
      return;
   }
   ObjectSetText(a_name_4, "" + as_28 + " " + DoubleToStr(g_high_440, Digits) + "", PriceLabelSize, PriceTextFont, CLR_NONE);
}

void DrawObjects4(int ai_0, string a_name_4, string as_12, string as_20, string as_28, string as_36) {
   g_str2time_380 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_384 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_416 = iBarShift(NULL, 0, g_str2time_380 - 60 * Period());
   g_shift_420 = iBarShift(NULL, 0, g_str2time_384);
   g_low_480 = Low[iLowest(NULL, 0, MODE_LOW, g_shift_416 - g_shift_420, g_shift_420)];
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_380);
   ObjectSet(a_name_4, OBJPROP_PRICE1, g_low_480);
   ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_384);
   ObjectSet(a_name_4, OBJPROP_PRICE2, g_low_480);
   if (StringFind(Symbol(), "JPY", 0) != -1) {
      gi_552 = FALSE;
      gi_556 = 100;
   } else {
      gi_552 = FALSE;
      gi_556 = 10000;
   }
   if (ShowSessionPips) {
      if (SelectPriceColor) {
         ObjectSetText(a_name_4, "" + as_28 + "" + as_36 + "" + DoubleToStr((g_high_440 - g_low_480) * gi_556, gi_552) + "  " + DoubleToStr(g_low_480, Digits) + "", PriceLabelSize, PriceTextFont, PriceColorLower);
         return;
      }
      ObjectSetText(a_name_4, "" + as_28 + "" + as_36 + "" + DoubleToStr((g_high_440 - g_low_480) * gi_556, gi_552) + "  " + DoubleToStr(g_low_480, Digits) + "", PriceLabelSize, PriceTextFont, CLR_NONE);
      return;
   }
   if (SelectPriceColor) {
      ObjectSetText(a_name_4, "" + as_28 + "" + as_36 + "  " + DoubleToStr(g_low_480, Digits) + "", PriceLabelSize, PriceTextFont, PriceColorLower);
      return;
   }
   ObjectSetText(a_name_4, "" + as_28 + "" + as_36 + "  " + DoubleToStr(g_low_480, Digits) + "", PriceLabelSize, PriceTextFont, CLR_NONE);
}

void DrawObjects5(int ai_0, string a_name_4, string as_12, string as_20) {
   g_str2time_488 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_492 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_536 = iBarShift(NULL, 0, g_str2time_488 - 60 * Period());
   g_shift_540 = iBarShift(NULL, 0, g_str2time_492);
   gd_504 = High[iHighest(NULL, 0, MODE_HIGH, g_shift_536 - g_shift_540, g_shift_540)] - 0.75 * Point;
   gd_512 = Low[iLowest(NULL, 0, MODE_LOW, g_shift_536 - g_shift_540, g_shift_540)] + Point / 2.0;
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_488);
   ObjectSet(a_name_4, OBJPROP_PRICE1, gd_504);
   ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_492);
   ObjectSet(a_name_4, OBJPROP_PRICE2, gd_512);
}

void DrawObjects6(int ai_0, string a_name_4, string as_12, string as_20, string as_28, string as_36) {
   g_str2time_496 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_12);
   g_str2time_500 = StrToTime(TimeToStr(ai_0, TIME_DATE) + " " + as_20);
   g_shift_544 = iBarShift(NULL, 0, g_str2time_496 - 60 * Period());
   g_shift_548 = iBarShift(NULL, 0, g_str2time_500);
   g_high_520 = High[iHighest(NULL, 0, MODE_HIGH, g_shift_544 - g_shift_548, g_shift_548)];
   gd_528 = Low[iLowest(NULL, 0, MODE_LOW, g_shift_544 - g_shift_548, g_shift_548)] - 2.0 * Point;
   ObjectSet(a_name_4, OBJPROP_TIME1, g_str2time_496);
   ObjectSet(a_name_4, OBJPROP_PRICE1, gd_528);
   ObjectSet(a_name_4, OBJPROP_TIME2, g_str2time_500);
   ObjectSet(a_name_4, OBJPROP_PRICE2, gd_528);
   ObjectSetText(a_name_4, "" + as_28 + "" + as_36 + "" + DoubleToStr((g_high_520 - gd_528) * gi_556, gi_552) + "", PriceLabelSize, PriceTextFont, CLR_NONE);
}

int decDateTradeDay(int ai_0) {
   int li_4 = TimeYear(ai_0);
   int li_8 = TimeMonth(ai_0);
   int li_12 = TimeDay(ai_0);
   int l_hour_16 = TimeHour(ai_0);
   int l_minute_20 = TimeMinute(ai_0);
   li_12--;
   if (li_12 == 0) {
      li_8--;
      if (li_8 == 0) {
         li_4--;
         li_8 = 12;
      }
      if (li_8 == 1 || li_8 == 3 || li_8 == 5 || li_8 == 7 || li_8 == 8 || li_8 == 10 || li_8 == 12) li_12 = 31;
      if (li_8 == 2) {
         if (MathMod(li_4, 4) == 0.0) li_12 = 29;
         else li_12 = 28;
      }
      if (li_8 == 4 || li_8 == 6 || li_8 == 9 || li_8 == 11) li_12 = 30;
   }
   return (StrToTime(li_4 + "." + li_8 + "." + li_12 + " " + l_hour_16 + ":" + l_minute_20));
}

void drawLabel(string a_name_0, string a_text_8, int a_fontsize_16, color a_color_20, int a_x_24, int a_y_28, string a_fontname_32, int a_window_40 = 0) {
   if (ObjectFind(a_name_0) == -1) {
      ObjectCreate(a_name_0, OBJ_LABEL, a_window_40, 0, 0);
      ObjectSetText(a_name_0, a_text_8, a_fontsize_16, a_fontname_32, a_color_20);
      ObjectSet(a_name_0, OBJPROP_CORNER, 0);
      ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_24);
      ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_28);
   }
}
// ------------------------------------------------------------------------------------------ //
//                                     E N D   P R O G R A M                                  //
// ------------------------------------------------------------------------------------------ //
/*                                                         
                                        ud$$$**BILLION$bc.                          
                                    u@**"        PROJECT$$Nu                       
                                  J                ""#$$$$$$r                     
                                 @                       $$$$b                    
                               .F                        ^*3$$$                   
                              :% 4                         J$$$N                  
                              $  :F                       :$$$$$                  
                             4F  9                       J$$$$$$$                 
                             4$   k             4$$$$bed$$$$$$$$$                 
                             $$r  'F            $$$$$$$$$$$$$$$$$r                
                             $$$   b.           $$$$$$$$$$$$$$$$$N                
                             $$$$$k 3eeed$$b    XARD777."$$$$$$$$$                
              .@$**N.        $$$$$" $$$$$$F'L $$$$$$$$$$$  $$$$$$$                
              :$$L  'L       $$$$$ 4$$$$$$  * $$$$$$$$$$F  $$$$$$F         edNc   
             @$$$$N  ^k      $$$$$  3$$$$*%   $F4$$$$$$$   $$$$$"        d"  z$N  
             $$$$$$   ^k     '$$$"   #$$$F   .$  $$$$$c.u@$$$          J"  @$$$$r 
             $$$$$$$b   *u    ^$L            $$  $$$$$$$$$$$$u@       $$  d$$$$$$ 
              ^$$$$$$.    "NL   "N. z@*     $$$  $$$$$$$$$$$$$P      $P  d$$$$$$$ 
                 ^"*$$$$b   '*L   9$E      4$$$  d$$$$$$$$$$$"     d*   J$$$$$r   
                      ^$$$$u  '$.  $$$L     "#" d$$$$$$".@$$    .@$"  z$$$$*"     
                        ^$$$$. ^$N.3$$$       4u$$$$$$$ 4$$$  u$*" z$$$"          
                          '*$$$$$$$$ *$b      J$$$$$$$b u$$P $"  d$$P             
                             #$$$$$$ 4$ 3*$"$*$ $"$'c@@$$$$ .u@$$$P               
                               "$$$$  ""F~$ $uNr$$$^&J$$$$F $$$$#                 
                                 "$$    "$$$bd$.$W$$$$$$$$F $$"                   
                                   ?k         ?$$$$$$$$$$$F'*                     
                                    9$$bL     z$$$$$$$$$$$F                       
                                     $$$$    $$$$$$$$$$$$$                        
                                      '#$$c  '$$$$$$$$$"                          
                                       .@"#$$$$$$$$$$$$b                          
                                     z*      $$$$$$$$$$$$N.                       
                                   e"      z$$"  #$$$k  '*$$.                     
                                .u*      u@$P"      '#$$c   "$$c                   
                        u@$*"""       d$$"            "$$$u  ^*$$b.               
                      :$F           J$P"                ^$$$c   '"$$$$$$bL        
                     d$$  ..      @$#                      #$$b         '#$       
                     9$$$$$$b   4$$                          ^$$k         '$      
                      "$$6""$b u$$                             '$    d$$$$$P      
                        '$F $$$$$"                              ^b  ^$$$$b$       
                         '$W$$$$"                                'b@$$$$"         
                                                                  ^$$$*/     