/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2009, metatrader.pipware.com"
#property link      "http://www.metatrader.pipware.com"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Green
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 FireBrick
#property indicator_color5 Green
#property indicator_color6 FireBrick

#include <WinUser32.mqh>

#import "kernel32.dll"
   int GetTimeZoneInformation(int& a0[]);
   bool QueryPerformanceFrequency(int& a0[]);
   bool QueryPerformanceCounter(int& a0[]);
#import

extern string Pipware = "metatrader.pipware.com";
extern string Pipware_Version = "Dashboard v3.0";
extern color pw.system.TextColor = DimGray;
extern color pw.system.BackColor = Black;
extern color pw.system.WarningColor = Yellow;
extern color pw.system.HighlightColor = C'0x23,0x23,0x23';
extern color pw.system.BullColor = Green;
extern color pw.system.BearColor = FireBrick;
extern color pw.system.FlatColor = Goldenrod;
extern color pw.system.BullHighlightColor = C'0x0A,0x32,0x0A';
extern color pw.system.BearHighlightColor = C'0x32,0x0A,0x0A';
extern color pw.system.SRLineColor = C'0x23,0x23,0x23';
int gia_unused_132[1];
int gia_unused_136[];
bool gi_140;
double gd_144;
double gd_152;
double gd_160;
int gi_168;
string gs_unused_172;
int gi_180;
bool gi_184;
int gia_unused_188[9];
extern string pw.datetime.Note01 = "## B R O K E R ##";
extern string pw.datetime.Note02 = "## Valid Time Zone values: ##";
extern string pw.datetime.Note03 = "## -13 to 13 (UTC/GMT) ##";
extern int pw.datetime.BrokerTimeZone = 1;
extern string pw.datetime.Note04 = "## NOTE: Metatrader Broker ##";
extern string pw.datetime.Note05 = "## Week Open and Close is ##";
extern string pw.datetime.Note06 = "## in GMT!! Adjust only if ##";
extern string pw.datetime.Note07 = "## absolutely nescessary! ##";
extern string pw.datetime.Note08 = "## Mon,Tue,Wed,Thu,Fri,Sat,Sun ##";
extern string pw.datetime.Note09 = "## 0 to 24 ##";
extern string pw.datetime.Note10 = "## Broker Weekly Open (GMT)? ##";
extern string pw.datetime.BrokerStartDay = "Mon";
extern int pw.datetime.BrokerStartHour = 1;
extern string pw.datetime.Note11 = "## Broker Weekly Close (GMT)? ##";
extern string pw.datetime.BrokerEndDay = "Fri";
extern int pw.datetime.BrokerEndHour = 22;
extern bool pw.datetime.ShowAsLocalTimes = FALSE;
int gia_312[43];
bool gi_316;
bool gi_320;
int g_datetime_324;
int gi_328;
int gi_332;
int gi_336;
int g_datetime_340;
int gi_344;
int gi_348;
int gi_352;
int gi_356;
int gi_360;
int gia_364[1];
double gd_368;
double gd_376;
double gd_384;
int g_datetime_392;
double gd_396;
int g_datetime_404;
int gi_408;
extern string pw.dash.Note01 = "##############";
extern string pw.dash.Note02 = "##   DASH   ##";
extern string pw.dash.Note03 = "##############";
extern int pw.dash.Window = 1;
extern int pw.dash.X = 0;
extern int pw.dash.Y = 0;
extern string pw.dash.Note04 = "## H1/H4 L I N E S ##";
extern string pw.dash.Note05 = "## Main Chart H1/H4 Lines? ##";
extern bool pw.dash.H4LinesOn = TRUE;
extern color pw.dash.H4LinesColor = Gold;
extern bool pw.dash.H1LinesOn = TRUE;
extern color pw.dash.H1LinesColor = Gold;
extern string pw.dash.Note06 = "COMPASS, SMA, EMA, SMMA, LWMA?";
extern string pw.dash.MAType = "COMPASS";
extern int pw.dash.MAPeriod = 20;
string gs_dummy_500;
double gd_508;
int gi_516;
int g_ma_method_520;
extern string pw.hours.Note01 = "#############";
extern string pw.hours.Note02 = "##  Hours  ##";
extern string pw.hours.Note03 = "#############";
extern bool pw.hours.DashOn = FALSE;
extern bool pw.hours.HighlightOn = FALSE;
extern bool pw.hours.LinesOn = FALSE;
extern string pw.hours.Note04 = "## C O L U M N S ##";
extern string pw.hours.Note05 = "## Columns On/Off? ##";
extern bool pw.hours.ColColorOn = FALSE;
extern bool pw.hours.ColLabelOn = FALSE;
extern bool pw.hours.ColGMTOn = FALSE;
extern bool pw.hours.ColTimeOn = FALSE;
extern bool pw.hours.ColOpenOn = FALSE;
extern bool pw.hours.ColCloseOn = FALSE;
extern bool pw.hours.ColMonthOn = FALSE;
extern bool pw.hours.ColWeekOn = FALSE;
extern bool pw.hours.ColYesterdayOn = FALSE;
extern bool pw.hours.ColTodayOn = FALSE;
extern string pw.hours.Note06 = "## Column Headings ##";
extern string pw.hours.ColColorLabel = " ";
extern string pw.hours.ColLabelLabel = "Market";
extern string pw.hours.ColGMTLabel = "GMT";
extern string pw.hours.ColTimeLabel = "Time";
extern string pw.hours.ColOpenLabel = "Open";
extern string pw.hours.ColCloseLabel = "Close";
extern string pw.hours.ColMonthLabel = "MN";
extern string pw.hours.ColWeekLabel = "WK";
extern string pw.hours.ColYesterdayLabel = " YD";
extern string pw.hours.ColTodayLabel = " TD";
extern string pw.hours.Note07 = "## Column Widths ##";
extern string pw.hours.Note08 = "## Use 0 for Default Width##";
extern int pw.hours.ColColorWidth = 0;
extern int pw.hours.ColLabelWidth = 0;
extern int pw.hours.ColGMTWidth = 0;
extern int pw.hours.ColTimeWidth = 0;
extern int pw.hours.ColOpenWidth = 0;
extern int pw.hours.ColCloseWidth = 0;
extern int pw.hours.ColMonthWidth = 0;
extern int pw.hours.ColWeekWidth = 0;
extern int pw.hours.ColYesterdayWidth = 0;
extern int pw.hours.ColTodayWidth = 0;
extern string pw.hours.Note09 = "## G R O U P S ##";
extern string pw.hours.Note10 = "## HR must be in the ##";
extern string pw.hours.Note11 = "## time zone of group  ##";
extern string pw.hours.Note12 = "## ------------------  ##";
extern string pw.hours.Note13 = "## G01 ##";
extern bool pw.hours.G01On = TRUE;
extern bool pw.hours.G01LinesOn = TRUE;
extern color pw.hours.G01Color = Red;
extern string pw.hours.G01Label = "NZ-Australia";
extern int pw.hours.G01GMT = 13;
extern int pw.hours.G01OpenHR = 11;
extern int pw.hours.G01CloseHR = 17;
extern string pw.hours.Note14 = "## G02 ##";
extern bool pw.hours.G02On = TRUE;
extern bool pw.hours.G02LinesOn = TRUE;
extern color pw.hours.G02Color = Yellow;
extern string pw.hours.G02Label = "Japan";
extern int pw.hours.G02GMT = 9;
extern int pw.hours.G02OpenHR = 8;
extern int pw.hours.G02CloseHR = 17;
extern string pw.hours.Note15 = "## G03 ##";
extern bool pw.hours.G03On = TRUE;
extern bool pw.hours.G03LinesOn = TRUE;
extern color pw.hours.G03Color = Lime;
extern string pw.hours.G03Label = "Hong Kong";
extern int pw.hours.G03GMT = 8;
extern int pw.hours.G03OpenHR = 8;
extern int pw.hours.G03CloseHR = 17;
extern string pw.hours.Note16 = "## G04 ##";
extern bool pw.hours.G04On = TRUE;
extern bool pw.hours.G04LinesOn = TRUE;
extern color pw.hours.G04Color = DodgerBlue;
extern string pw.hours.G04Label = "Europe";
extern int pw.hours.G04GMT = 1;
extern int pw.hours.G04OpenHR = 8;
extern int pw.hours.G04CloseHR = 17;
extern string pw.hours.Note17 = "## G05 ##";
extern bool pw.hours.G05On = TRUE;
extern bool pw.hours.G05LinesOn = TRUE;
extern color pw.hours.G05Color = BlueViolet;
extern string pw.hours.G05Label = "United Kingdom";
extern int pw.hours.G05GMT = 0;
extern int pw.hours.G05OpenHR = 8;
extern int pw.hours.G05CloseHR = 17;
extern string pw.hours.Note18 = "## G06 ##";
extern bool pw.hours.G06On = TRUE;
extern bool pw.hours.G06LinesOn = TRUE;
extern color pw.hours.G06Color = Violet;
extern string pw.hours.G06Label = "United States";
extern int pw.hours.G06GMT = -5;
extern int pw.hours.G06OpenHR = 8;
extern int pw.hours.G06CloseHR = 17;
extern string pw.hours.Note19 = "## G07 ##";
extern bool pw.hours.G07On = FALSE;
extern bool pw.hours.G07LinesOn = TRUE;
extern color pw.hours.G07Color = Orange;
extern string pw.hours.G07Label = "Morning";
extern int pw.hours.G07GMT = 13;
extern int pw.hours.G07OpenHR = 11;
extern int pw.hours.G07CloseHR = 12;
extern string pw.hours.Note20 = "## G08 ##";
extern bool pw.hours.G08On = FALSE;
extern bool pw.hours.G08LinesOn = TRUE;
extern color pw.hours.G08Color = Red;
extern string pw.hours.G08Label = "Afternoon";
extern int pw.hours.G08GMT = 13;
extern int pw.hours.G08OpenHR = 12;
extern int pw.hours.G08CloseHR = 18;
extern string pw.hours.Note21 = "## G09 ##";
extern bool pw.hours.G09On = FALSE;
extern bool pw.hours.G09LinesOn = TRUE;
extern color pw.hours.G09Color = Green;
extern string pw.hours.G09Label = "Evening";
extern int pw.hours.G09GMT = 13;
extern int pw.hours.G09OpenHR = 18;
extern int pw.hours.G09CloseHR = 23;
extern string pw.hours.Note22 = "## G10 ##";
extern bool pw.hours.G10On = FALSE;
extern bool pw.hours.G10LinesOn = TRUE;
extern color pw.hours.G10Color = DodgerBlue;
extern string pw.hours.G10Label = "Night";
extern int pw.hours.G10GMT = 13;
extern int pw.hours.G10OpenHR = 23;
extern int pw.hours.G10CloseHR = 11;
int gia_unused_1192[];
int gi_1196;
int gia_1200[];
bool gba_1204[];
int gia_1208[];
string gsa_1212[];
int gia_1216[];
int gia_1220[];
int gia_1224[];
int gia_unused_1228[];
bool gba_1232[];
int gia_1236[][5];
double gda_1240[][4][3];
int gi_1244;
int gi_1248;
int gi_1252;
int gi_1256;
int gi_1260;
int gi_1264;
int gi_1268;
int gi_1272;
int gi_1276;
int gi_1280;
int gi_1284;
int gi_1288;
int gi_1292;
int gi_1296;
string gs_1300;
double gd_1308;
string gs_1316;
extern string pw.fractals.extNote01 = "##############";
extern string pw.fractals.extNote02 = "## Fractals ##";
extern string pw.fractals.extNote03 = "##############";
extern bool pw.fractals.DashOn = TRUE;
extern bool pw.fractals.HighlightOn = TRUE;
extern bool pw.fractals.AlertsOn = TRUE;
extern bool pw.fractals.FractalsOn = FALSE;
extern bool pw.fractals.DotsOn = FALSE;
extern bool pw.fractals.ArrowsOn = TRUE;
extern bool pw.fractals.SRLinesOn = TRUE;
extern bool pw.fractals.ColTimeFrameOn = FALSE;
extern bool pw.fractals.ColArrowOn = TRUE;
extern bool pw.fractals.ColBarCountOn = FALSE;
extern bool pw.fractals.ColPipsOn = FALSE;
extern string pw.fractals.ColTimeFrameLabel = "TF";
extern string pw.fractals.ColArrowLabel = "Dir";
extern string pw.fractals.ColBarCountLabel = "Bars";
extern string pw.fractals.ColPipsLabel = "Pips";
extern int pw.fractals.ColTimeFrameWidth = 0;
extern int pw.fractals.ColArrowWidth = 0;
extern int pw.fractals.ColBarCountWidth = 0;
extern int pw.fractals.ColPipsWidth = 0;
extern bool pw.fractals.M1RowOn = TRUE;
extern bool pw.fractals.M5RowOn = TRUE;
extern bool pw.fractals.M15RowOn = TRUE;
extern bool pw.fractals.M30RowOn = FALSE;
extern bool pw.fractals.H1RowOn = TRUE;
extern bool pw.fractals.H4RowOn = TRUE;
extern bool pw.fractals.D1RowOn = TRUE;
extern bool pw.fractals.W1RowOn = FALSE;
extern bool pw.fractals.MN1RowOn = FALSE;
extern bool pw.fractals.M1SRLinesOn = FALSE;
extern bool pw.fractals.M5SRLinesOn = TRUE;
extern bool pw.fractals.M15SRLinesOn = TRUE;
extern bool pw.fractals.M30SRLinesOn = TRUE;
extern bool pw.fractals.H1SRLinesOn = TRUE;
extern bool pw.fractals.H4SRLinesOn = TRUE;
extern bool pw.fractals.D1SRLinesOn = TRUE;
extern bool pw.fractals.W1SRLinesOn = TRUE;
extern bool pw.fractals.MN1SRLinesOn = TRUE;
extern bool pw.fractals.M1AlertOn = FALSE;
extern bool pw.fractals.M5AlertOn = TRUE;
extern bool pw.fractals.M15AlertOn = TRUE;
extern bool pw.fractals.M30AlertOn = TRUE;
extern bool pw.fractals.H1AlertOn = TRUE;
extern bool pw.fractals.H4AlertOn = TRUE;
extern bool pw.fractals.D1AlertOn = TRUE;
extern bool pw.fractals.W1AlertOn = TRUE;
extern bool pw.fractals.MN1AlertOn = TRUE;
double gda_1548[];
double gda_1552[];
double gda_1556[];
double gda_1560[];
double gda_1564[];
double gda_1568[];
double gda_1572[][1000];
double gda_1576[][1000];
double gda_1580[][1000];
double gda_1584[][1000];
double gda_1588[][1000];
double gda_1592[][1000];
double gda_1596[];
double gda_1600[];
double gda_1604[];
int gia_1608[];
int gia_1612[];
int gia_1616[];
int gia_1620[];
int gi_1624;
double gd_1628;
int gi_1636;
int gi_1640;
int gi_1644;
int gi_1648;
int gi_1652;
string gs_1656;
extern bool pw.thv.trix.IsGoldOil = FALSE;
bool gi_1668 = FALSE;
int gi_1672 = 35;
int gi_1676 = 20;
double gd_1680 = 1.2;
double gda_1688[2][7][2];
double gda_1692[2][2];
double gda_1696[2][2];
int gia_unused_1700[2];
double gd_1704;
double gd_1712;
double gd_1720;
double gd_1728;
double gd_1736;
double gd_1744;
string gsa_1752[2];
int gia_1756[2];
int gia_1760[2];
string gsa_1764[9][6] = {"1", "M1", "0.00018", "0.0004", "0.0003", "0.0008",
   "5", "M5", "0.00025", "0.0006", "0.0005", "0.001",
   "15", "M15", "0.0005", "0.0011", "0.0008", "0.002",
   "30", "M30", "0.001", "0.002", "0.0015", "0.003",
   "60", "H1", "0.0009", "0.003", "0.0013", "0.005",
   "240", "H4", "0.003", "0.005", "0.004", "0.008",
   "1440", "D1", "0.005", "0.016", "0.006", "0.024",
   "10080", "W1", "0.08", "0.04", "0.1", "0.06",
   "43200", "MN", "0.015", "0.08", "0.02", "0.1"};
int gia_1768[2];
bool gi_1772 = FALSE;
int g_period_1776 = 60;
double gd_1780 = 0.4;
double gda_1788[7][2];
double gda_1792[2];
double gda_1796[2];
double gda_unused_1800[];
double gd_1804;
double gd_1812;
double gd_1820;
double gd_1828;
double gd_1836;
double gd_1844;
string g_symbol_1852;
bool g_timeframe_1860;
int g_datetime_1864;
extern string pw.thv.extNote01 = "##############";
extern string pw.thv.extNote02 = "##    THV   ##";
extern string pw.thv.extNote03 = "##############";
extern bool pw.thv.IndicatorOn = TRUE;
extern bool pw.thv.HighlightOn = TRUE;
extern bool pw.thv.ColTimeFrameOn = TRUE;
extern bool pw.thv.ColCoralOn = TRUE;
extern bool pw.thv.ColCloudOn = TRUE;
extern bool pw.thv.ColSlowTrixOn = TRUE;
extern bool pw.thv.ColFastTrixOn = TRUE;
extern string pw.thv.ColTimeFrameLabel = "TF";
extern string pw.thv.ColCoralLabel = "Co";
extern string pw.thv.ColCloudLabel = "Cd";
extern string pw.thv.ColSlowTrixLabel = "Sx";
extern string pw.thv.ColFastTrixLabel = "Fx";
extern int pw.thv.ColTimeFrameWidth = 0;
extern int pw.thv.ColCoralWidth = 0;
extern int pw.thv.ColCloudWidth = 0;
extern int pw.thv.ColSlowTrixWidth = 0;
extern int pw.thv.ColFastTrixWidth = 0;
extern bool pw.thv.M1RowOn = TRUE;
extern bool pw.thv.M5RowOn = TRUE;
extern bool pw.thv.M15RowOn = TRUE;
extern bool pw.thv.M30RowOn = FALSE;
extern bool pw.thv.H1RowOn = TRUE;
extern bool pw.thv.H4RowOn = TRUE;
extern bool pw.thv.D1RowOn = TRUE;
extern bool pw.thv.W1RowOn = FALSE;
extern bool pw.thv.MN1RowOn = FALSE;
int gia_2016[];
int gi_2020;
int gi_2024;
int gi_2028;
int gi_2032;
int gi_2036;
int gi_2040;
int gi_2044;
string gs_2048;
double gd_2056;
extern bool pw.diagnostics.Debug_Panel_On = FALSE;
string gs_2068;
string gs_2076;
int gi_2084;
string gs_2088 = "";
string g_symbol_2096;
int g_timeframe_2104;
double g_bid_2108;
double g_point_2116;
double g_bid_2124;
int g_datetime_2132;
double g_ilow_2136;
double g_ihigh_2144;
int g_datetime_2152;
double g_ilow_2156;
double g_ihigh_2164;
int gi_2172;
int g_count_2176 = 0;
int gi_2180 = 0;

int pw.system.Init(string as_0) {
   IndicatorShortName(as_0);
   gs_unused_172 = as_0;
   gi_168 = WindowFind(as_0);
   gd_144 = pw.system.PointsPerPip();
   if (gd_144 == 1.0) gi_140 = TRUE;
   return (gi_168);
}

void pw.system.Update() {
   gd_160 = pw.system.SpreadPoints();
   gd_152 = pw.system.SpreadPips();
   gi_184 = FALSE;
   gi_180 = iBars(Symbol(), PERIOD_H1);
   if (gi_180 >= 1000) gi_184 = TRUE;
}

string pw.system.ToString() {
   return ("   Company: \'" + TerminalCompany() + "\', " + "PointsPerPip()=" + DoubleToStr(gd_144, 0) + ", " + "SpreadPoints()=" + DoubleToStr(gd_160, 2) + ", " + "SpreadPips()=" + DoubleToStr(gd_152, 2) + ", " + "H1BarsCount=" + DoubleToStr(gi_180, 0));
}

int pw.system.GetShift(int ai_0 = 0) {
   int l_ind_counted_4 = IndicatorCounted();
   if (l_ind_counted_4 < 0) return (-1);
   int li_ret_8 = Bars - (l_ind_counted_4 + 1);
   if (ai_0 != 0 && ai_0 < li_ret_8) return (ai_0);
   return (li_ret_8);
}

int pw.system.MAFromString(string as_0) {
   if (as_0 == "SMA") return (0);
   if (as_0 == "EMA") return (1);
   if (as_0 == "SMMA") return (2);
   if (as_0 == "LWMA") return (3);
   return (0);
}

string pw.system.PeriodToString(int ai_0) {
   ai_0 = pw.system.PeriodValidate(ai_0);
   string ls_ret_4 = "";
   switch (ai_0) {
   case 1:
      ls_ret_4 = "M1";
      break;
   case 5:
      ls_ret_4 = "M5";
      break;
   case 15:
      ls_ret_4 = "M15";
      break;
   case 30:
      ls_ret_4 = "M30";
      break;
   case 60:
      ls_ret_4 = "H1";
      break;
   case 240:
      ls_ret_4 = "H4";
      break;
   case 1440:
      ls_ret_4 = "DAY";
      break;
   case 10080:
      ls_ret_4 = "WEEK";
      break;
   case 43200:
      ls_ret_4 = "MONTH";
   }
   return (ls_ret_4);
}

int pw.system.PeriodValidate(int ai_0) {
   int l_timeframe_4 = ai_0;
   int li_8 = ai_0;
   if (li_8 != 43200) {
      if (li_8 != 10080) {
         if (li_8 != 1440) {
            if (li_8 != 240) {
               if (li_8 != 60) {
                  if (li_8 != 30) {
                     if (li_8 != 15) {
                        if (li_8 != 5)
                           if (li_8 != 1) l_timeframe_4 = Period();
                     }
                  }
               }
            }
         }
      }
   }
   return (l_timeframe_4);
}

double pw.system.Pips(double ad_0) {
   return (ad_0 / Point / gd_144);
}

double pw.system.PointsPerPip() {
   double ld_ret_0 = 0;
   switch (Digits) {
   case 2.0:
      ld_ret_0 = 1;
      break;
   case 3.0:
      ld_ret_0 = 10;
      break;
   case 4.0:
      ld_ret_0 = 1;
      break;
   case 5.0:
      ld_ret_0 = 10;
      break;
   default:
      ld_ret_0 = 0;
   }
   return (ld_ret_0);
}

double pw.system.SpreadPips() {
   double ld_0 = pw.system.PointsPerPip();
   double ld_8 = pw.system.SpreadPoints();
   return (ld_8 / ld_0);
}

double pw.system.SpreadPoints() {
   return ((Ask - Bid) / Point);
}

void pw.datetime.Init() {
   gi_356 = pw.datetime.TimeUTC();
   g_datetime_324 = TimeLocal();
   gi_328 = g_datetime_324 - gi_356;
   g_datetime_340 = TimeCurrent();
   gi_344 = pw.datetime.GetBrokerUTCOffset();
}

void pw.datetime.Update() {
   gi_356 = pw.datetime.TimeUTC();
   g_datetime_324 = TimeLocal();
   g_datetime_340 = TimeCurrent();
   gi_360 = pw.datetime.GetBrokerLocalDiff();
   int li_0 = gi_356 - gi_356 % 86400;
   gi_348 = li_0 + 3600 * pw.datetime.BrokerStartHour;
   int li_4 = pw.datetime.DayFromString(pw.datetime.BrokerStartDay);
   while (TimeDayOfWeek(gi_348) != li_4) gi_348 -= 86400;
   gi_352 = li_0 + 3600 * pw.datetime.BrokerEndHour;
   int li_8 = pw.datetime.DayFromString(pw.datetime.BrokerEndDay);
   while (TimeDayOfWeek(gi_352) != li_8) gi_352 -= 86400;
   while (gi_352 < gi_348) gi_352 += 604800;
   while (gi_352 < g_datetime_340) {
      gi_348 += 604800;
      gi_352 += 604800;
   }
   gi_316 = FALSE;
   if (g_datetime_340 >= gi_348 && g_datetime_340 <= gi_352 - 59) gi_316 = TRUE;
   gi_320 = FALSE;
   if (MathAbs(gi_360) > 300.0) gi_320 = TRUE;
   gi_348 += gi_328;
   gi_352 += gi_328;
   gi_332 = gi_348 - 604800;
   gi_336 = gi_352 - 604800;
}

string pw.datetime.ToString() {
   return ("   BrokerLocalDiff: " + DoubleToStr(gi_360, 0) + ", IsBrokerOpen: " + DoubleToStr(gi_316, 0) + ",\n   UTC(0): " + pw.datetime.DateTimeToString(gi_356) + ", Local(" +
      DoubleToStr(MathRound(gi_328 / 3600), 0) + "): " + pw.datetime.DateTimeToString(g_datetime_324) + ", Broker(" + DoubleToStr(MathRound(gi_344 / 3600), 0) + "): " + pw.datetime.DateTimeToString(g_datetime_340) + ",\n   OpenB: " + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_348)) + "-" + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_352)) + ", LastWeekB: " + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_332)) + "-" + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_336)) + ",\n   OpenL: " + pw.datetime.DateTimeToString(gi_348) + "-" + pw.datetime.DateTimeToString(gi_352) + ", LastWeekL: " + pw.datetime.DateTimeToString(gi_332) + "-" + pw.datetime.DateTimeToString(gi_336));
}

int pw.datetime.BrokerTime(int ai_0) {
   return (ai_0 - gi_328 + gi_344);
}

int pw.datetime.ChoiceTime(int ai_0) {
   if (pw.datetime.ShowAsLocalTimes) return (ai_0);
   return (pw.datetime.BrokerTime(ai_0));
}

string pw.datetime.DateTimeToString(int ai_0) {
   return (pw.datetime.StringFromDay(TimeDayOfWeek(ai_0)) + " " + TimeToStr(ai_0, TIME_DATE|TIME_MINUTES|TIME_SECONDS));
}

int pw.datetime.DayFromString(string as_0) {
   if (as_0 == "Mon") return (1);
   if (as_0 == "Tue") return (2);
   if (as_0 == "Wed") return (3);
   if (as_0 == "Thu") return (4);
   if (as_0 == "Fri") return (5);
   if (as_0 == "Sat") return (6);
   if (as_0 == "Sun") return (0);
   return (1);
}

int pw.datetime.GetBrokerLocalDiff() {
   return (g_datetime_340 - pw.datetime.BrokerTime(g_datetime_324));
}

int pw.datetime.GetBrokerUTCOffset() {
   int li_ret_0 = 3600 * pw.datetime.BrokerTimeZone;
   return (li_ret_0);
}

int pw.datetime.SecondsDiff(int ai_0, int ai_4) {
   int li_8 = (ai_4 - ai_0) / 2;
   int li_12 = gi_348;
   int li_16 = gi_352;
   int li_20 = ai_4 - li_8;
   while (li_20 < li_12) {
      li_16 -= 604800;
      li_12 -= 604800;
   }
   for (li_20 = ai_0 + li_8; li_20 > li_16; li_20 -= 86400) {
   }
   li_20 -= li_8;
   return (ai_0 - li_20);
}

string pw.datetime.StringFromDay(int ai_0) {
   if (ai_0 == 1) return ("Mon");
   if (ai_0 == 2) return ("Tue");
   if (ai_0 == 3) return ("Wed");
   if (ai_0 == 4) return ("Thu");
   if (ai_0 == 5) return ("Fri");
   if (ai_0 == 6) return ("Sat");
   if (ai_0 == 0) return ("Sun");
   return ("Mon");
}

int pw.datetime.TimeUTC() {
   int li_0 = GetTimeZoneInformation(gia_312);
   if (li_0 == 1) li_0 = 3600;
   else li_0 = 0;
   return (TimeLocal() + li_0 + 60 * (gia_312[0] + gia_312[42]));
}

void pw.performance.Init(int ai_0) {
   switch (ai_0) {
   case 0:
      g_datetime_392 = TimeLocal();
      break;
   case 1:
      g_datetime_404 = TimeLocal();
      gi_408++;
   }
   if (IsDllsAllowed()) pw.performance.ResetTimer();
}

double pw.performance.Update(int ai_0) {
   double ld_ret_4 = pw.performance.ReadTimer();
   switch (ai_0) {
   case 0:
      gd_384 = ld_ret_4;
      break;
   case 1:
      gd_376 = ld_ret_4;
      if (gi_408 == 1) gd_368 = gd_376;
      else
         if (gd_376 > gd_396) gd_396 = gd_376;
   }
   return (ld_ret_4);
}

string pw.performance.ToString() {
   return ("   init(): " + TimeToStr(g_datetime_392, TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " (" + DoubleToStr(gd_384, 3) + "msec), " 
   + "\n   start(1): " + DoubleToStr(gd_368, 3) + "msec, " + "start(" + gi_408 + "): " + TimeToStr(g_datetime_404, TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " (" + DoubleToStr(gd_376, 3) + "msec), Max: " + DoubleToStr(gd_396, 3) + "msec");
}

double pw.performance.GetElapsedTime(int aia_0[]) {
   int lia_4[1];
   int lia_8[1];
   QueryPerformanceFrequency(lia_8);
   QueryPerformanceCounter(lia_4);
   if (lia_8[0] == 0) return (0);
   return (1000.0 * (1.0 * (lia_4[0] - aia_0[0]) / (1.0 * lia_8[0])));
}

double pw.performance.ReadTimer() {
   return (pw.performance.GetElapsedTime(gia_364));
}

void pw.performance.ResetTimer() {
   QueryPerformanceCounter(gia_364);
}

int pw.dash.Init() {
   gd_508 = pw.system.PointsPerPip();
   if (pw.dash.MAType == "COMPASS") g_ma_method_520 = -1;
   else g_ma_method_520 = pw.system.MAFromString(pw.dash.MAType);
   return (0);
}

int pw.hours.Init() {
   gd_1308 = pw.system.PointsPerPip();
   int li_0 = 0;
   if (pw.hours.G01On) li_0++;
   if (pw.hours.G02On) li_0++;
   if (pw.hours.G03On) li_0++;
   if (pw.hours.G04On) li_0++;
   if (pw.hours.G05On) li_0++;
   if (pw.hours.G06On) li_0++;
   if (pw.hours.G07On) li_0++;
   if (pw.hours.G08On) li_0++;
   if (pw.hours.G09On) li_0++;
   if (pw.hours.G10On) li_0++;
   ArrayResize(gia_1200, li_0);
   ArrayResize(gba_1204, li_0);
   ArrayResize(gia_1208, li_0);
   ArrayResize(gsa_1212, li_0);
   ArrayResize(gia_1216, li_0);
   ArrayResize(gia_1220, li_0);
   ArrayResize(gia_1224, li_0);
   ArrayResize(gba_1232, li_0);
   ArrayResize(gia_1236, li_0 + 1);
   ArrayResize(gda_1240, li_0 + 1);
   gi_1196 = li_0;
   int l_index_4 = 0;
   if (pw.hours.G01On) {
      gia_1200[l_index_4] = 1;
      gba_1204[l_index_4] = pw.hours.G01LinesOn;
      gia_1208[l_index_4] = pw.hours.G01Color;
      gsa_1212[l_index_4] = pw.hours.G01Label;
      gia_1216[l_index_4] = pw.hours.G01GMT;
      gia_1220[l_index_4] = pw.hours.G01OpenHR;
      gia_1224[l_index_4] = pw.hours.G01CloseHR;
      l_index_4++;
   }
   if (pw.hours.G02On) {
      gia_1200[l_index_4] = 2;
      gba_1204[l_index_4] = pw.hours.G02LinesOn;
      gia_1208[l_index_4] = pw.hours.G02Color;
      gsa_1212[l_index_4] = pw.hours.G02Label;
      gia_1216[l_index_4] = pw.hours.G02GMT;
      gia_1220[l_index_4] = pw.hours.G02OpenHR;
      gia_1224[l_index_4] = pw.hours.G02CloseHR;
      l_index_4++;
   }
   if (pw.hours.G03On) {
      gia_1200[l_index_4] = 3;
      gba_1204[l_index_4] = pw.hours.G03LinesOn;
      gia_1208[l_index_4] = pw.hours.G03Color;
      gsa_1212[l_index_4] = pw.hours.G03Label;
      gia_1216[l_index_4] = pw.hours.G03GMT;
      gia_1220[l_index_4] = pw.hours.G03OpenHR;
      gia_1224[l_index_4] = pw.hours.G03CloseHR;
      l_index_4++;
   }
   if (pw.hours.G04On) {
      gia_1200[l_index_4] = 4;
      gba_1204[l_index_4] = pw.hours.G04LinesOn;
      gia_1208[l_index_4] = pw.hours.G04Color;
      gsa_1212[l_index_4] = pw.hours.G04Label;
      gia_1216[l_index_4] = pw.hours.G04GMT;
      gia_1220[l_index_4] = pw.hours.G04OpenHR;
      gia_1224[l_index_4] = pw.hours.G04CloseHR;
      l_index_4++;
   }
   if (pw.hours.G05On) {
      gia_1200[l_index_4] = 5;
      gba_1204[l_index_4] = pw.hours.G05LinesOn;
      gia_1208[l_index_4] = pw.hours.G05Color;
      gsa_1212[l_index_4] = pw.hours.G05Label;
      gia_1216[l_index_4] = pw.hours.G05GMT;
      gia_1220[l_index_4] = pw.hours.G05OpenHR;
      gia_1224[l_index_4] = pw.hours.G05CloseHR;
      l_index_4++;
   }
   if (pw.hours.G06On) {
      gia_1200[l_index_4] = 6;
      gba_1204[l_index_4] = pw.hours.G06LinesOn;
      gia_1208[l_index_4] = pw.hours.G06Color;
      gsa_1212[l_index_4] = pw.hours.G06Label;
      gia_1216[l_index_4] = pw.hours.G06GMT;
      gia_1220[l_index_4] = pw.hours.G06OpenHR;
      gia_1224[l_index_4] = pw.hours.G06CloseHR;
      l_index_4++;
   }
   if (pw.hours.G07On) {
      gia_1200[l_index_4] = 7;
      gba_1204[l_index_4] = pw.hours.G07LinesOn;
      gia_1208[l_index_4] = pw.hours.G07Color;
      gsa_1212[l_index_4] = pw.hours.G07Label;
      gia_1216[l_index_4] = pw.hours.G07GMT;
      gia_1220[l_index_4] = pw.hours.G07OpenHR;
      gia_1224[l_index_4] = pw.hours.G07CloseHR;
      l_index_4++;
   }
   if (pw.hours.G08On) {
      gia_1200[l_index_4] = 8;
      gba_1204[l_index_4] = pw.hours.G08LinesOn;
      gia_1208[l_index_4] = pw.hours.G08Color;
      gsa_1212[l_index_4] = pw.hours.G08Label;
      gia_1216[l_index_4] = pw.hours.G08GMT;
      gia_1220[l_index_4] = pw.hours.G08OpenHR;
      gia_1224[l_index_4] = pw.hours.G08CloseHR;
      l_index_4++;
   }
   if (pw.hours.G09On) {
      gia_1200[l_index_4] = 9;
      gba_1204[l_index_4] = pw.hours.G09LinesOn;
      gia_1208[l_index_4] = pw.hours.G09Color;
      gsa_1212[l_index_4] = pw.hours.G09Label;
      gia_1216[l_index_4] = pw.hours.G09GMT;
      gia_1220[l_index_4] = pw.hours.G09OpenHR;
      gia_1224[l_index_4] = pw.hours.G09CloseHR;
      l_index_4++;
   }
   if (pw.hours.G10On) {
      gia_1200[l_index_4] = 10;
      gba_1204[l_index_4] = pw.hours.G10LinesOn;
      gia_1208[l_index_4] = pw.hours.G10Color;
      gsa_1212[l_index_4] = pw.hours.G10Label;
      gia_1216[l_index_4] = pw.hours.G10GMT;
      gia_1220[l_index_4] = pw.hours.G10OpenHR;
      gia_1224[l_index_4] = pw.hours.G10CloseHR;
      l_index_4++;
   }
   pw.hours.UpdateDayOpenClose(1);
   return (0);
}

void pw.hours.Update() {
   gs_1316 = "";
   string ls_0 = "";
   int li_8 = pw.hours.UpdateDayOpenClose();
   for (int l_index_12 = 0; l_index_12 < gi_1196; l_index_12++) {
      gia_1236[l_index_12][0] = gi_356 + 3600 * gia_1216[l_index_12];
      gia_1236[l_index_12][1] = pw.hours.MakeLaterTime(li_8 + 3600 * (gia_1220[l_index_12] - gia_1216[l_index_12]) + gi_328, gi_1244);
      gia_1236[l_index_12][2] = pw.hours.MakeEarlierTime(li_8 + 3600 * (gia_1224[l_index_12] - gia_1216[l_index_12]) + gi_328, gi_1248);
      gia_1236[l_index_12][3] = pw.hours.MakeLaterTime(gia_1236[l_index_12][1] - 86400, gi_1252);
      gia_1236[l_index_12][4] = pw.hours.MakeEarlierTime(gia_1236[l_index_12][2] - 86400, gi_1256);
      ls_0 = "TodayL: Row \'" + gsa_1212[l_index_12] + "\' Open=" + pw.datetime.DateTimeToString(gia_1236[l_index_12][1]) + " RowClose=" + pw.datetime.DateTimeToString(gia_1236[l_index_12][2]);
      if (gia_1236[l_index_12][1] < gi_1244 || gia_1236[l_index_12][1] >= gi_1248 || gia_1236[l_index_12][2] <= gi_1244 || gia_1236[l_index_12][2] > gi_1248 || gia_1236[l_index_12][1] > gia_1236[l_index_12][2]) Print("OPEN/CLOSE Hours Bad: " + ls_0);
      gs_1316 = gs_1316 
      + "\n   " + ls_0;
      ls_0 = "YesterdayL: Row \'" + gsa_1212[l_index_12] + "\' Open=" + pw.datetime.DateTimeToString(gia_1236[l_index_12][3]) + " RowClose=" + pw.datetime.DateTimeToString(gia_1236[l_index_12][4]);
      gs_1316 = gs_1316 
      + "\n   " + ls_0;
   }
   for (l_index_12 = 0; l_index_12 < gi_1196; l_index_12++) {
      gba_1232[l_index_12] = 0;
      if (gi_316 && (g_datetime_324 >= gia_1236[l_index_12][1] && g_datetime_324 < gia_1236[l_index_12][2])) gba_1232[l_index_12] = 1;
   }
   gia_1236[gi_1196][1] = gi_1244;
   gia_1236[gi_1196][2] = gi_1248;
   gia_1236[gi_1196][3] = gi_1252;
   gia_1236[gi_1196][4] = gi_1256;
   if (gi_184) pw.hours.UpdateATRs();
}

string pw.hours.ToString() {
   return ("   DayOpenB: " + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_1244)) + "-" + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_1248)) + ", YesterdayB: " +
      pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_1252)) + "-" + pw.datetime.DateTimeToString(pw.datetime.BrokerTime(gi_1256)) + ",\n   DayOpenL: " + pw.datetime.DateTimeToString(gi_1244) + "-" + pw.datetime.DateTimeToString(gi_1248) + ", YesterdayL: " + pw.datetime.DateTimeToString(gi_1252) + "-" + pw.datetime.DateTimeToString(gi_1256) + gs_1316);
}

int pw.hours.InitDimensions(int ai_0) {
   int li_4;
   int li_8;
   int li_12;
   int li_16;
   int li_20;
   int li_24;
   int li_28;
   int li_32;
   int li_36;
   int li_40;
   if (pw.hours.DashOn) {
      li_4 = 30;
      li_8 = 80;
      li_12 = 30;
      li_16 = 100;
      li_20 = 35;
      li_24 = 35;
      li_28 = 26;
      li_32 = 26;
      li_36 = 26;
      li_40 = 26;
      if (pw.hours.ColColorWidth != 0) li_4 = pw.hours.ColColorWidth;
      if (pw.hours.ColLabelWidth != 0) li_8 = pw.hours.ColLabelWidth;
      if (pw.hours.ColGMTWidth != 0) li_12 = pw.hours.ColGMTWidth;
      if (pw.hours.ColTimeWidth != 0) li_16 = pw.hours.ColTimeWidth;
      if (pw.hours.ColOpenWidth != 0) li_20 = pw.hours.ColOpenWidth;
      if (pw.hours.ColCloseWidth != 0) li_24 = pw.hours.ColCloseWidth;
      if (pw.hours.ColMonthWidth != 0) li_28 = pw.hours.ColMonthWidth;
      if (pw.hours.ColWeekWidth != 0) li_32 = pw.hours.ColWeekWidth;
      if (pw.hours.ColYesterdayWidth != 0) li_36 = pw.hours.ColYesterdayWidth;
      if (pw.hours.ColTodayWidth != 0) li_40 = pw.hours.ColTodayWidth;
      if (pw.hours.ColColorOn) {
         gi_1260 = ai_0;
         ai_0 += li_4;
      }
      if (pw.hours.ColLabelOn) {
         gi_1264 = ai_0;
         ai_0 += li_8;
      }
      if (pw.hours.ColGMTOn) {
         gi_1268 = ai_0;
         ai_0 += li_12;
      }
      if (pw.hours.ColTimeOn) {
         gi_1272 = ai_0;
         ai_0 += li_16;
      }
      if (pw.hours.ColOpenOn) {
         gi_1276 = ai_0;
         ai_0 += li_20;
      }
      if (pw.hours.ColCloseOn) {
         gi_1280 = ai_0;
         ai_0 += li_24;
      }
      if (pw.hours.ColMonthOn) {
         gi_1284 = ai_0;
         ai_0 += li_28;
      }
      if (pw.hours.ColWeekOn) {
         gi_1288 = ai_0;
         ai_0 += li_32;
      }
      if (pw.hours.ColYesterdayOn) {
         gi_1292 = ai_0;
         ai_0 += li_36;
      }
      if (pw.hours.ColTodayOn) {
         gi_1296 = ai_0;
         ai_0 += li_40;
      }
      gs_1300 = "";
      if (ai_0 != 0) for (int li_44 = (ai_0 - 0) / 16; li_44 >= 0; li_44--) gs_1300 = gs_1300 + "g";
   }
   return (ai_0);
}

int pw.hours.MakeEarlierTime(int ai_0, int ai_4) {
   while (ai_0 > ai_4) ai_0 -= 86400;
   while (ai_0 <= ai_4 - 86400) ai_0 += 86400;
   return (ai_0);
}

int pw.hours.MakeLaterTime(int ai_0, int ai_4) {
   while (ai_0 < ai_4) ai_0 += 86400;
   while (ai_0 > ai_4 + 86400) ai_0 -= 86400;
   return (ai_0);
}

void pw.hours.UpdateATR(int ai_0, int ai_4, int ai_8, int ai_12) {
   int l_shift_16;
   int l_shift_20;
   int li_24;
   if (pw.datetime.BrokerTime(ai_8) > g_datetime_340) {
      gda_1240[ai_0][ai_4][1] = 0;
      gda_1240[ai_0][ai_4][0] = 0;
   } else {
      l_shift_16 = iBarShift(NULL, PERIOD_H1, pw.datetime.BrokerTime(ai_8));
      l_shift_20 = iBarShift(NULL, PERIOD_H1, pw.datetime.BrokerTime(ai_12));
      if (l_shift_16 == -1) return;
      if (l_shift_20 == -1 && g_datetime_340 < pw.datetime.BrokerTime(ai_12)) l_shift_20 = 0;
      if (l_shift_20 == -1) return;
      li_24 = l_shift_16 - l_shift_20;
      if (li_24 < WHOLE_ARRAY) return;
      if (li_24 == WHOLE_ARRAY) {
         gda_1240[ai_0][ai_4][1] = iLow(NULL, PERIOD_H1, l_shift_16);
         gda_1240[ai_0][ai_4][0] = iHigh(NULL, PERIOD_H1, l_shift_16);
      } else {
         gda_1240[ai_0][ai_4][1] = iLow(NULL, PERIOD_H1, iLowest(NULL, PERIOD_H1, MODE_LOW, li_24, l_shift_20));
         gda_1240[ai_0][ai_4][0] = iHigh(NULL, PERIOD_H1, iHighest(NULL, PERIOD_H1, MODE_HIGH, li_24, l_shift_20));
      }
   }
   gda_1240[ai_0][ai_4][2] = gda_1240[ai_0][ai_4][0] - gda_1240[ai_0][ai_4][1];
}

void pw.hours.UpdateATRs() {
   int li_0;
   int li_4;
   int lia_8[];
   int lia_12[];
   double lda_16[];
   ArrayResize(lia_8, gi_1196 + 1);
   ArrayResize(lia_12, gi_1196 + 1);
   ArrayResize(lda_16, gi_1196 + 1);
   for (int l_index_20 = 0; l_index_20 <= gi_1196; l_index_20++) {
      pw.hours.UpdateATR(l_index_20, 0, gia_1236[l_index_20][1], gia_1236[l_index_20][2]);
      pw.hours.UpdateATR(l_index_20, 1, gia_1236[l_index_20][3], gia_1236[l_index_20][4]);
      lda_16[l_index_20] = gda_1240[l_index_20][1][2];
      lia_8[l_index_20] = gia_1236[l_index_20][3];
      lia_12[l_index_20] = gia_1236[l_index_20][4];
   }
   while (li_0 < 30) {
      li_0++;
      for (l_index_20 = 0; l_index_20 <= gi_1196; l_index_20++) {
         lia_8[l_index_20] = lia_8[l_index_20] - 86400;
         lia_12[l_index_20] = lia_12[l_index_20] - 86400;
      }
      li_4 = pw.datetime.SecondsDiff(lia_8[gi_1196], lia_12[gi_1196]);
      for (l_index_20 = 0; l_index_20 <= gi_1196; l_index_20++) {
         lia_8[l_index_20] = lia_8[l_index_20] - li_4;
         lia_12[l_index_20] = lia_12[l_index_20] - li_4;
         pw.hours.UpdateATR(l_index_20, 3, lia_8[l_index_20], lia_12[l_index_20]);
         lda_16[l_index_20] += gda_1240[l_index_20][3][2];
         if (li_0 == 5) gda_1240[l_index_20][2][2] = lda_16[l_index_20] / li_0;
         if (li_0 == 30) gda_1240[l_index_20][3][2] = lda_16[l_index_20] / li_0;
      }
   }
}

int pw.hours.UpdateDayOpenClose(bool ai_0 = FALSE) {
   int li_ret_4 = gi_356 - gi_356 % 86400;
   gi_1244 = pw.hours.MakeEarlierTime(li_ret_4 + 3600 * (gia_1220[0] - gia_1216[0]) + gi_328, g_datetime_324);
   gi_1248 = pw.hours.MakeLaterTime(li_ret_4 + 3600 * (gia_1224[gi_1196 - 1] - (gia_1216[gi_1196 - 1])) + gi_328, g_datetime_324);
   if (ai_0 && gi_1244 != gi_1248 - 86400) {
      Print("Invalid size of a day. The difference between first row \'open\' and the last row \'close\' must be exactly 24 hrs.");
      MessageBoxA(0, "pipware dashboard settings for market open/close hours are not valid!\n\n" + "When your settings are converted to GMT, day open=\'" + TimeHour(gi_1244) + "\', day close=\'" + TimeHour(gi_1248) + "\'\n\n" + "Because we are calculating the \'Average Daily Range\' (ADR), the hour difference between first row \'open\' and the last row \'close\' must be exactly 24 hrs.", "Invalid pipware Dashboard Settings", 48);
   }
   int li_8 = pw.datetime.SecondsDiff(gi_1244, gi_1248);
   gi_1244 -= li_8;
   gi_1248 -= li_8;
   gi_1252 = gi_1244 - 86400;
   gi_1256 = gi_1248 - 86400;
   li_8 = pw.datetime.SecondsDiff(gi_1252, gi_1256);
   gi_1252 -= li_8;
   gi_1256 -= li_8;
   return (li_ret_4);
}

int pw.fractals.Init() {
   gd_1628 = pw.system.PointsPerPip();
   int li_0 = 9;
   gi_1624 = li_0;
   ArrayResize(gda_1572, li_0);
   ArrayResize(gda_1576, li_0);
   ArrayResize(gda_1580, li_0);
   ArrayResize(gda_1584, li_0);
   ArrayResize(gda_1588, li_0);
   ArrayResize(gda_1592, li_0);
   ArrayResize(gda_1596, li_0);
   ArrayResize(gda_1600, li_0);
   ArrayResize(gda_1604, li_0);
   ArrayResize(gia_1608, li_0);
   ArrayResize(gia_1612, li_0);
   ArrayResize(gia_1616, li_0);
   ArrayResize(gia_1620, li_0);
   li_0 = 0;
   gia_1620[li_0] = 1;
   li_0++;
   gia_1620[li_0] = 5;
   li_0++;
   gia_1620[li_0] = 15;
   li_0++;
   gia_1620[li_0] = 30;
   li_0++;
   gia_1620[li_0] = 60;
   li_0++;
   gia_1620[li_0] = 240;
   li_0++;
   gia_1620[li_0] = 1440;
   li_0++;
   gia_1620[li_0] = 10080;
   li_0++;
   gia_1620[li_0] = 43200;
   li_0++;
   for (int l_index_4 = 0; l_index_4 < gi_1624; l_index_4++) gda_1596[l_index_4] = 0.3 * iATR(Symbol(), gia_1620[l_index_4], 60, 0);
   pw.fractals.InitBuffers();
   return (0);
}

void pw.fractals.Update(string as_0) {
   int li_8 = pw.system.GetShift(1000);
   pw.fractals.UpdateSRArrays(as_0, li_8);
   pw.fractals.UpdateBuffers(as_0, li_8);
   if (pw.fractals.AlertsOn && gi_316) pw.fractals.UpdateAlerts();
}

string pw.fractals.ToString() {
   string ls_ret_0 = "";
   for (int l_index_8 = 0; l_index_8 < gi_1624; l_index_8++) {
      ls_ret_0 = ls_ret_0 
      + "\n   " + pw.system.PeriodToString(gia_1620[l_index_8]) + ", Offset:" + DoubleToStr(gda_1596[l_index_8], Digits) + ", R:" + DoubleToStr(gda_1600[l_index_8], Digits) + ", S:" + DoubleToStr(gda_1604[l_index_8], Digits) + ", Trend:" + DoubleToStr(gia_1608[l_index_8], 0) + ", Arrow:" + pw.datetime.DateTimeToString(gia_1612[l_index_8]) + ", Alert:" + pw.datetime.DateTimeToString(gia_1616[l_index_8]);
   }
   return (ls_ret_0);
}

void pw.fractals.InitBuffers() {
   for (int li_0 = pw.system.GetShift(1000); li_0 >= 0; li_0--) {
      gda_1548[li_0] = EMPTY_VALUE;
      gda_1552[li_0] = EMPTY_VALUE;
      gda_1556[li_0] = EMPTY_VALUE;
      gda_1560[li_0] = EMPTY_VALUE;
      gda_1564[li_0] = EMPTY_VALUE;
      gda_1568[li_0] = EMPTY_VALUE;
      for (int l_index_4 = 0; l_index_4 < gi_1624; l_index_4++) {
         gda_1572[l_index_4][li_0] = EMPTY_VALUE;
         gda_1580[l_index_4][li_0] = EMPTY_VALUE;
         gda_1584[l_index_4][li_0] = EMPTY_VALUE;
         gda_1588[l_index_4][li_0] = EMPTY_VALUE;
         gda_1592[l_index_4][li_0] = EMPTY_VALUE;
      }
   }
}

int pw.fractals.InitDimensions(int ai_0, bool ai_4) {
   int li_8;
   int li_12;
   int li_16;
   int li_20;
   gi_1636 = ai_0;
   int li_24 = 0;
   if (ai_4) li_24 = 10;
   ai_0 += li_24;
   if (pw.fractals.DashOn) {
      li_8 = 40;
      li_12 = 18;
      li_16 = 25;
      li_20 = 25;
      if (pw.fractals.ColTimeFrameWidth != 0) li_8 = pw.fractals.ColTimeFrameWidth;
      if (pw.fractals.ColArrowWidth != 0) li_12 = pw.fractals.ColArrowWidth;
      if (pw.fractals.ColBarCountWidth != 0) li_16 = pw.fractals.ColBarCountWidth;
      if (pw.fractals.ColPipsWidth != 0) li_20 = pw.fractals.ColPipsWidth;
      if (pw.fractals.ColArrowOn) {
         gi_1644 = ai_0;
         ai_0 += li_12;
      }
      if (pw.fractals.ColTimeFrameOn) {
         gi_1640 = ai_0;
         ai_0 += li_8;
      }
      if (pw.fractals.ColBarCountOn) {
         gi_1648 = ai_0;
         ai_0 += li_16;
      }
      if (pw.fractals.ColPipsOn) {
         gi_1652 = ai_0;
         ai_0 += li_20;
      }
      gs_1656 = "";
      if (ai_0 != gi_1636 + li_24) for (int li_28 = (ai_0 - gi_1636) / 16; li_28 >= 0; li_28--) gs_1656 = gs_1656 + "g";
   }
   return (ai_0);
}

int pw.fractals.BarCount(int ai_0) {
   for (int l_count_4 = 0; l_count_4 < 1000; l_count_4++) {
      if (gia_1608[ai_0] == 0 && gda_1588[ai_0][l_count_4] != EMPTY_VALUE) return (l_count_4);
      if (gia_1608[ai_0] == 1 && gda_1592[ai_0][l_count_4] != EMPTY_VALUE) return (l_count_4);
   }
   return (0);
}

bool pw.fractals.IsFractal(string a_symbol_0, int a_timeframe_8, int ai_12, int ai_16) {
   if (ai_12 < 2) return (FALSE);
   if (ai_12 > iBars(a_symbol_0, a_timeframe_8) - 3) return (FALSE);
   if (ai_16 == 0) {
      if (iHigh(a_symbol_0, a_timeframe_8, ai_12 - 2) < iHigh(a_symbol_0, a_timeframe_8, ai_12) && iHigh(a_symbol_0, a_timeframe_8, ai_12 - 1) < iHigh(a_symbol_0, a_timeframe_8, ai_12) &&
         iHigh(a_symbol_0, a_timeframe_8, ai_12 + 1) <= iHigh(a_symbol_0, a_timeframe_8, ai_12) && iHigh(a_symbol_0, a_timeframe_8, ai_12 + 2) <= iHigh(a_symbol_0, a_timeframe_8, ai_12)) return (TRUE);
   }
   if (ai_16 == 1) {
      if (iLow(a_symbol_0, a_timeframe_8, ai_12 - 2) > iLow(a_symbol_0, a_timeframe_8, ai_12) && iLow(a_symbol_0, a_timeframe_8, ai_12 - 1) > iLow(a_symbol_0, a_timeframe_8, ai_12) &&
         iLow(a_symbol_0, a_timeframe_8, ai_12 + 1) >= iLow(a_symbol_0, a_timeframe_8, ai_12) && iLow(a_symbol_0, a_timeframe_8, ai_12 + 2) >= iLow(a_symbol_0, a_timeframe_8, ai_12)) return (TRUE);
   }
   return (FALSE);
}

double pw.fractals.LastFractal(string a_symbol_0, int ai_8) {
   double l_ifractals_12;
   int l_bars_20 = Bars;
   for (int li_24 = 0; li_24 < l_bars_20; li_24++) {
      l_ifractals_12 = iFractals(a_symbol_0, 0, ai_8, li_24);
      if (l_ifractals_12 != 0.0) {
         switch (ai_8) {
         case MODE_LOWER:
            return (iLow(a_symbol_0, 0, li_24));
         case MODE_UPPER:
            return (iHigh(a_symbol_0, 0, li_24));
         }
         return (0);
      }
   }
   return (0);
}

void pw.fractals.UpdateAlerts() {
   string ls_0 = "";
   for (int l_index_8 = 0; l_index_8 < gi_1624; l_index_8++) {
      if (iTime(Symbol(), gia_1620[l_index_8], 0) == gia_1612[l_index_8] && gia_1616[l_index_8] != gia_1612[l_index_8]) {
         gia_1616[l_index_8] = gia_1612[l_index_8];
         if ((l_index_8 == 0 && pw.fractals.M1AlertOn) || (l_index_8 == 1 && pw.fractals.M5AlertOn) || (l_index_8 == 2 && pw.fractals.M15AlertOn) || (l_index_8 == 3 && pw.fractals.M30AlertOn) ||
            (l_index_8 == 4 && pw.fractals.H1AlertOn) || (l_index_8 == 5 && pw.fractals.H4AlertOn) || (l_index_8 == 6 && pw.fractals.D1AlertOn) || (l_index_8 == 7 && pw.fractals.W1AlertOn) ||
            (l_index_8 == 8 && pw.fractals.MN1AlertOn)) ls_0 = ls_0 + " " + pw.system.PeriodToString(gia_1620[l_index_8]);
      }
   }
   if (ls_0 != "" && pw.fractals.AlertsOn) Alert(Symbol() + " Reversal Signal: " + ls_0);
}

void pw.fractals.UpdateArrows(string a_symbol_0, int ai_8, int ai_12) {
   gda_1588[ai_8][ai_12] = EMPTY_VALUE;
   gda_1592[ai_8][ai_12] = EMPTY_VALUE;
   if (gia_1608[ai_8] == 1) {
      if (iHigh(a_symbol_0, gia_1620[ai_8], ai_12) > gda_1600[ai_8]) {
         gia_1608[ai_8] = 0;
         gia_1612[ai_8] = iTime(a_symbol_0, gia_1620[ai_8], ai_12);
         gda_1588[ai_8][ai_12] = iLow(a_symbol_0, gia_1620[ai_8], ai_12) - gda_1596[ai_8];
      }
   }
   if (gia_1608[ai_8] == 0) {
      if (iLow(a_symbol_0, gia_1620[ai_8], ai_12) < gda_1604[ai_8]) {
         gia_1608[ai_8] = 1;
         gia_1612[ai_8] = iTime(a_symbol_0, gia_1620[ai_8], ai_12);
         gda_1592[ai_8][ai_12] = iHigh(a_symbol_0, gia_1620[ai_8], ai_12) + gda_1596[ai_8];
      }
   }
   if (gda_1588[ai_8][ai_12] == EMPTY_VALUE && gda_1592[ai_8][ai_12] == EMPTY_VALUE) {
      if (gia_1612[ai_8] == iTime(a_symbol_0, gia_1620[ai_8], ai_12)) {
         if (gia_1608[ai_8] == 1) gda_1592[ai_8][ai_12] = iHigh(a_symbol_0, gia_1620[ai_8], ai_12) + gda_1596[ai_8];
         if (gia_1608[ai_8] == 0) gda_1588[ai_8][ai_12] = iLow(a_symbol_0, gia_1620[ai_8], ai_12) - gda_1596[ai_8];
      }
   }
}

void pw.fractals.UpdateBuffers(string as_0, int ai_8) {
   for (int li_12 = ai_8; li_12 >= 0; li_12--) {
      for (int l_index_16 = 0; l_index_16 < gi_1624; l_index_16++) {
         pw.fractals.UpdateTimeFrame(as_0, l_index_16, li_12);
         if (Period() == gia_1620[l_index_16]) {
            if (pw.fractals.FractalsOn) gda_1548[li_12 + 3] = gda_1572[l_index_16][li_12 + 3];
            if (pw.fractals.FractalsOn) gda_1552[li_12 + 3] = gda_1576[l_index_16][li_12 + 3];
            if (pw.fractals.DotsOn) gda_1556[li_12 + 2] = gda_1580[l_index_16][li_12 + 2];
            if (pw.fractals.DotsOn) gda_1560[li_12 + 2] = gda_1584[l_index_16][li_12 + 2];
            if (pw.fractals.DotsOn) gda_1556[li_12] = gda_1580[l_index_16][li_12];
            if (pw.fractals.DotsOn) gda_1560[li_12] = gda_1584[l_index_16][li_12];
            if (pw.fractals.ArrowsOn) gda_1564[li_12] = gda_1588[l_index_16][li_12];
            if (pw.fractals.ArrowsOn) gda_1568[li_12] = gda_1592[l_index_16][li_12];
         }
         if (ai_8 > 50 && li_12 == 0) gia_1616[l_index_16] = gia_1612[l_index_16];
      }
   }
}

void pw.fractals.UpdateResistance(string a_symbol_0, int ai_8, int ai_12) {
   if (pw.fractals.IsFractal(a_symbol_0, gia_1620[ai_8], ai_12 + 3, 0)) {
      gda_1600[ai_8] = iHigh(a_symbol_0, gia_1620[ai_8], ai_12 + 3);
      gda_1572[ai_8][ai_12 + 3] = gda_1600[ai_8];
      gda_1580[ai_8][ai_12 + 1] = gda_1600[ai_8];
   } else gda_1572[ai_8][ai_12 + 3] = EMPTY_VALUE;
   gda_1580[ai_8][ai_12] = gda_1600[ai_8];
}

void pw.fractals.UpdateSRArrays(string a_symbol_0, int ai_8) {
   for (int l_index_12 = 0; l_index_12 < gi_1624; l_index_12++) {
      if (gda_1604[l_index_12] == 0.0) gda_1604[l_index_12] = iLow(a_symbol_0, gia_1620[l_index_12], ai_8);
      if (gda_1600[l_index_12] == 0.0) gda_1600[l_index_12] = iHigh(a_symbol_0, gia_1620[l_index_12], ai_8);
   }
}

void pw.fractals.UpdateSupport(string a_symbol_0, int ai_8, int ai_12) {
   if (pw.fractals.IsFractal(a_symbol_0, gia_1620[ai_8], ai_12 + 3, 1)) {
      gda_1604[ai_8] = iLow(a_symbol_0, gia_1620[ai_8], ai_12 + 3);
      gda_1576[ai_8][ai_12 + 3] = gda_1604[ai_8];
      gda_1584[ai_8][ai_12 + 1] = gda_1604[ai_8];
   } else gda_1576[ai_8][ai_12 + 3] = EMPTY_VALUE;
   gda_1584[ai_8][ai_12] = gda_1604[ai_8];
}

void pw.fractals.UpdateTimeFrame(string as_0, int ai_8, int ai_12) {
   pw.fractals.UpdateResistance(as_0, ai_8, ai_12);
   pw.fractals.UpdateSupport(as_0, ai_8, ai_12);
   pw.fractals.UpdateArrows(as_0, ai_8, ai_12);
}

int pw.thv.trix.Init() {
   double ld_0;
   gia_1768[0] = gi_1672;
   gia_1768[1] = gi_1676;
   for (int l_index_8 = 0; l_index_8 <= 1; l_index_8++) {
      ld_0 = (gia_1768[l_index_8] - 1) / 2.0 + 1.0;
      gda_1696[l_index_8][0] = 2 / (ld_0 + 1.0);
      gda_1696[l_index_8][1] = 1 - gda_1696[l_index_8][0];
   }
   gd_1704 = gd_1680 * gd_1680;
   gd_1712 = gd_1704 * gd_1680;
   gd_1720 = -1.0 * gd_1712;
   gd_1728 = 3.0 * (gd_1704 + gd_1712);
   gd_1736 = -3.0 * (2.0 * gd_1704 + gd_1680 + gd_1712);
   gd_1744 = 3.0 * gd_1680 + 1.0 + gd_1712 + 3.0 * gd_1704;
   gi_1668 = TRUE;
   return (0);
}

double pw.thv.trix.Update(int ai_0, string a_symbol_4, int a_timeframe_12, int ai_16) {
   if (!gi_1668) pw.thv.trix.Init();
   if (!pw.thv.trix.CalculatePrevious(ai_0, a_symbol_4, a_timeframe_12, ai_16)) return (EMPTY_VALUE);
   gda_1688[ai_0][0][0] = iClose(a_symbol_4, a_timeframe_12, ai_16);
   for (int li_20 = 1; li_20 <= 6; li_20++) gda_1688[ai_0][li_20][0] = pw.thv.trix.CalculateEMA(ai_0, gda_1688[ai_0][li_20 - 1][0], gda_1688[ai_0][li_20][1]);
   gda_1692[ai_0][0] = pw.thv.trix.Value(ai_0, 0);
   double ld_ret_24 = (gda_1692[ai_0][0] - gda_1692[ai_0][1]) / gda_1692[ai_0][1];
   if (ai_16 > 0) pw.thv.trix.UpdatePrevious(ai_0, a_symbol_4, a_timeframe_12, ai_16);
   return (ld_ret_24);
}

double pw.thv.trix.CalculateEMA(int ai_0, double ad_4, double ad_12) {
   return (gda_1696[ai_0][0] * ad_4 + gda_1696[ai_0][1] * ad_12);
}

bool pw.thv.trix.CalculatePrevious(int ai_0, string a_symbol_4, int a_timeframe_12, int ai_16) {
   double lda_20[];
   int li_24 = iBars(a_symbol_4, a_timeframe_12) - 1;
   if (ai_16 + 1 > li_24) return (FALSE);
   int l_datetime_28 = iTime(a_symbol_4, a_timeframe_12, ai_16 + 1);
   if (a_symbol_4 == gsa_1752[ai_0] && a_timeframe_12 == gia_1756[ai_0]) {
      if (l_datetime_28 == gia_1760[ai_0]) return (TRUE);
      if (ai_16 + 2 > li_24) return (FALSE);
      l_datetime_28 = iTime(a_symbol_4, a_timeframe_12, ai_16 + 2);
      if (l_datetime_28 == gia_1760[ai_0]) {
         pw.thv.trix.UpdatePrevious(ai_0, a_symbol_4, a_timeframe_12, ai_16 + 1);
         return (TRUE);
      }
   }
   int li_32 = gia_1768[ai_0] + 40;
   ArrayResize(lda_20, li_32);
   int li_36 = ai_16 + li_32;
   if (li_36 > li_24) return (FALSE);
   lda_20[li_32 - 1] = iMA(a_symbol_4, a_timeframe_12, gia_1768[ai_0], 0, MODE_EMA, PRICE_CLOSE, li_36);
   for (int li_40 = 1; li_40 <= 6; li_40++) {
      for (li_36 = ai_16 + li_32 - 1; li_36 > ai_16; li_36--) {
         if (li_40 == 1) lda_20[li_36 - ai_16 - 1] = iClose(a_symbol_4, a_timeframe_12, li_36);
         lda_20[li_36 - ai_16 - 1] = pw.thv.trix.CalculateEMA(ai_0, lda_20[li_36 - ai_16 - 1], lda_20[li_36 - ai_16]);
      }
      gda_1688[ai_0][li_40][1] = lda_20[0];
   }
   gda_1692[ai_0][1] = pw.thv.trix.Value(ai_0, 1);
   return (TRUE);
}

void pw.thv.trix.UpdatePrevious(int ai_0, string a_symbol_4, int a_timeframe_12, int ai_16) {
   gda_1692[ai_0][1] = gda_1692[ai_0][0];
   for (int li_20 = 1; li_20 <= 6; li_20++) gda_1688[ai_0][li_20][1] = gda_1688[ai_0][li_20][0];
   gsa_1752[ai_0] = a_symbol_4;
   gia_1756[ai_0] = a_timeframe_12;
   gia_1760[ai_0] = iTime(a_symbol_4, a_timeframe_12, ai_16);
}

double pw.thv.trix.Value(int ai_0, int ai_4) {
   return (gd_1720 * gda_1688[ai_0][6][ai_4] + gd_1728 * gda_1688[ai_0][5][ai_4] + gd_1736 * gda_1688[ai_0][4][ai_4] + gd_1744 * gda_1688[ai_0][3][ai_4]);
}

int pw.thv.coral.Init(int ai_0 = 60) {
   g_period_1776 = ai_0;
   double ld_4 = (g_period_1776 - 1) / 2.0 + 1.0;
   gda_1796[0] = 2 / (ld_4 + 1.0);
   gda_1796[1] = 1 - gda_1796[0];
   gd_1804 = gd_1780 * gd_1780;
   gd_1812 = gd_1804 * gd_1780;
   gd_1820 = -1.0 * gd_1812;
   gd_1828 = 3.0 * (gd_1804 + gd_1812);
   gd_1836 = -3.0 * (2.0 * gd_1804 + gd_1780 + gd_1812);
   gd_1844 = 3.0 * gd_1780 + 1.0 + gd_1812 + 3.0 * gd_1804;
   g_symbol_1852 = "";
   g_timeframe_1860 = FALSE;
   g_datetime_1864 = 0;
   gi_1772 = TRUE;
   return (0);
}

double pw.thv.coral.Update(string a_symbol_0, int a_timeframe_8, int ai_12, int ai_16 = 60) {
   if (!gi_1772 || g_period_1776 != ai_16) pw.thv.coral.Init(ai_16);
   if (!pw.thv.coral.CalculatePrevious(a_symbol_0, a_timeframe_8, ai_12)) return (EMPTY_VALUE);
   gda_1788[0][0] = iClose(a_symbol_0, a_timeframe_8, ai_12);
   for (int li_20 = 1; li_20 <= 6; li_20++) gda_1788[li_20][0] = pw.thv.coral.CalculateEMA(gda_1788[li_20 - 1][0], gda_1788[li_20][1]);
   gda_1792[0] = pw.thv.coral.Value(0);
   if (ai_12 > 0) pw.thv.coral.UpdatePrevious(a_symbol_0, a_timeframe_8, ai_12);
   return (gda_1792[0]);
}

double pw.thv.coral.CalculateEMA(double ad_0, double ad_8) {
   return (gda_1796[0] * ad_0 + gda_1796[1] * ad_8);
}

bool pw.thv.coral.CalculatePrevious(string a_symbol_0, int a_timeframe_8, int ai_12) {
   double lda_16[];
   int li_20 = iBars(a_symbol_0, a_timeframe_8) - 1;
   if (ai_12 + 1 > li_20) return (FALSE);
   int l_datetime_24 = iTime(a_symbol_0, a_timeframe_8, ai_12 + 1);
   if (a_symbol_0 == g_symbol_1852 && a_timeframe_8 == g_timeframe_1860) {
      if (l_datetime_24 == g_datetime_1864) return (TRUE);
      if (ai_12 + 2 > li_20) return (FALSE);
      l_datetime_24 = iTime(a_symbol_0, a_timeframe_8, ai_12 + 2);
      if (l_datetime_24 == g_datetime_1864) {
         pw.thv.coral.UpdatePrevious(a_symbol_0, a_timeframe_8, ai_12 + 1);
         return (TRUE);
      }
   }
   int li_28 = g_period_1776 + 20;
   ArrayResize(lda_16, li_28);
   int li_32 = ai_12 + li_28;
   if (li_32 > li_20) return (FALSE);
   lda_16[li_28 - 1] = iMA(a_symbol_0, a_timeframe_8, g_period_1776, 0, MODE_EMA, PRICE_CLOSE, li_32);
   for (int li_36 = 1; li_36 <= 6; li_36++) {
      for (li_32 = ai_12 + li_28 - 1; li_32 > ai_12; li_32--) {
         if (li_36 == 1) lda_16[li_32 - ai_12 - 1] = iClose(a_symbol_0, a_timeframe_8, li_32);
         lda_16[li_32 - ai_12 - 1] = pw.thv.coral.CalculateEMA(lda_16[li_32 - ai_12 - 1], lda_16[li_32 - ai_12]);
      }
      gda_1788[li_36][1] = lda_16[0];
   }
   gda_1792[1] = pw.thv.coral.Value(1);
   return (TRUE);
}

void pw.thv.coral.UpdatePrevious(string a_symbol_0, int a_timeframe_8, int ai_12) {
   gda_1792[1] = gda_1792[0];
   for (int li_16 = 1; li_16 <= 6; li_16++) gda_1788[li_16][1] = gda_1788[li_16][0];
   g_symbol_1852 = a_symbol_0;
   g_timeframe_1860 = a_timeframe_8;
   g_datetime_1864 = iTime(a_symbol_0, a_timeframe_8, ai_12);
}

double pw.thv.coral.Value(int ai_0) {
   return (gd_1820 * gda_1788[6][ai_0] + gd_1828 * gda_1788[5][ai_0] + gd_1836 * gda_1788[4][ai_0] + gd_1844 * gda_1788[3][ai_0]);
}

int pw.thv.Init() {
   gd_2056 = pw.system.PointsPerPip();
   int li_0 = 0;
   if (pw.thv.M1RowOn) li_0++;
   if (pw.thv.M5RowOn) li_0++;
   if (pw.thv.M15RowOn) li_0++;
   if (pw.thv.M30RowOn) li_0++;
   if (pw.thv.H1RowOn) li_0++;
   if (pw.thv.H4RowOn) li_0++;
   if (pw.thv.D1RowOn) li_0++;
   if (pw.thv.W1RowOn) li_0++;
   if (pw.thv.MN1RowOn) li_0++;
   gi_2020 = li_0;
   ArrayResize(gia_2016, li_0);
   li_0 = 0;
   if (pw.thv.M1RowOn) {
      gia_2016[li_0] = 1;
      li_0++;
   }
   if (pw.thv.M5RowOn) {
      gia_2016[li_0] = 5;
      li_0++;
   }
   if (pw.thv.M15RowOn) {
      gia_2016[li_0] = 15;
      li_0++;
   }
   if (pw.thv.M30RowOn) {
      gia_2016[li_0] = 30;
      li_0++;
   }
   if (pw.thv.H1RowOn) {
      gia_2016[li_0] = 60;
      li_0++;
   }
   if (pw.thv.H4RowOn) {
      gia_2016[li_0] = 240;
      li_0++;
   }
   if (pw.thv.D1RowOn) {
      gia_2016[li_0] = 1440;
      li_0++;
   }
   if (pw.thv.W1RowOn) {
      gia_2016[li_0] = 10080;
      li_0++;
   }
   if (pw.thv.MN1RowOn) {
      gia_2016[li_0] = 43200;
      li_0++;
   }
   return (0);
}

int pw.thv.InitDimensions(int ai_0, bool ai_4) {
   int li_8;
   int li_12;
   int li_16;
   int li_20;
   int li_24;
   gi_2024 = ai_0;
   int li_28 = 0;
   if (ai_4) li_28 = 15;
   ai_0 += li_28;
   if (pw.thv.IndicatorOn) {
      li_8 = 20;
      li_12 = 15;
      li_16 = 15;
      li_20 = 15;
      li_24 = 20;
      if (pw.thv.ColTimeFrameWidth != 0) li_8 = pw.thv.ColTimeFrameWidth;
      if (pw.thv.ColCoralWidth != 0) li_12 = pw.thv.ColCoralWidth;
      if (pw.thv.ColCloudWidth != 0) li_16 = pw.thv.ColCloudWidth;
      if (pw.thv.ColSlowTrixWidth != 0) li_20 = pw.thv.ColSlowTrixWidth;
      if (pw.thv.ColFastTrixWidth != 0) li_24 = pw.thv.ColFastTrixWidth;
      if (pw.thv.ColCoralOn) {
         gi_2028 = ai_0;
         ai_0 += li_12;
      }
      if (pw.thv.ColCloudOn) {
         gi_2032 = ai_0;
         ai_0 += li_16;
      }
      if (pw.thv.ColSlowTrixOn) {
         gi_2036 = ai_0;
         ai_0 += li_20;
      }
      if (pw.thv.ColFastTrixOn) {
         gi_2040 = ai_0;
         ai_0 += li_24;
      }
      if (pw.thv.ColTimeFrameOn) {
         gi_2044 = ai_0;
         ai_0 += li_8;
      }
      gs_2048 = "";
      if (ai_0 != gi_2024 + li_28) for (int li_32 = (ai_0 - gi_2024) / 16; li_32 >= 0; li_32--) gs_2048 = gs_2048 + "g";
   }
   return (ai_0);
}

int pw.diagnostics.Init(string as_0 = "") {
   gs_2068 = as_0;
   return (0);
}

void pw.diagnostics.Update(string as_0 = "", bool ai_8 = TRUE) {
   if (ai_8) {
      gs_2068 = gs_2068 
      + "\n";
   }
   gs_2068 = gs_2068 + as_0;
}

string pw.diagnostics.ToString() {
   return (gs_2068);
}

void pw.drawing.Init(string as_0, int ai_8) {
   gs_2076 = as_0;
   gi_2084 = ai_8;
}

void pw.drawing.DeleteAll() {
   pw.drawing.DeleteByPrefix(gs_2076);
}

void pw.drawing.DeleteByPrefix(string as_0) {
   string lsa_8[];
   string l_name_12;
   int li_20;
   ArrayResize(lsa_8, ObjectsTotal());
   int l_str_len_24 = StringLen(as_0);
   for (int li_28 = 0; li_28 < ObjectsTotal(); li_28++) {
      l_name_12 = ObjectName(li_28);
      if (StringLen(l_name_12) > l_str_len_24 && StringSubstr(l_name_12, 0, l_str_len_24) == as_0) {
         lsa_8[li_20] = l_name_12;
         li_20++;
      }
   }
   for (li_28 = 0; li_28 < li_20; li_28++) ObjectDelete(lsa_8[li_28]);
}

void pw.drawing.MakeLabel(int a_corner_0, string as_4, string a_text_12, int a_x_20, int a_y_24, string a_fontname_28, int a_fontsize_36, color a_color_40, int a_window_44 = -1, bool a_bool_48 = FALSE) {
   if (a_window_44 == -1) a_window_44 = gi_2084;
   ObjectDelete(gs_2076 + as_4);
   ObjectCreate(gs_2076 + as_4, OBJ_LABEL, a_window_44, 0, 0, 0, 0);
   ObjectSetText(gs_2076 + as_4, a_text_12, a_fontsize_36, a_fontname_28);
   ObjectSet(gs_2076 + as_4, OBJPROP_CORNER, a_corner_0);
   ObjectSet(gs_2076 + as_4, OBJPROP_XDISTANCE, a_x_20);
   ObjectSet(gs_2076 + as_4, OBJPROP_YDISTANCE, a_y_24);
   ObjectSet(gs_2076 + as_4, OBJPROP_COLOR, a_color_40);
   ObjectSet(gs_2076 + as_4, OBJPROP_BACK, a_bool_48);
}

void pw.drawing.MakeTrendLine(string as_0, int a_datetime_8, int a_datetime_12, double a_price_16, color a_color_24, int a_style_28, int a_width_32, int a_window_36 = -1, bool a_bool_40 = TRUE) {
   if (a_window_36 == -1) a_window_36 = gi_2084;
   ObjectDelete(gs_2076 + as_0);
   ObjectCreate(gs_2076 + as_0, OBJ_TREND, a_window_36, a_datetime_8, a_price_16, a_datetime_12, a_price_16);
   ObjectSet(gs_2076 + as_0, OBJPROP_COLOR, a_color_24);
   ObjectSet(gs_2076 + as_0, OBJPROP_STYLE, a_style_28);
   ObjectSet(gs_2076 + as_0, OBJPROP_RAY, FALSE);
   ObjectSet(gs_2076 + as_0, OBJPROP_WIDTH, a_width_32);
   ObjectSet(gs_2076 + as_0, OBJPROP_BACK, a_bool_40);
}

void pw.drawing.SetColor(string as_0, color a_color_8) {
   ObjectSet(gs_2076 + as_0, OBJPROP_COLOR, a_color_8);
}

void pw.drawing.SetText(string as_0, string a_text_8) {
   ObjectSetText(gs_2076 + as_0, a_text_8);
}

string pw.text.StringPadDouble(double ad_0, int ai_8 = 0, int ai_12 = 3) {
   string l_dbl2str_16 = DoubleToStr(ad_0, ai_8);
   for (int li_24 = ai_12 - StringLen(l_dbl2str_16); li_24 > 0; li_24--) l_dbl2str_16 = " " + l_dbl2str_16;
   return (l_dbl2str_16);
}

int init() {
   InitBegin();
   g_symbol_2096 = Symbol();
   g_timeframe_2104 = Period();
   InitEnd();
   return (0);
}

int deinit() {
   DeinitBegin();
   Comment("");
   DeinitEnd();
   return (0);
}

int start() {
   if (!StartBegin()) return (0);
   g_bid_2108 = MarketInfo(g_symbol_2096, MODE_BID);
   g_point_2116 = MarketInfo(g_symbol_2096, MODE_POINT);
   Update();
   StartEnd();
   return (0);
}

void Update() {
   pw.hours.Update();
   pw.fractals.Update(Symbol());
   UpdateDisplay();
   UpdateHoursLines();
   if (pw.fractals.SRLinesOn) UpdateFractalLines();
}

void UpdateDisplay() {
   int li_0;
   pw.drawing.MakeLabel(0, "ROW_PIPWARE", gs_2088, pw.dash.X + 5, pw.dash.Y + 4 + gi_2172 << 4, "Arial Bold", 8, pw.system.TextColor, pw.dash.Window);
   double l_ask_4 = MarketInfo(g_symbol_2096, MODE_ASK);
   double l_bid_12 = MarketInfo(g_symbol_2096, MODE_BID);
   int l_digits_20 = MarketInfo(g_symbol_2096, MODE_DIGITS);
   double l_point_24 = MarketInfo(g_symbol_2096, MODE_POINT);
   double ld_32 = pw.system.SpreadPips();
   double ld_40 = pw.fractals.LastFractal(g_symbol_2096, MODE_LOWER);
   double ld_48 = pw.fractals.LastFractal(g_symbol_2096, MODE_UPPER);
   int li_56 = MathRound(pw.system.Pips(ld_40 - l_bid_12));
   int li_60 = MathRound(pw.system.Pips(ld_48 - l_bid_12));
   int li_64 = MathRound(pw.system.Pips(MathAbs(ld_48 - ld_40)));
   int li_68 = MathRound(pw.system.Pips(iOpen(Symbol(), PERIOD_H1, iBarShift(Symbol(), PERIOD_H1, pw.datetime.BrokerTime(gi_1244), FALSE)) - l_bid_12));
   if (g_ma_method_520 == -1) li_0 = MathRound(pw.system.Pips(pw.thv.coral.Update(Symbol(), PERIOD_M15, 0, 20) - l_bid_12));
   else li_0 = MathRound(pw.system.Pips(iMA(NULL, 0, pw.dash.MAPeriod, 0, g_ma_method_520, PRICE_CLOSE, 0) - l_bid_12));
   g_datetime_2132 = iTime(NULL, PERIOD_H1, 1);
   g_ilow_2136 = iLow(NULL, PERIOD_H1, 1);
   g_ihigh_2144 = iHigh(NULL, PERIOD_H1, 1);
   g_datetime_2152 = iTime(NULL, PERIOD_H4, 1);
   g_ilow_2156 = iLow(NULL, PERIOD_H4, 1);
   g_ihigh_2164 = iHigh(NULL, PERIOD_H4, 1);
   string ls_72 = DoubleToStr(l_bid_12, l_digits_20);
   if (g_symbol_2096 == "USDJPY") ls_72 = "  " + ls_72;
   if (!gi_184) {
      pw.drawing.SetText("PRICE", "HISTORY");
      pw.drawing.SetText("PRICE_POINT", "");
      pw.drawing.SetColor("PRICE", pw.system.WarningColor);
      pw.drawing.SetColor("SPREAD", pw.system.WarningColor);
      pw.drawing.SetText("SPREAD", " " + "79%");
      pw.drawing.SetText("LBL_SPREAD", "Bars");
      pw.drawing.SetColor("LBL_SPREAD", pw.system.WarningColor);
   } else {
      if (gi_316 && !gi_320) {
         if (gi_140) {
            pw.drawing.SetText("PRICE", ls_72);
            pw.drawing.SetText("PRICE_POINT", " ");
         } else {
            pw.drawing.SetText("PRICE", StringSubstr(ls_72, 0, StringLen(ls_72) - 1));
            pw.drawing.SetText("PRICE_POINT", StringSubstr(ls_72, StringLen(ls_72) - 1, 1));
         }
         if (g_bid_2124 == 0.0 || g_bid_2124 == l_bid_12) {
            pw.drawing.SetColor("PRICE", pw.system.TextColor);
            pw.drawing.SetColor("PRICE_POINT", pw.system.TextColor);
         } else {
            if (l_bid_12 > g_bid_2124) {
               pw.drawing.SetColor("PRICE", pw.system.BullColor);
               pw.drawing.SetColor("PRICE_POINT", pw.system.BullColor);
            } else {
               pw.drawing.SetColor("PRICE", pw.system.BearColor);
               pw.drawing.SetColor("PRICE_POINT", pw.system.BearColor);
            }
         }
         pw.drawing.SetText("LBL_SPREAD", "SP");
         pw.drawing.SetColor("LBL_SPREAD", pw.system.TextColor);
         pw.drawing.SetText("SPREAD", DoubleToStr(ld_32, 1));
         pw.drawing.SetColor("SPREAD", pw.system.TextColor);
      } else {
         if (gi_320) {
            pw.drawing.SetText("PRICE", "TIME ERR");
            pw.drawing.SetText("PRICE_POINT", "");
            pw.drawing.SetColor("PRICE", pw.system.WarningColor);
            pw.drawing.SetColor("SPREAD", pw.system.WarningColor);
            pw.drawing.SetText("SPREAD", DoubleToStr(gi_360, 0));
            pw.drawing.SetText("LBL_SPREAD", "Sec");
            pw.drawing.SetColor("LBL_SPREAD", pw.system.WarningColor);
         } else {
            pw.drawing.SetText("PRICE", "CLOSED");
            pw.drawing.SetText("PRICE_POINT", "");
            pw.drawing.SetColor("PRICE", pw.system.WarningColor);
            pw.drawing.SetColor("SPREAD", pw.system.TextColor);
            pw.drawing.SetText("SPREAD", "-.-");
            pw.drawing.SetText("LBL_SPREAD", "SP");
            pw.drawing.SetColor("LBL_SPREAD", pw.system.TextColor);
         }
      }
   }
   g_bid_2124 = l_bid_12;
   pw.drawing.SetText("PTO", pw.text.StringPadDouble(li_68));
   pw.drawing.SetText("PTMA", pw.text.StringPadDouble(li_0));
   pw.drawing.SetText("PLSW", pw.text.StringPadDouble(li_64));
   pw.drawing.SetText("PTFL", pw.text.StringPadDouble(li_56));
   pw.drawing.SetText("PTFH", pw.text.StringPadDouble(li_60));
   if (pw.hours.DashOn && gi_184) for (int l_count_80 = 0; l_count_80 <= gi_1196; l_count_80++) UpdateHoursRow(l_count_80);
   if (pw.fractals.DashOn) {
      UpdateFractalRow(0, 1);
      for (l_count_80 = 0; l_count_80 < gi_1624; l_count_80++) UpdateFractalRow(l_count_80);
   }
   if (pw.thv.IndicatorOn) for (l_count_80 = 0; l_count_80 < gi_2020; l_count_80++) UpdateTHVRow(l_count_80);
}

void UpdateFractalLines() {
   string ls_0;
   int li_8;
   int li_12;
   for (int l_index_16 = 0; l_index_16 < gi_1624; l_index_16++) {
      if ((l_index_16 == 0 && pw.fractals.M1SRLinesOn) || (l_index_16 == 1 && pw.fractals.M5SRLinesOn) || (l_index_16 == 2 && pw.fractals.M15SRLinesOn) || (l_index_16 == 3 &&
         pw.fractals.M30SRLinesOn) || (l_index_16 == 4 && pw.fractals.H1SRLinesOn) || (l_index_16 == 5 && pw.fractals.H4SRLinesOn) || (l_index_16 == 6 && pw.fractals.D1SRLinesOn) ||
         (l_index_16 == 7 && pw.fractals.W1SRLinesOn) || (l_index_16 == 8 && pw.fractals.MN1SRLinesOn)) {
         ls_0 = pw.system.PeriodToString(gia_1620[l_index_16]);
         li_8 = 1;
         li_12 = 1;
         if (gia_1608[l_index_16] == 0) li_12 = 2;
         else li_8 = 2;
         pw.drawing.MakeTrendLine(ls_0 + "_RESISTANCE", Time[500], Time[0], gda_1600[l_index_16], pw.system.SRLineColor, STYLE_SOLID, li_8, 0);
         pw.drawing.MakeTrendLine(ls_0 + "_SUPPORT", Time[500], Time[0], gda_1604[l_index_16], pw.system.SRLineColor, STYLE_SOLID, li_12, 0);
      }
   }
}

void UpdateFractalRow(int ai_0, bool ai_4 = FALSE) {
   bool li_8;
   bool li_12;
   int li_16;
   if (ai_4) {
      g_count_2176 = 0;
      return;
   }
   if ((ai_0 == 0 && pw.fractals.M1RowOn) || (ai_0 == 1 && pw.fractals.M5RowOn) || (ai_0 == 2 && pw.fractals.M15RowOn) || (ai_0 == 3 && pw.fractals.M30RowOn) || (ai_0 == 4 &&
      pw.fractals.H1RowOn) || (ai_0 == 5 && pw.fractals.H4RowOn) || (ai_0 == 6 && pw.fractals.D1RowOn) || (ai_0 == 7 && pw.fractals.W1RowOn) || (ai_0 == 8 && pw.fractals.MN1RowOn)) {
      li_8 = FALSE;
      li_12 = FALSE;
      li_16 = pw.fractals.BarCount(ai_0);
      if (gia_1608[ai_0] == 0) {
         li_8 = TRUE;
         if (pw.fractals.ColArrowOn) pw.drawing.SetText("ROW" + g_count_2176 + "_ARROW", "á");
         if (pw.fractals.ColArrowOn) pw.drawing.SetColor("ROW" + g_count_2176 + "_ARROW", pw.system.BullColor);
         if (pw.fractals.ColPipsOn) pw.drawing.SetText("ROW" + g_count_2176 + "_PIPS", pw.text.StringPadDouble(pw.system.Pips(Bid - gda_1604[ai_0]), 0));
      } else {
         li_12 = TRUE;
         if (pw.fractals.ColArrowOn) pw.drawing.SetText("ROW" + g_count_2176 + "_ARROW", "â");
         if (pw.fractals.ColArrowOn) pw.drawing.SetColor("ROW" + g_count_2176 + "_ARROW", pw.system.BearColor);
         if (pw.fractals.ColPipsOn) pw.drawing.SetText("ROW" + g_count_2176 + "_PIPS", pw.text.StringPadDouble(pw.system.Pips(gda_1600[ai_0] - Bid), 0));
      }
      if (pw.fractals.ColBarCountOn) pw.drawing.SetText("ROW" + g_count_2176 + "_BARCOUNT", pw.text.StringPadDouble(li_16, 0));
      if (pw.fractals.HighlightOn && gs_1656 != "") {
         pw.drawing.SetColor("ROW" + g_count_2176 + "_0BG_FRACTAL", pw.system.BackColor);
         if (li_16 == 0) {
            if (li_8) pw.drawing.SetColor("ROW" + g_count_2176 + "_0BG_FRACTAL", pw.system.BullHighlightColor);
            if (li_12) pw.drawing.SetColor("ROW" + g_count_2176 + "_0BG_FRACTAL", pw.system.BearHighlightColor);
         }
      }
      g_count_2176++;
   }
}

void UpdateHoursLines() {
   bool li_0 = FALSE;
   bool li_4 = TRUE;
   int li_8 = 4;
   if (pw.hours.LinesOn) {
      for (int l_index_12 = 0; l_index_12 < gi_1196; l_index_12++) {
         if (gba_1204[l_index_12]) {
            pw.drawing.MakeTrendLine("ROW" + l_index_12 + "_TDY_HIGH_LINE", pw.datetime.BrokerTime(gia_1236[l_index_12][2]), pw.datetime.BrokerTime(gia_1236[l_index_12][1]), gda_1240[l_index_12][0][0], gia_1208[l_index_12], li_8, li_4, li_0);
            pw.drawing.MakeTrendLine("ROW" + l_index_12 + "_TDY_LOW_LINE", pw.datetime.BrokerTime(gia_1236[l_index_12][2]), pw.datetime.BrokerTime(gia_1236[l_index_12][1]), gda_1240[l_index_12][0][1], gia_1208[l_index_12], li_8, li_4, li_0);
            pw.drawing.MakeTrendLine("ROW" + l_index_12 + "_YSD_HIGH_LINE", pw.datetime.BrokerTime(gia_1236[l_index_12][4]), pw.datetime.BrokerTime(gia_1236[l_index_12][3]), gda_1240[l_index_12][1][0], gia_1208[l_index_12], li_8, li_4, li_0);
            pw.drawing.MakeTrendLine("ROW" + l_index_12 + "_YSD_LOW_LINE", pw.datetime.BrokerTime(gia_1236[l_index_12][4]), pw.datetime.BrokerTime(gia_1236[l_index_12][3]), gda_1240[l_index_12][1][1], gia_1208[l_index_12], li_8, li_4, li_0);
         }
      }
   }
   if (pw.dash.H1LinesOn) {
      pw.drawing.MakeTrendLine("H1_LOW_LINE", g_datetime_2132, Time[0], g_ilow_2136, pw.dash.H1LinesColor, STYLE_SOLID, li_4, li_0, FALSE);
      pw.drawing.MakeTrendLine("H1_HIGH_LINE", g_datetime_2132, Time[0], g_ihigh_2144, pw.dash.H1LinesColor, STYLE_SOLID, li_4, li_0, FALSE);
   }
   if (pw.dash.H4LinesOn) {
      pw.drawing.MakeTrendLine("H4_LOW_LINE", g_datetime_2152, Time[0], g_ilow_2156, pw.dash.H4LinesColor, STYLE_SOLID, li_4, li_0, FALSE);
      pw.drawing.MakeTrendLine("H4_HIGH_LINE", g_datetime_2152, Time[0], g_ihigh_2164, pw.dash.H4LinesColor, STYLE_SOLID, li_4, li_0, FALSE);
   }
}

void UpdateHoursRow(int ai_0) {
   if (ai_0 != gi_1196) {
      if (pw.hours.ColLabelOn) pw.drawing.SetText("ROW" + ai_0 + "_LABEL", gsa_1212[ai_0]);
      if (pw.hours.ColGMTOn) pw.drawing.SetText("ROW" + ai_0 + "_GMT", pw.text.StringPadDouble(gia_1216[ai_0], 0));
      if (pw.hours.ColTimeOn) pw.drawing.SetText("ROW" + ai_0 + "_TIME", TimeToStr(gia_1236[ai_0][0], TIME_DATE|TIME_MINUTES));
      if (pw.hours.ColOpenOn) pw.drawing.SetText("ROW" + ai_0 + "_OPEN", TimeToStr(pw.datetime.ChoiceTime(gia_1236[ai_0][1]), TIME_MINUTES));
      if (pw.hours.ColCloseOn) pw.drawing.SetText("ROW" + ai_0 + "_CLOSE", TimeToStr(pw.datetime.ChoiceTime(gia_1236[ai_0][2]), TIME_MINUTES));
      if (pw.hours.HighlightOn && gs_1300 != "") {
         if (gba_1232[ai_0] == 1) pw.drawing.SetColor("ROW" + ai_0 + "_ACTIVE", pw.system.HighlightColor);
         else pw.drawing.SetColor("ROW" + ai_0 + "_ACTIVE", pw.system.BackColor);
      }
   }
   if (pw.hours.ColTodayOn) pw.drawing.SetText("ROW" + ai_0 + "_TDY", pw.text.StringPadDouble(pw.system.Pips(gda_1240[ai_0][0][2]), 0, 3));
   if (pw.hours.ColYesterdayOn) pw.drawing.SetText("ROW" + ai_0 + "_YSD", pw.text.StringPadDouble(pw.system.Pips(gda_1240[ai_0][1][2]), 0, 3));
   if (pw.hours.ColWeekOn) pw.drawing.SetText("ROW" + ai_0 + "_WEK", pw.text.StringPadDouble(pw.system.Pips(gda_1240[ai_0][2][2]), 0, 3));
   if (pw.hours.ColMonthOn) pw.drawing.SetText("ROW" + ai_0 + "_MTH", pw.text.StringPadDouble(pw.system.Pips(gda_1240[ai_0][3][2]), 0, 3));
}

void UpdateTHVRow(int ai_0) {
   int l_color_4 = pw.system.FlatColor;
   double ld_8 = pw.thv.coral.Update(Symbol(), gia_2016[ai_0], 0);
   double l_ichimoku_16 = iIchimoku(g_symbol_2096, gia_2016[ai_0], 2, 5, 8, MODE_SENKOUSPANA, 0);
   double l_ichimoku_24 = iIchimoku(g_symbol_2096, gia_2016[ai_0], 2, 5, 8, MODE_SENKOUSPANB, 0);
   double ld_32 = pw.thv.trix.Update(0, Symbol(), gia_2016[ai_0], 1);
   double ld_40 = pw.thv.trix.Update(0, Symbol(), gia_2016[ai_0], 0);
   double ld_48 = pw.thv.trix.Update(1, Symbol(), gia_2016[ai_0], 1);
   double ld_56 = pw.thv.trix.Update(1, Symbol(), gia_2016[ai_0], 0);
   int l_count_64 = 0;
   int l_count_68 = 0;
   l_color_4 = pw.system.FlatColor;
   if (g_bid_2108 > ld_8) {
      l_color_4 = pw.system.BullColor;
      l_count_64++;
   }
   if (g_bid_2108 < ld_8) {
      l_color_4 = pw.system.BearColor;
      l_count_68++;
   }
   pw.drawing.SetColor("ROW" + ai_0 + "_CORALLAMP", l_color_4);
   l_color_4 = pw.system.FlatColor;
   if (g_bid_2108 > l_ichimoku_24) {
      l_color_4 = pw.system.BullColor;
      l_count_64++;
   }
   if (g_bid_2108 < l_ichimoku_16) {
      l_color_4 = pw.system.BearColor;
      l_count_68++;
   }
   pw.drawing.SetColor("ROW" + ai_0 + "_CLOUDLAMP", l_color_4);
   l_color_4 = pw.system.FlatColor;
   if (ld_40 > ld_32 && ld_40 < ld_56) {
      l_color_4 = pw.system.BullColor;
      l_count_64++;
   }
   if (ld_40 < ld_32 && ld_40 > ld_56) {
      l_color_4 = pw.system.BearColor;
      l_count_68++;
   }
   pw.drawing.SetColor("ROW" + ai_0 + "_SLOWTRIXLAMP", l_color_4);
   l_color_4 = pw.system.FlatColor;
   if (ld_56 > ld_48 && ld_56 > ld_40 && ld_56 > 0.0) {
      l_color_4 = pw.system.BullColor;
      l_count_64++;
   }
   if (ld_56 < ld_48 && ld_56 < ld_40 && ld_56 < 0.0) {
      l_color_4 = pw.system.BearColor;
      l_count_68++;
   }
   pw.drawing.SetColor("ROW" + ai_0 + "_FASTTRIXLAMP", l_color_4);
   if (pw.thv.HighlightOn && gs_2048 != "") {
      pw.drawing.SetColor("ROW" + ai_0 + "_0BG_THV", pw.system.BackColor);
      if (l_count_64 == 4) pw.drawing.SetColor("ROW" + ai_0 + "_0BG_THV", pw.system.BullHighlightColor);
      if (l_count_68 == 4) pw.drawing.SetColor("ROW" + ai_0 + "_0BG_THV", pw.system.BearHighlightColor);
   }
}

void Reset() {
   pw.drawing.DeleteAll();
   g_symbol_2096 = Symbol();
   pw.hours.Init();
   pw.fractals.Init();
   pw.thv.Init();
   pw.dash.Init();
   ResetDisplay();
   ResetIndicators();
}

void ResetDimensions() {
   int li_0 = 0;
   li_0 = pw.hours.InitDimensions(li_0);
   li_0 = pw.fractals.InitDimensions(li_0, gs_1300 != "");
   li_0 = pw.thv.InitDimensions(li_0, gs_1300 != "" || gs_1656 != "");
   gi_516 = li_0;
}

void ResetDisplay() {
   string ls_0;
   int li_8;
   int li_12;
   int li_16;
   ResetDimensions();
   int li_20 = pw.dash.X;
   int li_24 = pw.dash.Y + 4;
   int li_28 = pw.dash.Window;
   if (pw.hours.DashOn) {
      if (gs_1300 != "") pw.drawing.MakeLabel(0, "LBL_3Background", gs_1300, li_20 + 0, li_24 - 4, "Webdings", 12, pw.system.BackColor, li_28);
      if (pw.hours.ColColorOn) pw.drawing.MakeLabel(0, "LBL_COLOR", pw.hours.ColColorLabel, li_20 + gi_1264, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColLabelOn) pw.drawing.MakeLabel(0, "LBL_LABEL", pw.hours.ColLabelLabel, li_20 + gi_1264, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColGMTOn) pw.drawing.MakeLabel(0, "LBL_GMT", pw.hours.ColGMTLabel, li_20 + gi_1268, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColTimeOn) pw.drawing.MakeLabel(0, "LBL_TIME", pw.hours.ColTimeLabel, li_20 + gi_1272, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColOpenOn) pw.drawing.MakeLabel(0, "LBL_OPEN", pw.hours.ColOpenLabel, li_20 + gi_1276, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColCloseOn) pw.drawing.MakeLabel(0, "LBL_CLOSE", pw.hours.ColCloseLabel, li_20 + gi_1280, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColMonthOn) pw.drawing.MakeLabel(0, "LBL_MTH", pw.hours.ColMonthLabel, li_20 + gi_1284, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColWeekOn) pw.drawing.MakeLabel(0, "LBL_WEK", pw.hours.ColWeekLabel, li_20 + gi_1288, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColYesterdayOn) pw.drawing.MakeLabel(0, "LBL_YSD", pw.hours.ColYesterdayLabel, li_20 + gi_1292, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.hours.ColTodayOn) pw.drawing.MakeLabel(0, "LBL_TDY", pw.hours.ColTodayLabel, li_20 + gi_1296, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
   }
   if (pw.fractals.DashOn) {
      if (gs_1656 != "") pw.drawing.MakeLabel(0, "LBL_2BackgroundFractals", gs_1656, li_20 + gi_1636, li_24 - 4, "Webdings", 12, pw.system.BackColor, li_28);
      if (pw.fractals.ColTimeFrameOn) pw.drawing.MakeLabel(0, "LBL_TIMEFRAME", pw.fractals.ColTimeFrameLabel, li_20 + gi_1640, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.fractals.ColArrowOn) pw.drawing.MakeLabel(0, "LBL_ARROW", pw.fractals.ColArrowLabel, li_20 + gi_1644, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.fractals.ColBarCountOn) pw.drawing.MakeLabel(0, "LBL_BARCOUNT", pw.fractals.ColBarCountLabel, li_20 + gi_1648, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.fractals.ColPipsOn) pw.drawing.MakeLabel(0, "LBL_PIPS", pw.fractals.ColPipsLabel, li_20 + gi_1652, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
   }
   if (pw.thv.IndicatorOn) {
      if (gs_2048 != "") pw.drawing.MakeLabel(0, "LBL_1BackgroundTHV", gs_2048, li_20 + gi_2024, li_24 - 4, "Webdings", 12, pw.system.BackColor, li_28);
      if (pw.thv.ColCoralOn) pw.drawing.MakeLabel(0, "LBL_CORALLAMP", pw.thv.ColCoralLabel, li_20 + gi_2028, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.thv.ColCloudOn) pw.drawing.MakeLabel(0, "LBL_CLOUDLAMP", pw.thv.ColCloudLabel, li_20 + gi_2032, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.thv.ColSlowTrixOn) pw.drawing.MakeLabel(0, "LBL_SLOWTRIXLAMP", pw.thv.ColSlowTrixLabel, li_20 + gi_2036, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.thv.ColFastTrixOn) pw.drawing.MakeLabel(0, "LBL_FASTTRIXLAMP", pw.thv.ColFastTrixLabel, li_20 + gi_2040, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
      if (pw.thv.ColTimeFrameOn) pw.drawing.MakeLabel(0, "LBL_THVTIMEFRAME", pw.thv.ColTimeFrameLabel, li_20 + gi_2044, li_24 + 0, "Arial Bold", 8, pw.system.TextColor, li_28);
   }
   pw.drawing.MakeLabel(0, "LBL_0Background", "g", li_20 + gi_516, li_24 - 3, "Webdings", 80, pw.system.BackColor, li_28);
   pw.drawing.MakeLabel(0, "LBL_00Background", "g", li_20 + gi_516 + 2, li_24 - 3, "Webdings", 80, pw.system.TextColor, li_28);
   pw.drawing.MakeLabel(0, "SYMBOL", StringSubstr(g_symbol_2096, 0, 1) + StringSubstr(g_symbol_2096, 3, 1), li_20 + gi_516 + 20, li_24 + 3, "Arial Bold", 10, pw.system.TextColor, li_28);
   pw.drawing.MakeLabel(0, "PRICE", "-----", li_20 + gi_516 + 46, li_24 + 3, "Arial Bold", 10, pw.system.TextColor, li_28);
   int li_32 = 0;
   if (gi_140) li_32 = -7;
   pw.drawing.MakeLabel(0, "PRICE_POINT", "-", li_20 + gi_516 + 86 + li_32, li_24 + 3, "Arial Bold", 8, pw.system.TextColor, li_28);
   pw.drawing.MakeLabel(0, "LBL_SPREAD", "SP", li_20 + gi_516 + 48, li_24 + 17, "Arial Bold", 8, pw.system.TextColor, li_28);
   pw.drawing.MakeLabel(0, "SPREAD", "-.-", li_20 + gi_516 + 70, li_24 + 17, "Arial Bold", 8, pw.system.TextColor, li_28);
   if (g_ma_method_520 == -1) ls_0 = "";
   else ls_0 = pw.dash.MAType + DoubleToStr(pw.dash.MAPeriod, 0);
   if (pw.hours.DashOn) for (int l_count_36 = 0; l_count_36 <= gi_1196; l_count_36++) li_8 = ResetHoursRow(l_count_36, li_20, li_24, li_28);
   if (pw.fractals.DashOn) for (l_count_36 = 0; l_count_36 < gi_1624; l_count_36++) li_12 = ResetFractalRow(l_count_36, li_20, li_24, li_28);
   if (pw.thv.IndicatorOn) for (l_count_36 = 0; l_count_36 < gi_2020; l_count_36++) li_16 = ResetTHVRow(l_count_36, li_20, li_24, li_28);
   gi_2172 = MathMax(li_8, MathMax(li_12, li_16));
   gi_2172++;
   int li_40 = 16;
   if (pw.hours.DashOn) {
      for (l_count_36 = li_8; l_count_36 <= gi_2172; l_count_36++)
         if (gs_1300 != "") pw.drawing.MakeLabel(0, "ROW" + l_count_36 + "_ACTIVE", gs_1300, li_20 + 0, li_24 + (l_count_36 + 1) * li_40 - 4, "Webdings", 12, pw.system.BackColor, li_28);
   }
   if (pw.fractals.DashOn) {
      for (l_count_36 = li_12 + 1; l_count_36 <= gi_2172; l_count_36++)
         if (gs_1656 != "") pw.drawing.MakeLabel(0, "ROW" + l_count_36 + "_0BG_FRACTAL", gs_1656, li_20 + gi_1636, li_24 + (l_count_36 + 1) * li_40 - 4, "Webdings", 12, pw.system.BackColor, li_28);
   }
   if (pw.thv.IndicatorOn) {
      for (l_count_36 = li_16 + 1; l_count_36 <= gi_2172; l_count_36++)
         if (gs_2048 != "") pw.drawing.MakeLabel(0, "ROW" + l_count_36 + "_0BG_THV", gs_2048, li_20 + gi_2024, li_24 + (l_count_36 + 1) * li_40 - 4, "Webdings", 12, pw.system.BackColor, li_28);
   }
   int li_44 = gi_2172 * li_40 - 80;
   if (li_44 > 0) {
      pw.drawing.MakeLabel(0, "LBL_1Background", "g", li_20 + gi_516, li_24 + li_44 + 3, "Webdings", 80, pw.system.BackColor, li_28);
      pw.drawing.MakeLabel(0, "LBL_01Background", "g", li_20 + gi_516 + 2, li_24 + li_44 + 3, "Webdings", 80, pw.system.TextColor, li_28);
   }
   pw.drawing.MakeLabel(0, "ROW_PIPWARE", gs_2088, pw.dash.X + 5, pw.dash.Y + 4 + gi_2172 << 4, "Arial Bold", 8, pw.system.TextColor, pw.dash.Window);
}

int ResetFractalRow(int ai_0, int ai_4, int ai_8, int ai_12) {
   int li_16;
   int li_20;
   if ((ai_0 == 0 && pw.fractals.M1RowOn) || (ai_0 == 1 && pw.fractals.M5RowOn) || (ai_0 == 2 && pw.fractals.M15RowOn) || (ai_0 == 3 && pw.fractals.M30RowOn) || (ai_0 == 4 &&
      pw.fractals.H1RowOn) || (ai_0 == 5 && pw.fractals.H4RowOn) || (ai_0 == 6 && pw.fractals.D1RowOn) || (ai_0 == 7 && pw.fractals.W1RowOn) || (ai_0 == 8 && pw.fractals.MN1RowOn)) {
      li_16 = 16;
      li_20 = (gi_2180 + 1) * li_16;
      if (gs_1656 != "") pw.drawing.MakeLabel(0, "ROW" + gi_2180 + "_0BG_FRACTAL", gs_1656, ai_4 + gi_1636, ai_8 + li_20 - 4, "Webdings", 12, pw.system.BackColor, ai_12);
      if (pw.fractals.ColTimeFrameOn) pw.drawing.MakeLabel(0, "ROW" + gi_2180 + "_TIMEFRAME", pw.system.PeriodToString(gia_1620[ai_0]), ai_4 + gi_1640, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.fractals.ColArrowOn) pw.drawing.MakeLabel(0, "ROW" + gi_2180 + "_ARROW", "á", ai_4 + gi_1644, ai_8 + li_20, "Wingdings", 10, pw.system.TextColor, ai_12);
      if (pw.fractals.ColBarCountOn) pw.drawing.MakeLabel(0, "ROW" + gi_2180 + "_BARCOUNT", "---", ai_4 + gi_1648, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.fractals.ColPipsOn) pw.drawing.MakeLabel(0, "ROW" + gi_2180 + "_PIPS", "---", ai_4 + gi_1652, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      gi_2180++;
      return (gi_2180 - 1);
   }
   return (0);
}

void ResetIndicator(int ai_0, string as_4, double ada_12[], int ai_16, int a_style_20, int ai_24, int ai_28, color a_color_32) {
   SetIndexStyle(ai_0, ai_16, a_style_20, ai_28, a_color_32);
   SetIndexDrawBegin(ai_0, -1);
   SetIndexBuffer(ai_0, ada_12);
   SetIndexLabel(ai_0, as_4);
   SetIndexArrow(ai_0, ai_24);
}

void ResetIndicators() {
   ResetIndicator(0, "Resistance", gda_1556, DRAW_ARROW, STYLE_DOT, 158, 1, ForestGreen);
   ResetIndicator(1, "Support", gda_1560, DRAW_ARROW, STYLE_DOT, 158, 1, Red);
   ResetIndicator(2, "Up Arrow", gda_1564, DRAW_ARROW, STYLE_DOT, 233, 1, ForestGreen);
   ResetIndicator(3, "Down Arrow", gda_1568, DRAW_ARROW, STYLE_DOT, 234, 1, Red);
   ResetIndicator(4, "High Fractal", gda_1548, DRAW_ARROW, STYLE_DOT, 161, 2, ForestGreen);
   ResetIndicator(5, "Low Fractal", gda_1552, DRAW_ARROW, STYLE_DOT, 161, 2, Red);
}

int ResetHoursRow(int ai_0, int ai_4, int ai_8, int ai_12) {
   int li_16 = 16;
   int li_20 = (ai_0 + 1) * li_16;
   if (gs_1300 != "") pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_ACTIVE", gs_1300, ai_4 + 0, ai_8 + li_20 - 4, "Webdings", 12, pw.system.BackColor, ai_12);
   if (ai_0 != gi_1196) {
      if (pw.hours.ColColorOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_COLOR", "g", ai_4 + gi_1260, ai_8 + li_20 - 4, "Webdings", 12, gia_1208[ai_0], ai_12);
      if (pw.hours.ColLabelOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_LABEL", gsa_1212[ai_0], ai_4 + gi_1264, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.hours.ColGMTOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_GMT", pw.text.StringPadDouble(gia_1216[ai_0], 0), ai_4 + gi_1268, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.hours.ColTimeOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_TIME", "----.--.-- --:--", ai_4 + gi_1272, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.hours.ColOpenOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_OPEN", "--:--", ai_4 + gi_1276, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
      if (pw.hours.ColCloseOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_CLOSE", "--:--", ai_4 + gi_1280, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   }
   if (pw.hours.ColMonthOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_MTH", "---", ai_4 + gi_1284, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   if (pw.hours.ColWeekOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_WEK", "---", ai_4 + gi_1288, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   if (pw.hours.ColYesterdayOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_YSD", "---", ai_4 + gi_1292, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   if (pw.hours.ColTodayOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_TDY", "---", ai_4 + gi_1296, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   return (ai_0);
}

int ResetTHVRow(int ai_0, int ai_4, int ai_8, int ai_12) {
   int li_16 = 16;
   int li_20 = (ai_0 + 1) * li_16;
   if (gs_2048 != "") pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_0BG_THV", gs_2048, ai_4 + gi_2024, ai_8 + li_20 - 4, "Webdings", 12, pw.system.BackColor, ai_12);
   if (pw.thv.ColTimeFrameOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_THVTIMEFRAME", pw.system.PeriodToString(gia_2016[ai_0]), ai_4 + gi_2044, ai_8 + li_20, "Arial Bold", 8, pw.system.TextColor, ai_12);
   if (pw.thv.ColCoralOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_CORALLAMP", "n", ai_4 + gi_2028, ai_8 + li_20 - 3, "Webdings", 9, pw.system.TextColor, ai_12);
   if (pw.thv.ColCloudOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_CLOUDLAMP", "n", ai_4 + gi_2032, ai_8 + li_20 - 3, "Webdings", 9, pw.system.TextColor, ai_12);
   if (pw.thv.ColSlowTrixOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_SLOWTRIXLAMP", "n", ai_4 + gi_2036, ai_8 + li_20 - 3, "Webdings", 9, pw.system.TextColor, ai_12);
   if (pw.thv.ColFastTrixOn) pw.drawing.MakeLabel(0, "ROW" + ai_0 + "_FASTTRIXLAMP", "n", ai_4 + gi_2040, ai_8 + li_20 - 3, "Webdings", 9, pw.system.TextColor, ai_12);
   return (ai_0);
}

void DeinitBegin() {
}

void DeinitEnd() {
   pw.drawing.DeleteAll();
}

void InitBegin() {
   if (IsDllsAllowed()) {
      pw.performance.Init(0);
      pw.datetime.Init();
   }
}

void InitEnd() {
   if (IsDllsAllowed()) pw.performance.Update(0);
}

bool StartBegin() {
   pw.performance.Init(1);
   if (gi_408 == 1) {
      pw.drawing.Init("[PWDB] ", pw.system.Init("pipware.com dasboard"));
      Reset();
      ObjectsRedraw();
      if (!IsDllsAllowed()) {
         Print("Must allow DLLs ... exiting!");
         Alert("Must allow DLLs ... exiting!");
      }
   }
   if (!IsDllsAllowed()) return (FALSE);
   if (pw.diagnostics.Debug_Panel_On) pw.diagnostics.Init();
   pw.system.Update();
   pw.datetime.Update();
   return (TRUE);
}

void StartEnd() {
   pw.performance.Update(1);
   if (pw.diagnostics.Debug_Panel_On) {
      pw.diagnostics.Update("pw.system:\n" + pw.system.ToString());
      pw.diagnostics.Update("pw.performance:\n" + pw.performance.ToString());
      pw.diagnostics.Update("pw.datetime:\n" + pw.datetime.ToString());
      pw.diagnostics.Update("pw.hours:\n" + pw.hours.ToString());
      pw.diagnostics.Update("pw.fractals:" + pw.fractals.ToString());
      Comment(pw.diagnostics.ToString());
   }
}