Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = True
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Const DataAggregationParameterName As String = "DataAggregation"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = New System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
Return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
Return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End If
If (CInt(Report.Parameters(DataAggregationParameterName).Value) > 0) Then
ReportStartDate = ReportStartDate.Date
End If
End If
Return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End If
If (CInt(Report.Parameters(DataAggregationParameterName).Value) > 0) Then
ReportEndDate = ReportEndDate.Date
End If
End If
Return ReportEndDate
End Function
Public Function GetStartEndDateDiffInMilliseconds(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Double
If IsBusinessHours(GetReportTimeFilter()) Then
Dim StartTime As Date = GetReportStartDate().Add(Value.StartTime)
Dim EndTime As Date = GetReportEndDate().Add(Value.EndTime)
Dim DiffSpan As Global.System.TimeSpan = EndTime.Subtract(StartTime)
Dim TotalDays As Double = DiffSpan.TotalDays
Dim CountHours As Double = CDbl(0)
Dim DateTempToGetHours = New DateTime(EndTime.Year, EndTime.Month, EndTime.Day, StartTime.Hour, StartTime.Minute, StartTime.Second)
Dim WorkHours As Global.System.TimeSpan = EndTime.Subtract(DateTempToGetHours)
Dim STinMove As Date = StartTime
While EndTime.ToShortDateString() <> STinMove.ToShortDateString()
If Value.WeekMap.Contains(STinMove.DayOfWeek) Then
CountHours = CountHours + Math.Round(WorkHours.TotalHours)
End If
STinMove = STinMove.AddDays(1)
End While
Return Math.Round(CountHours * 60 * 60 * 1000) 'Return In Milliseconds
Else
Dim StartTime As Date = GetReportStartDate()
Dim EndTime As Date = GetReportEndDate()
Dim DiffSpan As Global.System.TimeSpan = EndTime.Subtract(StartTime)
Return DiffSpan.TotalMilliseconds
End If
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then
If (CInt(Report.Parameters(DataAggregationParameterName).Value) = 0) Then
ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
Else
ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Regular, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
End If
End If
Return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
Return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
Return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
Return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() As Object) As String
Return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value As String) As String
Return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = New System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If Value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End If
Return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
REM ---------------------------------
Public Enum DataAggregationType
Hourly = 0
Daily = 1
End Enum
REM ---------------------------------
Const DownTimeParameterName As String = "DownTime"
Dim DownTimeTable As System.Collections.Generic.List(Of Integer)
Public Enum StateIntervalType
Red = 0
Green = 1
Yellow = 2
White = 3
Gray = 4
Black = 5
Blue = 6
ServiceGray = 7
End Enum
Public Function IsDownTime(time As StateIntervalType)
Select Case time
Case StateIntervalType.Red
Return True
Case StateIntervalType.Green
Return False
Case Else
If IsNothing(DownTimeTable) Then
DownTimeTable = New System.Collections.Generic.List(Of Integer)()
Dim val As String
For Each val In Report.Parameters(DownTimeParameterName).Value
DownTimeTable.Add(CInt(val))
Next
End If
Return DownTimeTable.Contains(CInt(time))
End Select
End Function
REM ---------------------------------
Public Function FormatTimeInterval(ByVal TimeInSeconds As Integer) As String
Dim Hours, Minutes, Seconds As Integer
Hours = Math.Floor(TimeInSeconds / 3600)
Minutes = Math.Floor((TimeInSeconds Mod 3600) / 60)
Seconds = TimeInSeconds Mod 60
Return FormatString("{0}:{1}:{2}", Hours.ToString(), Minutes.ToString("00"), Seconds.ToString("00"))
End Function
REM ---------------------------------
Public Enum AggregationType
Hourly = 0
Daily = 1
Monthly = 2
End Enum
Public Function GetAggregationType(ByVal StartDate As DateTime, ByVal EndDate As DateTime) As AggregationType
Dim Result As AggregationType
Dim TimeDiff As TimeSpan
TimeDiff = EndDate - StartDate
If (TimeDiff.TotalDays > 32) Then
Result = AggregationType.Monthly
ElseIf (TimeDiff.TotalDays > 1) Then
Result = AggregationType.Daily
Else
If (CInt(Report.Parameters(DataAggregationParameterName).Value) = 0) Then
Result = AggregationType.Hourly
Else
Result = AggregationType.Daily
End If
End If
Return Result
End Function</Script></Code><EmbeddedImages><EmbeddedImage Name="ID2017_12_28_09_54_15_Service_Map_Live_Maps_87_Internet_Explorer"><MIMEType>image/jpeg</MIMEType><ImageData>/9j/4AAQSkZJRgABAQEAYABgAAD/4QBwRXhpZgAATU0AKgAAAAgABgExAAIAAAAKAAAAVgMBAAUAAAABAAAAYAMDAAEAAAABAAAAAFEQAAEAAAABAQAAAFERAAQAAAABAAAOwlESAAQAAAABAAAOwgAAAABHcmVlbnNob3QAAAGGoAAAsY//2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAEjAaEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4t8Q/EzxB+1V4kk+K
HxIvrfxV498aWtndavqslhbWxuilrFDEPKgjSJdkMcafKgztyckk1X/4RfTP+gdY/wDgOn+FZvwm/wCSV+Gf+wVa/wDolK6CgCj/AMIvpn/QOsf/AAHT/Cj/AIRfTP8AoHWP/gOn+FXqKAKP/CL6Z/0DrH/wHT/Cj/hF9M/6B1j/AOA6f4VeooAo/wDCL6Z/0DrH/wAB0/wo/wCEX0z/AKB1j/4Dp/hV6igCj/wi+mf9A6x/8B0/wo/4RfTP+gdY/wDgOn+FXqKAKP8Awi+mf9A6x/8AAdP8KP8AhF9M/wCgdY/+A6f4VeooAo/8Ivpn/QOsf/AdP8KP+EX0z/oHWP8A4Dp/hV6igCj/AMIvpn/QOsf/AAHT/Cj/AIRfTP8AoHWP/gOn+FXqKAKP/CL6Z/0DrH/wHT/Cj/hF9M/6B1j/AOA6f4VeooAo/wDCL6Z/0DrH/wAB0/wo/wCEX0z/AKB1j/4Dp/hV6igCj/wi+mf9A6x/8B0/wo/4RfTP+gdY/wDgOn+FXqKAKP8Awi+mf9A6x/8AAdP8KP8AhF9M/wCgdY/+A6f4VeooAo/8Ivpn/QOsf/AdP8KP+EX0z/oHWP8A4Dp/hV6igCj/AMIvpn/QOsf/AAHT/Cj/AIRfTP8AoHWP/gOn+FXqKAKP/CL6Z/0DrH/wHT/Cj/hF9M/6B1j/AOA6f4VeooAo/wDCL6Z/0DrH/wAB0/wo/wCEX0z/AKB1j/4Dp/hV6igCj/wi+mf9A6x/8B0/wo/4RfTP+gdY/wDgOn+FXqKAKP8Awi+mf9A6x/8AAdP8KP8AhF9M/wCgdY/+A6f4VeooAo/8Ivpn/QOsf/AdP8KP+EX0z/oHWP8A4Dp/hV6igCj/AMIvpn/QOsf/AAHT/Cj/AIRfTP8AoHWP/gOn+FXqKAKP/CL6Z/0DrH/wHT/Cj/hF9M/6B1j/AOA6f4VeooAo/wDCL6Z/0DrH/wAB0/wo/wCEX0z/AKB1j/4Dp/hV6igCj/wi
+mf9A6x/8B0/wo/4RfTP+gdY/wDgOn+FXqKAKP8Awi+mf9A6x/8AAdP8KP8AhF9M/wCgdY/+A6f4VeooAo/8Ivpn/QOsf/AdP8KP+EX0z/oHWP8A4Dp/hV6igCj/AMIvpn/QOsf/AAHT/CptC+KHiD9lHxDH8UPhzfW/hXx54Ltru50jVYtPtrk2pktpYJR5U8bxNvhlkT5kON2RggEWK5r4y/8AJJfEv/YMuP8A0W1AGv8A8RNn7cH/AEW3/wAs7QP/AJBor4NooA+4PhN/ySvwz/2CrX/0SldBXP8Awm/5JX4Z/wCwVa/+iUroKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACua+Mv/JJfEv8A2DLj/wBFtXS1zXxl/wCSS+Jf+wZcf+i2oA+JKKKKAPuD4Tf8kr8M/wDYKtf/AESldBXP/Cb/AJJX4Z/7BVr/AOiUroKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACua+Mv8AySXxL/2DLj/0W1dLXNfGX/kkviX/ALBlx/6LagD4kooooA+lPAnxB1iy8EaNDHebY4bGBEHlIcARqB2rV/4WVrf/AD+/+QY//ia5Dwd/yKOl/wDXnF/6AK0qAN3/AIWVrf8Az+/+QY//AImj/hZWt/8AP7/5Bj/+JrCooA3f+Fla3/z+/wDkGP8A+Jo/4WVrf/P7/wCQY/8A4msKigDd/wCFla3/AM/v/kGP/wCJo/4WVrf/AD+/+QY//iawqKAN3/hZWt/8/v8A5Bj/APiaP+Fla3/z+/8AkGP/AOJrCooA3f8AhZWt/wDP
7/5Bj/8AiaP+Fla3/wA/v/kGP/4msKigDd/4WVrf/P7/AOQY/wD4mj/hZWt/8/v/AJBj/wDiawqKAN3/AIWVrf8Az+/+QY//AImj/hZWt/8AP7/5Bj/+JrCooA3f+Fla3/z+/wDkGP8A+Jo/4WVrf/P7/wCQY/8A4msKigDd/wCFla3/AM/v/kGP/wCJo/4WVrf/AD+/+QY//iawqKAN3/hZWt/8/v8A5Bj/APiaP+Fla3/z+/8AkGP/AOJrCooA3f8AhZWt/wDP7/5Bj/8AiaP+Fla3/wA/v/kGP/4msKigDd/4WVrf/P7/AOQY/wD4mj/hZWt/8/v/AJBj/wDiawqKAN3/AIWVrf8Az+/+QY//AImj/hZWt/8AP7/5Bj/+JrCooA3f+Fla3/z+/wDkGP8A+Jo/4WVrf/P7/wCQY/8A4msKigDd/wCFla3/AM/v/kGP/wCJo/4WVrf/AD+/+QY//iawqKAN3/hZWt/8/v8A5Bj/APiaP+Fla3/z+/8AkGP/AOJrCooA3f8AhZWt/wDP7/5Bj/8AiaP+Fla3/wA/v/kGP/4msKigDd/4WVrf/P7/AOQY/wD4mj/hZWt/8/v/AJBj/wDiawqKAN3/AIWVrf8Az+/+QY//AImj/hZWt/8AP7/5Bj/+JrCooA3f+Fla3/z+/wDkGP8A+Jo/4WVrf/P7/wCQY/8A4msKigDd/wCFla3/AM/v/kGP/wCJo/4WVrf/AD+/+QY//iawqKAN3/hZWt/8/v8A5Bj/APiaP+Fla3/z+/8AkGP/AOJrCooA3f8AhZWt/wDP7/5Bj/8AiaP+Fla3/wA/v/kGP/4msKigDd/4WVrf/P7/AOQY/wD4mj/hZWt/8/v/AJBj/wDiawqKAN3/AIWVrf8Az+/+QY//AImsb4i/ELV7zwFrEMt1vjms5UdfKQZBUg9BUdZPj3/kS9U/69n/AJUAeE0UUUAe9eDv+RR0v/rzi/8AQBWlWb4O/wCRR0v/AK84
v/QBWlQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+Pf+RL1T/r2f8AlWtWT49/5EvVP+vZ/wCVAHhNFFFAHvXg7/kUdL/684v/AEAVpVm+Dv8AkUdL/wCvOL/0AVpUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZPj3/kS9U/69n/AJVrVk+Pf+RL1T/r2f8AlQB4TRRRQB714O/5FHS/+vOL/wBAFaVZvg7/AJFHS/8Arzi/9AFaVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWT49/5EvVP+vZ/wCVa1ZPj3/kS9U/69n/AJUAeE0UUUAe9eDv+RR0v/rzi/8AQBWlWb4O/wCRR0v/AK84v/QBWlQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+Pf+RL1T/r2f8AlWtWT49/5EvVP+vZ/wCVAHhNFFFAHvXg7/kUdL/684v/AEAVpVm+Dv8AkUdL/wCvOL/0AVpUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFZPj3/kS9U/69n/AJVrVk+Pf+RL1T/r2f8AlQB4TRRRQB714O/5FHS/+vOL/wBAFaVZvg7/AJFHS/8Arzi/9AFaVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWT49/5EvVP+vZ/wCVa1ZPj3/kS9U/69n/AJUAeE0UUUAe9eDv+RR0v/rzi/8AQBWlWb4O/wCRR0v/AK84v/QBWlQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+Pf+RL1T/r2f8AlWtWT49/5EvVP+vZ/wCVAHhNFFFAHvXg7/kUdL/684v/AEAVpVm+Dv8AkUdL/wCvOL/0AVpUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZPj3/kS9U/69n/AJVrVk+Pf+RL1T/r2f8AlQB4TRRRQB714O/5FHS/+vOL/wBAFaVZvg7/AJFHS/8Arzi/9AFaVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWT49/5EvVP+vZ/wCVa1ZPj3/kS9U/69n/AJUAeE0UUUAe9eDv+RR0v/rzi/8AQBWlWb4O/wCRR0v/AK84v/QBWlQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+Pf+RL1T/r2f8AlWtWT49/5EvVP+vZ/wCVAHhNFFFAHvXg7/kUdL/684v/AEAVpVm+Dv8AkUdL/wCvOL/0AVpUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZPj3/kS9U/69n/AJVrVk+Pf+RL1T/r2f8AlQB4TRRRQB714O/5FHS/+vOL/wBAFaVZvg7/AJFHS/8Arzi/9AFaVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWT49/5EvVP+vZ/wCVa1ZPj3/kS9U/69n/AJUAeE0UUUAe9eDv+RR0v/rzi/8AQBWlWb4O/wCRR0v/AK84v/QBWlQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+Pf+RL1T/r2f8AlWtWT49/5EvVP+vZ/wCVAHhNFFFAHvXg7/kUdL/684v/AEAVpVl+CJ1uPB2lsjblFrGpx6hQD+oNalABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWT49/wCRL1T/AK9n/lWtWP4/dY/BWqFi
F/0dhz6kYFAHhdFFFAGhpvjnVvC9sY7G8khjY52FVdfwDAgfhU//AAuTxJ/0Ev8AyXi/+JoooAP+FyeJP+gl/wCS8X/xNH/C5PEn/QS/8l4v/iaKKAD/AIXJ4k/6CX/kvF/8TR/wuTxJ/wBBL/yXi/8AiaKKAD/hcniT/oJf+S8X/wATR/wuTxJ/0Ev/ACXi/wDiaKKAD/hcniT/AKCX/kvF/wDE0f8AC5PEn/QS/wDJeL/4miigA/4XJ4k/6CX/AJLxf/E0f8Lk8Sf9BL/yXi/+JoooAP8AhcniT/oJf+S8X/xNH/C5PEn/AEEv/JeL/wCJoooAP+FyeJP+gl/5Lxf/ABNH/C5PEn/QS/8AJeL/AOJoooAP+FyeJP8AoJf+S8X/AMTR/wALk8Sf9BL/AMl4v/iaKKAD/hcniT/oJf8AkvF/8TR/wuTxJ/0Ev/JeL/4miigA/wCFyeJP+gl/5Lxf/E0f8Lk8Sf8AQS/8l4v/AImiigA/4XJ4k/6CX/kvF/8AE0f8Lk8Sf9BL/wAl4v8A4miigA/4XJ4k/wCgl/5Lxf8AxNH/AAuTxJ/0Ev8AyXi/+JoooAP+FyeJP+gl/wCS8X/xNH/C5PEn/QS/8l4v/iaKKAD/AIXJ4k/6CX/kvF/8TR/wuTxJ/wBBL/yXi/8AiaKKAD/hcniT/oJf+S8X/wATR/wuTxJ/0Ev/ACXi/wDiaKKAD/hcniT/AKCX/kvF/wDE0f8AC5PEn/QS/wDJeL/4miigA/4XJ4k/6CX/AJLxf/E0f8Lk8Sf9BL/yXi/+JoooAP8AhcniT/oJf+S8X/xNH/C5PEn/AEEv/JeL/wCJoooAP+FyeJP+gl/5Lxf/ABNH/C5PEn/QS/8AJeL/AOJoooAP+FyeJP8AoJf+S8X/AMTR/wALk8Sf9BL/AMl4v/iaKKAD/hcniT/oJf8AkvF/8TR/wuTxJ/0Ev/JeL/4miigA/wCFyeJP+gl/5Lxf/E0f8Lk8Sf8AQS/8
l4v/AImiigA/4XJ4k/6CX/kvF/8AE0f8Lk8Sf9BL/wAl4v8A4miigA/4XJ4k/wCgl/5Lxf8AxNH/AAuTxJ/0Ev8AyXi/+JoooAP+FyeJP+gl/wCS8X/xNe4/8EwvHOreKP8Agpp+zhHfXkk0a/FLwydgVUUn+1rXqFAB/GiigD+0CiiigD//2Q==</ImageData></EmbeddedImage></EmbeddedImages><Language>en-US</Language><CodeModules><CodeModule>Microsoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral</CodeModule></CodeModules><ConsumeContainerWhitespace>true</ConsumeContainerWhitespace><rd:ReportUnitType>Inch</rd:ReportUnitType><rd:ReportServerUrl>http://localhost/ReportServer_INSTANCE02</rd:ReportServerUrl><rd:ReportID>ab518a51-343d-46c4-b1f8-4ec65faafd95</rd:ReportID></Report>