diff --git a/SDL/App.config b/SDL/App.config
index 905de8ae..9b6859a6 100644
--- a/SDL/App.config
+++ b/SDL/App.config
@@ -37,7 +37,7 @@
-
+
diff --git a/SDL/My Project/Resources.Designer.vb b/SDL/My Project/Resources.Designer.vb
index 7761b5d4..32680b0a 100644
--- a/SDL/My Project/Resources.Designer.vb
+++ b/SDL/My Project/Resources.Designer.vb
@@ -548,6 +548,16 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
+ '''
+ Friend ReadOnly Property Customs_Clearance_Template() As Byte()
+ Get
+ Dim obj As Object = ResourceManager.GetObject("Customs_Clearance_Template", resourceCulture)
+ Return CType(obj,Byte())
+ End Get
+ End Property
+
'''
''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
'''
diff --git a/SDL/My Project/Resources.resx b/SDL/My Project/Resources.resx
index 71ef8b82..d3792c5a 100644
--- a/SDL/My Project/Resources.resx
+++ b/SDL/My Project/Resources.resx
@@ -964,4 +964,7 @@
..\Resources\ico_greenpulse.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\Customs_Clearance_Template.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/SDL/Resources/Customs_Clearance_Template.xlsx b/SDL/Resources/Customs_Clearance_Template.xlsx
new file mode 100644
index 00000000..75099d4b
Binary files /dev/null and b/SDL/Resources/Customs_Clearance_Template.xlsx differ
diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj
index 883b2bf9..3a374372 100644
--- a/SDL/SDL.vbproj
+++ b/SDL/SDL.vbproj
@@ -450,6 +450,9 @@
..\..\..\AVISO\Aviso\packages\WpfAnimatedGif.1.4.14\lib\net\WpfAnimatedGif.dll
True
+
+ ..\packages\ZUGFeRD.NET.1.0.1\lib\ZUGFeRD.NET.dll
+
@@ -4711,6 +4714,7 @@
+
Always
diff --git a/SDL/USTV/frmMDM_USTVAntrag.vb b/SDL/USTV/frmMDM_USTVAntrag.vb
index a67ae057..e81c7843 100644
--- a/SDL/USTV/frmMDM_USTVAntrag.vb
+++ b/SDL/USTV/frmMDM_USTVAntrag.vb
@@ -2430,7 +2430,7 @@ Public Class frmMDM_USTVAntrag
Dim pdf As String = ""
pdf = func.getPDF(dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_SchnittstellenNr").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_ReNr").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_ReDat").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_daId").Value, False, False, Antrag_LandKz, USTV_ANTRAG, New cFakturierung, False)
- If IO.File.Exists(pdf) Then
+ If System.IO.File.Exists(pdf) Then
Process.Start(pdf)
End If
diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
index 675b1c25..0fb75051 100644
--- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
+++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
@@ -61,6 +61,7 @@ Partial Class usrCntlATLAS_EZA
Me.VERAGIMPORTFormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem()
Me.EZAIDToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+ Me.VERAGFormatÖffnen2025V1ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer.Panel1.SuspendLayout()
Me.SplitContainer.SuspendLayout()
@@ -447,7 +448,7 @@ Partial Class usrCntlATLAS_EZA
'
'DateiimportToolStripMenuItem
'
- Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem})
+ Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem, Me.VERAGFormatÖffnen2025V1ToolStripMenuItem})
Me.DateiimportToolStripMenuItem.Name = "DateiimportToolStripMenuItem"
Me.DateiimportToolStripMenuItem.Size = New System.Drawing.Size(87, 20)
Me.DateiimportToolStripMenuItem.Text = "Datei-Import"
@@ -455,31 +456,31 @@ Partial Class usrCntlATLAS_EZA
'DynamicAutomotiveXLSToolStripMenuItem
'
Me.DynamicAutomotiveXLSToolStripMenuItem.Name = "DynamicAutomotiveXLSToolStripMenuItem"
- Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
Me.DynamicAutomotiveXLSToolStripMenuItem.Text = "Dynamic Automotive (XLSX)"
'
'GEZEXLSXToolStripMenuItem
'
Me.GEZEXLSXToolStripMenuItem.Name = "GEZEXLSXToolStripMenuItem"
- Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
Me.GEZEXLSXToolStripMenuItem.Text = "GEZE (XLSX)"
'
'MEYLEXLSXToolStripMenuItem
'
Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem"
- Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)"
'
'FressnapToolStripMenuItem
'
Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem"
- Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)"
'
'VERAGIMPORTFormatToolStripMenuItem
'
Me.VERAGIMPORTFormatToolStripMenuItem.Name = "VERAGIMPORTFormatToolStripMenuItem"
- Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
Me.VERAGIMPORTFormatToolStripMenuItem.Text = "VERAG-IMPORT-Format (XLSX)"
'
'ToolStripMenuItem1
@@ -495,6 +496,12 @@ Partial Class usrCntlATLAS_EZA
Me.EZAIDToolStripMenuItem.Size = New System.Drawing.Size(109, 22)
Me.EZAIDToolStripMenuItem.Text = "EZA ID"
'
+ 'VERAGFormatÖffnen2025V1ToolStripMenuItem
+ '
+ Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Name = "VERAGFormatÖffnen2025V1ToolStripMenuItem"
+ Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Size = New System.Drawing.Size(244, 22)
+ Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Text = "VERAG-Format öffnen (2025-V1)"
+ '
'usrCntlATLAS_EZA
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -556,4 +563,5 @@ Partial Class usrCntlATLAS_EZA
Friend WithEvents MEYLEXLSXToolStripMenuItem As ToolStripMenuItem
Friend WithEvents FressnapToolStripMenuItem As ToolStripMenuItem
Friend WithEvents VERAGIMPORTFormatToolStripMenuItem As ToolStripMenuItem
+ Friend WithEvents VERAGFormatÖffnen2025V1ToolStripMenuItem As ToolStripMenuItem
End Class
diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb
index ff2c51cf..2a86af9e 100644
--- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb
+++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb
@@ -1773,7 +1773,395 @@ Public Class usrCntlATLAS_EZA
End Function
Private Sub VERAGIMPORTFormatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGIMPORTFormatToolStripMenuItem.Click
-
+ ImportExcel_CustomsTemplate_V1()
End Sub
+
+ '================================================================================================================================
+ '================================================================================================================================
+ '================================================================================================================================
+ Public Function ImportExcel_CustomsTemplate_V1() As Boolean
+ ' --- Dateiauswahl wie gehabt ---
+ Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
+ f.ShowDialog(Me)
+ If f.DialogResult <> DialogResult.OK Then Return False
+ If f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count = 0 Then Return False
+
+ ' --- ggf. vorhandene Positionen leeren ---
+ If EZA.eza_WARENPOS.Count > 0 Then
+ If vbYes = MsgBox("Sollen vorhandene Positionen gelöscht werden?", vbYesNo) Then
+ EZA.eza_WARENPOS.Clear()
+ End If
+ End If
+
+ Me.Cursor = Cursors.WaitCursor
+ Dim cnt As Integer = 0
+
+ For Each filePath As String In f.LIST_FILES
+ If Not (filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase) OrElse filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase)) Then
+ Continue For
+ End If
+
+ Dim xlApp As Excel.Application = Nothing
+ Dim wb As Excel.Workbook = Nothing
+ Dim ws As Excel.Worksheet = Nothing
+
+ Try
+ xlApp = New Excel.Application()
+ xlApp.DisplayAlerts = False
+ xlApp.CutCopyMode = False
+
+ wb = xlApp.Workbooks.Open(filePath)
+ ws = CType(wb.Worksheets(1), Excel.Worksheet)
+ wb.Activate()
+
+ ' Falls Autofilter aktiv: ShowAllData() versuchen (optional)
+ Try
+ ws.ShowAllData()
+ Catch
+ End Try
+
+ ' ---------- VERSIONSPRÜFUNG ----------
+ Dim versionTag As String = GetCellStr(ws, 2, 8) ' H2
+ If Not String.Equals(versionTag, "2025-V1", StringComparison.OrdinalIgnoreCase) Then
+ Throw New ApplicationException("Version nicht unterstützt (gefunden: '" & versionTag & "', erwartet: '2025-V1').")
+ End If
+
+ ' ---------- 1) HEADER KEY/VALUE (A/B) ----------
+ Dim header As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
+ Dim usedRows As Integer = ws.UsedRange.Rows.Count
+ Dim r As Integer
+
+ For r = 3 To Math.Min(80, usedRows + 5)
+ Dim k As String = GetCellStr(ws, r, 1)
+ Dim v As String = GetCellStr(ws, r, 2)
+ If Not String.IsNullOrWhiteSpace(k) Then header(k) = v
+ Next
+
+ ' ein paar Kopfwerte ins EZA (alle optional)
+ Dim HandelsRgNr As String = ""
+ If header.ContainsKey("Invoice No.") Then HandelsRgNr = header("Invoice No.")
+ If header.ContainsKey("Currency") Then EZA.eza_Rechnungswaehrung = header("Currency")
+ If header.ContainsKey("Delivery Terms (Incoterms)") Then EZA.eza_LieferbedingungCode = header("Delivery Terms (Incoterms)")
+ If header.ContainsKey("Total Gross Weight (kg)") Then EZA.eza_GesamtRohmasse = ToDoubleSafeVERAGTmpl(header("Total Gross Weight (kg)"))
+ If header.ContainsKey("Truck Plate (Tractor)") Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = header("Truck Plate (Tractor)")
+
+ ' ---------- 2) CONSIGNOR / CONSIGNEE ----------
+ Dim rowCons As Integer = -1
+ Dim rowCee As Integer = -1
+ For r = 3 To Math.Min(80, usedRows + 5)
+ Dim aVal As String = GetCellStr(ws, r, 1)
+ If rowCons < 0 AndAlso String.Equals(aVal, "Consignor / Exporter", StringComparison.OrdinalIgnoreCase) Then rowCons = r
+ If rowCee < 0 AndAlso String.Equals(aVal, "Consignee / Importer", StringComparison.OrdinalIgnoreCase) Then rowCee = r
+ If rowCons > 0 AndAlso rowCee > 0 Then Exit For
+ Next
+
+ ' Kundennummern nur ermitteln, wenn die Blöcke auch existieren
+ Dim kdnrImp As String = If(rowCee > 0, GetCellStr(ws, rowCee + 1, 6), "")
+ Dim kdnrCons As String = If(rowCons > 0, GetCellStr(ws, rowCons + 1, 6), "")
+
+ If rowCons > 0 Then
+ 'Prüfen, ob Adresse schon vorhanden:
+ If Not EZA.eza_ADRESSEN.Any(Function(a) a.ezaAd_AdressTyp IsNot Nothing AndAlso a.ezaAd_AdressTyp.ToString().ToUpper() = "CZ") Then
+ Dim rr As Integer = rowCons + 1
+ Dim adrC As New cDakosy_EZA_Adressen()
+ adrC.ezaAd_AdressTyp = "CZ"
+
+ If Not String.IsNullOrWhiteSpace(kdnrCons) Then
+ ' --- Daten aus Datenbank (cAdressen) laden ---
+ Dim AD As New cAdressen(kdnrCons)
+ Dim KD As New cKunde(kdnrCons)
+ adrC.ezaAd_NameFirma1 = AD.Name_1
+ adrC.ezaAd_LandCode = cProgramFunctions.getISO2Land(AD.LandKz)
+ adrC.ezaAd_PLZ = AD.PLZ
+ adrC.ezaAd_Ort = AD.Ort
+ adrC.ezaAd_StrasseHausNr1 = AD.Straße
+ If Not String.IsNullOrWhiteSpace(KD.EORITIN) Then adrC.ezaAd_TeilnehmerEORI = KD.EORITIN
+ Else
+ ' --- Excel-Werte (alle optional) ---
+ Dim consCompany As String = GetCellStr(ws, rr, 1)
+ Dim consCountry As String = GetCellStr(ws, rr, 2).ToUpperInvariant()
+ Dim consZIP As String = GetCellStr(ws, rr, 3)
+ Dim consCity As String = GetCellStr(ws, rr, 4)
+ Dim consStreet As String = GetCellStr(ws, rr, 5)
+ If consCompany <> "" Then adrC.ezaAd_NameFirma1 = consCompany
+ If consCountry <> "" Then adrC.ezaAd_LandCode = consCountry
+ If consZIP <> "" Then adrC.ezaAd_PLZ = consZIP
+ If consCity <> "" Then adrC.ezaAd_Ort = consCity
+ If consStreet <> "" Then adrC.ezaAd_StrasseHausNr1 = consStreet
+ End If
+
+ EZA.eza_ADRESSEN.Add(adrC)
+ End If
+ End If
+
+ If rowCee > 0 Then
+ 'Prüfen, ob Adresse schon vorhanden:
+ If Not EZA.eza_ADRESSEN.Any(Function(a) a.ezaAd_AdressTyp IsNot Nothing AndAlso a.ezaAd_AdressTyp.ToString().ToUpper() = "CN") Then
+ Dim rr As Integer = rowCee + 1
+ Dim adrE As New cDakosy_EZA_Adressen()
+ adrE.ezaAd_AdressTyp = "CN"
+
+ If Not String.IsNullOrWhiteSpace(kdnrImp) Then
+ ' --- Daten aus Datenbank (cAdressen) laden ---
+ Dim AD As New cAdressen(kdnrImp)
+ Dim KD As New cKunde(kdnrImp)
+ adrE.ezaAd_NameFirma1 = AD.Name_1
+ adrE.ezaAd_LandCode = cProgramFunctions.getISO2Land(AD.LandKz)
+ adrE.ezaAd_PLZ = AD.PLZ
+ adrE.ezaAd_Ort = AD.Ort
+ adrE.ezaAd_StrasseHausNr1 = AD.Straße
+ If Not String.IsNullOrWhiteSpace(KD.EORITIN) Then adrE.ezaAd_TeilnehmerEORI = KD.EORITIN
+ Else
+ ' --- Excel-Werte (alle optional) ---
+ Dim ceeCompany As String = GetCellStr(ws, rr, 1)
+ Dim ceeCountry As String = GetCellStr(ws, rr, 2).ToUpperInvariant()
+ Dim ceeZIP As String = GetCellStr(ws, rr, 3)
+ Dim ceeCity As String = GetCellStr(ws, rr, 4)
+ Dim ceeStreet As String = GetCellStr(ws, rr, 5)
+ If ceeCompany <> "" Then adrE.ezaAd_NameFirma1 = ceeCompany
+ If ceeCountry <> "" Then adrE.ezaAd_LandCode = ceeCountry
+ If ceeZIP <> "" Then adrE.ezaAd_PLZ = ceeZIP
+ If ceeCity <> "" Then adrE.ezaAd_Ort = ceeCity
+ If ceeStreet <> "" Then adrE.ezaAd_StrasseHausNr1 = ceeStreet
+ End If
+
+ EZA.eza_ADRESSEN.Add(adrE)
+ End If
+ End If
+
+ ' ---------- 3) ITEM-TABELLE (optional) ----------
+ ' Finde Titelzeile "Item Lines (add as many as needed)" in Spalte A
+ Dim rowItemsTitle As Integer = -1
+ For r = 10 To Math.Min(200, usedRows + 10)
+ If String.Equals(GetCellStr(ws, r, 1), "Item Lines (add as many as needed)", StringComparison.OrdinalIgnoreCase) Then
+ rowItemsTitle = r
+ Exit For
+ End If
+ Next
+
+ If rowItemsTitle > 0 Then
+ Dim rowHdr As Integer = rowItemsTitle + 1
+ Dim usedCols As Integer = ws.UsedRange.Columns.Count
+
+ ' Header-Indices (alle optional)
+ Dim cLine As Integer = -1, cArticle As Integer = -1, cDesc As Integer = -1, cShortDesc As Integer = -1
+ Dim cHs As Integer = -1, cOrigin As Integer = -1, cPkgs As Integer = -1, cPkgType As Integer = -1
+ Dim cGross As Integer = -1, cNet As Integer = -1, cUnit As Integer = -1, cTotal As Integer = -1, cCurr As Integer = -1
+
+ Dim c As Integer
+ For c = 1 To usedCols
+ Dim h As String = GetCellStr(ws, rowHdr, c).ToLowerInvariant()
+ Select Case h
+ Case "line no.", "line no" : cLine = c
+ Case "article no.", "article no" : cArticle = c
+ Case "goods description" : cDesc = c
+ Case "short description" : cShortDesc = c
+ Case "hs code" : cHs = c
+ Case "origin country" : cOrigin = c
+ Case "packages" : cPkgs = c
+ Case "package type" : cPkgType = c
+ Case "gross weight (kg)" : cGross = c
+ Case "net weight (kg)" : cNet = c
+ Case "unit price" : cUnit = c
+ Case "total value" : cTotal = c
+ Case "currency" : cCurr = c
+ End Select
+ Next
+
+ ' Datenzeilen lesen: ab rowHdr+1 bis zur ersten komplett leeren Zeile
+ Dim rData As Integer = rowHdr + 1
+ Dim lastRow As Integer = ws.UsedRange.Rows.Count + 5
+
+ While rData <= lastRow
+ Dim anyVal As Boolean = False
+ For c = 1 To usedCols
+ If GetCellStr(ws, rData, c) <> "" Then
+ anyVal = True
+ Exit For
+ End If
+ Next
+ If Not anyVal Then Exit While
+
+ ' Werte nur holen, wenn es die Spalten gibt
+ Dim descTxt As String = If(cDesc > 0, GetCellStr(ws, rData, cDesc), "")
+ Dim hs As String = If(cHs > 0, GetCellStr(ws, rData, cHs), "")
+
+ ' Wenn gar nichts Sinnvolles da ist, Zeile überspringen
+ If descTxt = "" AndAlso hs = "" AndAlso (cArticle <= 0 OrElse GetCellStr(ws, rData, cArticle) = "") Then
+ rData += 1
+ Continue While
+ End If
+
+ Dim pos As New cDakosy_EZA_Warenposition()
+
+ If cLine > 0 Then pos.ezaWP_PositionsNummer = GetCellStr(ws, rData, cLine)
+ If cArticle > 0 Then pos.ezaWP_Artikelnummer = GetCellStr(ws, rData, cArticle)
+
+ Dim shortTxt As String = If(cShortDesc > 0, GetCellStr(ws, rData, cShortDesc), "")
+ If shortTxt <> "" Then
+ pos.ezaWP_Warenbezeichnung = shortTxt
+ ElseIf descTxt <> "" Then
+ pos.ezaWP_Warenbezeichnung = descTxt
+ End If
+ If hs <> "" Then pos.ezaWP_WarennummerEZT = hs
+
+ ' Optional: Zollartikel-Stammdaten überschreiben, wenn Kundennummer vorhanden
+ Dim Kdnr As String = If(Not String.IsNullOrWhiteSpace(kdnrImp), kdnrImp, If(Not String.IsNullOrWhiteSpace(kdnrCons), kdnrCons, ""))
+ If Kdnr <> "" Then
+ Try
+ Dim ZAL = cZollArtikel.GetListByKundenNr(Kdnr) ' Annahme: Methode vorhanden
+ ' Artikelnummer als Schlüssel: nur wenn vorhanden
+ Dim artKey As String = If(cArticle > 0, GetCellStr(ws, rData, cArticle), "")
+ If Not String.IsNullOrWhiteSpace(artKey) AndAlso ZAL IsNot Nothing Then
+ Dim Artikel = cZollArtikel.FindZollArtikelByNummer(ZAL, artKey)
+ If Artikel IsNot Nothing Then
+ If Artikel.zollArt_Warenbeschreibung IsNot Nothing AndAlso Artikel.zollArt_Warenbeschreibung.ToString() <> "" Then
+ pos.ezaWP_Warenbezeichnung = Artikel.zollArt_Warenbeschreibung.ToString()
+ End If
+ If Artikel.zollArt_Warencodenummer IsNot Nothing AndAlso Artikel.zollArt_Warencodenummer.ToString() <> "" Then
+ pos.ezaWP_WarennummerEZT = Artikel.zollArt_Warencodenummer.ToString()
+ End If
+ End If
+ End If
+ Catch
+ ' Stammdaten-Lookup ist optional; Fehler hier nicht fatal
+ End Try
+ End If
+
+ Dim origin As String = If(cOrigin > 0, GetCellStr(ws, rData, cOrigin).ToUpperInvariant(), "")
+ If origin.Length >= 2 Then pos.ezaWP_UrsprungslandCode = origin.Substring(0, 2)
+
+ If cPkgs > 0 Then
+ Dim pk As String = GetCellStr(ws, rData, cPkgs)
+ If pk <> "" Then pos.ezaWP_PackstueckAnzahl = pk
+ End If
+ If cPkgType > 0 Then
+ Dim pt As String = GetCellStr(ws, rData, cPkgType)
+ If pt <> "" Then pos.ezaWP_PackstueckArt = pt
+ End If
+
+ If cGross > 0 Then
+ Dim g As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cGross))
+ If g > 0 Then pos.ezaWP_Rohmasse = g
+ End If
+ If cNet > 0 Then
+ Dim n As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cNet))
+ If n > 0 Then pos.ezaWP_Eigenmasse = n
+ End If
+
+ If cTotal > 0 Then
+ Dim totalVal As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cTotal))
+ pos.ezaWP_Artikelpreis = totalVal
+ End If
+
+ Dim curr As String = If(cCurr > 0, GetCellStr(ws, rData, cCurr).ToUpperInvariant(), "")
+ If curr = "" Then
+ If header.ContainsKey("Currency") Then
+ pos.ezaWP_ArtikelpreisWaehrung = header("Currency").ToUpperInvariant()
+ Else
+ pos.ezaWP_ArtikelpreisWaehrung = "EUR"
+ End If
+ Else
+ pos.ezaWP_ArtikelpreisWaehrung = curr
+ End If
+
+ If HandelsRgNr <> "" Then
+ Try
+ pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
+ .ezaWpUl_Art = "N380",
+ .ezaWpUl_Bereich = "4",
+ .ezaWpUl_VorlageKz = "J",
+ .ezaWpUl_Nummer = HandelsRgNr,
+ .ezaWpUl_DatumAusstellung = Nothing
+ })
+ Catch
+ End Try
+ End If
+
+ EZA.eza_WARENPOS.Add(pos)
+ cnt += 1
+ rData += 1
+ End While
+ End If ' rowItemsTitle > 0 (wenn nicht gefunden: Items optional – Abschnitt wird einfach übersprungen)
+
+ Catch ex As Exception
+ MsgBox("FEHLER beim Einlesen (" & filePath & "):" & vbCrLf & ex.Message, vbCritical)
+ Finally
+ ' --- COM sauber freigeben ---
+ Try
+ If wb IsNot Nothing Then wb.Close(False)
+ Catch
+ End Try
+ Try
+ If xlApp IsNot Nothing Then xlApp.Quit()
+ Catch
+ End Try
+ Try
+ If ws IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ws)
+ Catch
+ End Try
+ Try
+ If wb IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wb)
+ Catch
+ End Try
+ Try
+ If xlApp IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)
+ Catch
+ End Try
+ ws = Nothing : wb = Nothing : xlApp = Nothing
+ GC.Collect()
+ GC.WaitForPendingFinalizers()
+ End Try
+ Next
+
+ ' --- UI Refresh wie gehabt ---
+ Me.FindForm.SuspendLayout()
+ POSITIONEN.setValues(EZA, True)
+ btnPositionen.PerformClick()
+ Me.FindForm.ResumeLayout()
+
+ MsgBox(cnt & " Datensätze wurden eingelesen.")
+ Me.Cursor = Cursors.Default
+ Return True
+ End Function
+
+ Private Function GetCellStr(ws As Excel.Worksheet, r As Integer, c As Integer) As String
+ Try
+ Dim v = ws.Cells(r, c).Value
+ Return If(v IsNot Nothing, v.ToString().Trim(), "")
+ Catch
+ Return ""
+ End Try
+ End Function
+
+ Private Function ToDoubleSafeVERAGTmpl(v As Object) As Double
+ If v Is Nothing Then Return 0
+ Dim s As String = v.ToString().Trim().Replace(",", ".")
+ Dim d As Double
+ If Double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, d) Then
+ Return d
+ End If
+ Return 0
+ End Function
+
+ Private Sub VERAGFormatÖffnen2025V1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGFormatÖffnen2025V1ToolStripMenuItem.Click
+ Try
+ ' Zielpfad im Temp-Ordner festlegen
+ Dim tempFile As String = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Customs_Clearance_Template_2025V1.xlsx")
+
+ ' Ressource (als Binärdatei eingebunden) schreiben
+ System.IO.File.WriteAllBytes(tempFile, My.Resources.Customs_Clearance_Template)
+
+ ' Datei mit dem Standardprogramm öffnen (z. B. Excel)
+ Process.Start(New ProcessStartInfo(tempFile) With {.UseShellExecute = True})
+
+ Catch ex As Exception
+ MsgBox("Fehler beim Öffnen der Vorlage: " & ex.Message, vbCritical)
+ End Try
+ End Sub
+ '================================================================================================================================
+ '================================================================================================================================
+ '================================================================================================================================
+
End Class
diff --git a/SDL/kunden/usrCntlCBAM.Designer.vb b/SDL/kunden/usrCntlCBAM.Designer.vb
index 900c77a7..35257c4f 100644
--- a/SDL/kunden/usrCntlCBAM.Designer.vb
+++ b/SDL/kunden/usrCntlCBAM.Designer.vb
@@ -75,6 +75,7 @@ Partial Class usrCntlCBAM
Me.btnCBAM_DS_DHF_UNISPED_GP = New System.Windows.Forms.Button()
Me.btnCBAM_DS_TELOTEC_GP = New System.Windows.Forms.Button()
Me.Button3 = New System.Windows.Forms.Button()
+ Me.lblKafkaCnt = New System.Windows.Forms.Label()
Me.cntxtAddSdl.SuspendLayout()
Me.MyPanel1.SuspendLayout()
Me.SuspendLayout()
@@ -726,11 +727,21 @@ Partial Class usrCntlCBAM
Me.Button3.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.Button3.UseVisualStyleBackColor = True
'
+ 'lblKafkaCnt
+ '
+ Me.lblKafkaCnt.AutoSize = True
+ Me.lblKafkaCnt.Location = New System.Drawing.Point(280, 609)
+ Me.lblKafkaCnt.Name = "lblKafkaCnt"
+ Me.lblKafkaCnt.Size = New System.Drawing.Size(10, 13)
+ Me.lblKafkaCnt.TabIndex = 51
+ Me.lblKafkaCnt.Text = "-"
+ '
'usrCntlCBAM
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
+ Me.Controls.Add(Me.lblKafkaCnt)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.btnCBAM_DS_TELOTEC_GP)
Me.Controls.Add(Me.btnCBAM_DS_DHF_UNISPED_GP)
@@ -840,4 +851,5 @@ Partial Class usrCntlCBAM
Friend WithEvents btnCBAM_DS_DHF_UNISPED_GP As Button
Friend WithEvents btnCBAM_DS_TELOTEC_GP As Button
Friend WithEvents Button3 As Button
+ Friend WithEvents lblKafkaCnt As Label
End Class
diff --git a/SDL/kunden/usrCntlCBAM.vb b/SDL/kunden/usrCntlCBAM.vb
index 1a689494..808c8a90 100644
--- a/SDL/kunden/usrCntlCBAM.vb
+++ b/SDL/kunden/usrCntlCBAM.vb
@@ -1109,12 +1109,13 @@ Public Class usrCntlCBAM
Dim dt = SQL.loadDgvBySql(SQL_DAKOSY, "AVISO", 600)
-
-
+ lblKafkaCnt.Text = "-"
'----- kafka / Greenpulse ----------------------------------------------------------------------------------------------------------------------------------------
If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
+ lblKafkaCnt.Text = "0/" & dt.Rows.Count
+
doCBAM_KafkaFromDakosy(dt)
End If
@@ -1131,8 +1132,12 @@ Public Class usrCntlCBAM
Private Sub doCBAM_KafkaFromDakosy(dt As DataTable)
Try
-
+ Dim cnt = 1
For Each g In dt.Rows
+ lblKafkaCnt.Text = cnt & "/" & dt.Rows.Count
+ Me.Refresh()
+ cnt += 1
+
Dim mrn As String = g("RegistriernummerATLAS")
Dim EZA = cDakosyEZA.LOADByMRN(mrn, True)
' Objekt
diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb
index 3a9dc2a4..dc051b0b 100644
--- a/SDL/mdm/frmMDMDatenverarbetiung.vb
+++ b/SDL/mdm/frmMDMDatenverarbetiung.vb
@@ -4795,7 +4795,7 @@ RabattBerechnen:
Private Function AddAttachementToRE(pathFile As String, kdNr As Integer, RECHNUNG As cRechnungsausgang, Lieferant As String) As Boolean
- If Not IO.File.Exists(pathFile) Then Return False
+ If Not System.IO.File.Exists(pathFile) Then Return False
Dim fi As New System.IO.FileInfo(pathFile)
diff --git a/SDL/packages.config b/SDL/packages.config
index 4d5c8907..90278ae5 100644
--- a/SDL/packages.config
+++ b/SDL/packages.config
@@ -55,5 +55,6 @@
+
\ No newline at end of file
diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb
index 2d5f8d0b..57c44e47 100644
--- a/SDL/seriendruck/usrCntlFakturierung.vb
+++ b/SDL/seriendruck/usrCntlFakturierung.vb
@@ -1060,7 +1060,7 @@ Public Class usrcntlFakturierung
'TODO: Prüfung, damit anhänge nicht doppelt eingearbeitet werden! -> ist DBteschnisch unterbunden mit PrimaryKey-Einschränkung!!!
- If Not IO.File.Exists(pathFile) Then Return False
+ If Not System.IO.File.Exists(pathFile) Then Return False
Dim fi As New System.IO.FileInfo(pathFile)
diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb b/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb
index 51e01ee0..d2133c37 100644
--- a/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb
+++ b/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb
@@ -22,16 +22,121 @@ Partial Class frmZollBrgBuchungenFremd
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
_
Private Sub InitializeComponent()
+ Me.components = New System.ComponentModel.Container()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmZollBrgBuchungenFremd))
+ Me.Button1 = New System.Windows.Forms.Button()
+ Me.Button2 = New System.Windows.Forms.Button()
+ Me.Label1 = New System.Windows.Forms.Label()
+ Me.Button3 = New System.Windows.Forms.Button()
+ Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
+ Me.clmnMRN = New System.Windows.Forms.DataGridViewTextBoxColumn()
+ Me.cbxEZollDaten = New System.Windows.Forms.CheckBox()
+ CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
+ 'Button1
+ '
+ Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.Button1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer))
+ Me.Button1.Image = Global.SDL.My.Resources.Resources.Excel_logo
+ Me.Button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
+ Me.Button1.Location = New System.Drawing.Point(995, 609)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(121, 37)
+ Me.Button1.TabIndex = 18
+ Me.Button1.Text = "Excel"
+ Me.Button1.UseVisualStyleBackColor = True
+ '
+ 'Button2
+ '
+ Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.Button2.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer))
+ Me.Button2.Location = New System.Drawing.Point(995, 26)
+ Me.Button2.Name = "Button2"
+ Me.Button2.Size = New System.Drawing.Size(121, 37)
+ Me.Button2.TabIndex = 19
+ Me.Button2.Text = "Prüfen"
+ Me.Button2.UseVisualStyleBackColor = True
+ '
+ 'Label1
+ '
+ Me.Label1.AutoSize = True
+ Me.Label1.Location = New System.Drawing.Point(13, 26)
+ Me.Label1.Name = "Label1"
+ Me.Label1.Size = New System.Drawing.Size(346, 13)
+ Me.Label1.TabIndex = 20
+ Me.Label1.Text = "MRN Nummern in Liste eintrtagen und mit ""Prüfen"" die Daten ergänzen."
+ '
+ 'Button3
+ '
+ Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.Button3.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer))
+ Me.Button3.Location = New System.Drawing.Point(868, 26)
+ Me.Button3.Name = "Button3"
+ Me.Button3.Size = New System.Drawing.Size(121, 37)
+ Me.Button3.TabIndex = 21
+ Me.Button3.Text = "Tabelle leeren"
+ Me.Button3.UseVisualStyleBackColor = True
+ '
+ 'MyDatagridview1
+ '
+ Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1
+ Me.MyDatagridview1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
+ Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+ Me.MyDatagridview1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.clmnMRN})
+ Me.MyDatagridview1.Location = New System.Drawing.Point(12, 69)
+ Me.MyDatagridview1.Name = "MyDatagridview1"
+ Me.MyDatagridview1.Size = New System.Drawing.Size(1104, 534)
+ Me.MyDatagridview1.TabIndex = 0
+ '
+ 'clmnMRN
+ '
+ Me.clmnMRN.HeaderText = "MRN"
+ Me.clmnMRN.Name = "clmnMRN"
+ '
+ 'cbxEZollDaten
+ '
+ Me.cbxEZollDaten.AutoSize = True
+ Me.cbxEZollDaten.Checked = True
+ Me.cbxEZollDaten.CheckState = System.Windows.Forms.CheckState.Checked
+ Me.cbxEZollDaten.Location = New System.Drawing.Point(995, 3)
+ Me.cbxEZollDaten.Name = "cbxEZollDaten"
+ Me.cbxEZollDaten.Size = New System.Drawing.Size(85, 17)
+ Me.cbxEZollDaten.TabIndex = 22
+ Me.cbxEZollDaten.Text = "E-Zoll Daten"
+ Me.cbxEZollDaten.UseVisualStyleBackColor = True
+ '
'frmZollBrgBuchungenFremd
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1128, 658)
+ Me.Controls.Add(Me.cbxEZollDaten)
+ Me.Controls.Add(Me.Button3)
+ Me.Controls.Add(Me.Label1)
+ Me.Controls.Add(Me.Button2)
+ Me.Controls.Add(Me.Button1)
+ Me.Controls.Add(Me.MyDatagridview1)
+ Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "frmZollBrgBuchungenFremd"
+ Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Brg-Buchungen Fremd"
+ CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
+ Me.PerformLayout()
End Sub
+
+ Friend WithEvents MyDatagridview1 As VERAG_PROG_ALLGEMEIN.MyDatagridview
+ Friend WithEvents clmnMRN As DataGridViewTextBoxColumn
+ Friend WithEvents Button1 As Button
+ Friend WithEvents Button2 As Button
+ Friend WithEvents Label1 As Label
+ Friend WithEvents Button3 As Button
+ Friend WithEvents cbxEZollDaten As CheckBox
End Class
diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.resx b/SDL/zoll/frmZollBrgBuchungenFremd.resx
index 1af7de15..59825072 100644
--- a/SDL/zoll/frmZollBrgBuchungenFremd.resx
+++ b/SDL/zoll/frmZollBrgBuchungenFremd.resx
@@ -117,4 +117,867 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ True
+
+
+
+
+ AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAMgAAMQOAADEDgAAAAAAAAAA
+ AACRbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEd4Sx5mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB4Sx5/VClmMwBuPg5r
+ OglrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOgluPg5mMwB/VCl0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0RhhzRBVmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz
+ RBV3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh18UCRmMwBqOQdnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFqOQdmMwB8UCR9USZmMwBrOQhn
+ NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwDm4N3/////////
+ ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////////////////
+ //////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwB0SSb39fT/
+ //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+YfWtmMwBmMwBm
+ MwBmMwB0SSbu6+n////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////
+ ///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5zUy8X////////////////L
+ v7itmo1mMwBmMwCYfWv///////90SSZmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
+ NAFmMwBmMwBmMwB0SSb////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////////////+j
+ jH1mMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwC3p5z/
+ ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwCYfWv////////////////Bs6pmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwB0SSb///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCt
+ mo3////////////////////////////////////m4N2Mbli3p5z///////+jjH1mMwBmMwBmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwCMblj///////////////////////////+M
+ blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////
+ ///////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////+3
+ p5xmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDU
+ y8X///////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////90SSZm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////////////////////////////////39fTm
+ 4N3///////+3p5xmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwC3
+ p5z////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3
+ p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwCjjH3////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXUL///////////////////90
+ SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwC3p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////U
+ y8WAXUJmMwBmMwC3p5z39fT////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDBs6r////////////////u6+n///////////+tmo1mMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////m4N1mMwBmMwBmMwBm
+ MwBmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
+ ///////////////////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwD39fT////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXULu6+n////////////////39fRm
+ MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDm4N3/////////////
+ //+jjH3////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////
+ //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD3
+ 9fT///////////////90SSZmMwBmMwBmMwBmMwDm4N3///////////////+jjH1mMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDu6+n/////////////////////////////////////////////////////
+ //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////+MblhmMwBmMwBmMwBmMwBm
+ MwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
+ NAFmMwBmMwBmMwD39fT///////////////9mMwDLv7j///////////+3p5xmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwDm4N3////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwCAXUL/////////
+ ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////
+ //////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
+ //////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+jjH1mMwBmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCMblj////////////////m4N1mMwCAXUL39fT/
+ ///////39fSAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////Uy8VmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////
+ ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwDUy8X////////////u6+lmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBm
+ MwBmMwBmMwBmMwBmMwC3p5z///////////////////9mMwBmMwBmMwB0SSb/////////////////////
+ //////////////+3p5xmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCjjH3/
+ ///////////////Uy8VmMwBmMwC3p5z////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwC3p5z////////////////////////////////////////////////////m4N1mMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwCjjH3////////////////////////////////////////////////////////////d
+ 1tGMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo1mMwBmMwBmMwCt
+ mo3////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////90SSZm
+ MwBmMwBmMwDm4N3////////////////////////////////Uy8VmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwBmMwC3p5z///////////////+3p5xmMwBmMwB0SSb39fT///////////+Y
+ fWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////////
+ //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////
+ //////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3
+ p5z////////////39fR0SSZmMwBmMwDBs6r////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwCjjH3///////////////////+jjH1mMwBmMwBmMwDBs6r////////////////////////////////3
+ 9fRmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwDUy8X///////////////+t
+ mo1mMwBmMwBmMwCtmo3////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////
+ //////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDu6+n///////////////90SSZmMwBmMwBmMwBmMwBmMwCjjH3m4N3////////////////39fR0SSZm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////+3p5xmMwBmMwDUy8X/////////////
+ //+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Bs6pmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
+ NAFmMwBmMwDu6+n///////////////+MblhmMwBmMwBmMwBmMwDu6+n///////////+tmo1mMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwBmMwBmMwBm
+ MwB0SSbu6+n///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////
+ ///39fSAXUJmMwD39fT///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////
+ ///////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////Uy8W3p5y3p5yYfWtmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwB0SSb///////////////////90SSZmMwBmMwBmMwBm
+ MwCtmo3////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////m4N1m
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
+ //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////Bs6pmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDUy8X////////////Lv7h0SSb///////////////////90SSZmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDu
+ 6+n///////////////+jjH1mMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwCYfWv/////
+ ///////////u6+lmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////+3p5xmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwCjjH3///////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwCYfWv////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////
+ //////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo3/
+ ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////
+ //+YfWtmMwBmMwBmMwBmMwBmMwCtmo3////////////////u6+lmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////
+ //////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+MblhmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////u6+lmMwBm
+ MwBmMwBmMwBmMwCAXULLv7j///////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwC3p5z////////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDd1tH///////////////////+3p5x0SSZmMwBmMwC3p5z///////////////////+t
+ mo1mMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwDLv7j////////////////Bs6pm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/
+ //////////////////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBm
+ MwBmMwDm4N3////////////////////////////////////////////////////////////Bs6pmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////+3
+ p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////
+ ///////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
+ NAFmMwDm4N3///////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+Y
+ fWtmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////////////////////////
+ //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////
+ ///////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCj
+ jH3///////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwCtmo339fT///////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAF0SSb///////////////////+MblhmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDLv7j////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwC3p5z/////////////////
+ //////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////
+ ///////////////////////////////////////m4N23p5yMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////9mMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH23p5z39fT////////////////Uy8W3
+ p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
+ NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
+ USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ8UCRmMwBqOQdn
+ NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBnNAFqOQdmMwB8UCR3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh1zRBVmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz
+ RBV0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
+ NAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0Rhh/VClmMwBuPg5rOglrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
+ OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOgluPg5mMwB/VCl4Sx5mMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwB4Sx6RbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
+ USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEf/////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////Bs6rBs6qYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6rBs6r/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////Uy8WYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvUy8X////////////////////////////////////////B
+ s6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwCjjH3Bs6rBs6r39fT/////////////////////////////////////////////////////////
+ ///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////d1tGMblhmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvm4N3/
+ ///////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljLv7j/////////////////
+ ///////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X////////////////////////////d1tFmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwCMbljm4N3////////////////////////////////////////////m4N1mMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////////////////////
+ //////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////
+ ///////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////
+ ///////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////
+ ///////////////////////////////////////////////////////////////////Bs6pmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwCtmo3///////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCA
+ XUL/////////////////////////////////////////////////////////////////////////////
+ ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT/////////////////
+ //+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////////////////////
+ //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////////////////////////////////////////
+ //////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwDBs6r///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDBs6r////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////
+ ///////////////////////////////////////////////////////////////////////////d1tFm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6rd1tH////////39fTBs6qAXUJm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Lv7hmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////////Uy8VmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////////////////////////
+ //////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/
+ //////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd
+ 1tH////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////
+ ///////Uy8XBs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////
+ ///////////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCtmo3///////////////////////////////////////+AXUJmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwC3p5z////////////////////////////////d1tGMblhmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////9mMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT/////////////////////
+ ///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////
+ //////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////
+ //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT/////////////
+ //////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDBs6r////////////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwCYfWv///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0
+ SSb///////////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDBs6r///////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwDUy8X/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///u6+nBs6rBs6rBs6qYfWtmMwBmMwBmMwDu6+n/////////////////////////////////////////
+ ///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n////////////////////////////////////////u
+ 6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////////////Bs6pm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCY
+ fWv////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////
+ //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDm4N3////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////u6+m3p5xmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////m4N1mMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwDBs6r////////////////////////////////////////////d1tFmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////////u6+lmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////Uy8XB
+ s6p0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////
+ //////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////////////////
+ //////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////
+ //////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////m4N3Bs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDUy8X///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwCMblj///////////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwB0SSb///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwDm4N3/////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////Bs6qAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT///////////////////////+jjH1m
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////////////////
+ ///////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///////////////////+t
+ mo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/
+ ///////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////
+ ///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwDm4N3////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////////////////////Uy8VmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////////////////////90SSZm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////Uy8VmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbm4N3/////////////////////
+ ///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////
+ //////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////
+ ///////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM
+ bljm4N3///////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwCjjH3///////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwD39fT/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////////////////////////+M
+ blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////
+ //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////
+ //+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6r/////////////////////////
+ //////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////
+ //////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwDd1tH///////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDL
+ v7j/////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////+Mblhm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6r/////
+ ///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////////////////////////+AXUJm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////Bs6pmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwCtmo3Bs6r39fT/////////////////////////////////////////////////////////////////
+ ///////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////
+ ///////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n/////
+ ///////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwB0SSbLv7j/////////////////////////////////////////////////
+ ///////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwC3p5z////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwB0SSb////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwCAXUL/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////////
+ //////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////
+ //////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwC3p5z////////////////////////////////////39fRmMwBmMwB0SSbBs6rBs6r39fT/////////
+ //////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/
+ ///////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDBs6r///////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwDm4N3/////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////39fRmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////////////////////Bs6pm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6rBs6r///////////////////////////+3p5xmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT////////////////////////////39fSMblhmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////////+3p5xmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////////
+ ///////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////
+ ///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////
+ ///////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////
+ ///////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////////u6+mAXUJmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwCYfWv////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDLv7j////////////////Uy8W3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwDd1tH////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljBs6r////////d1tG3
+ p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH/////////////////////////
+ ///39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////
+ ///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM
+ blj///////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n/
+ //////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwD39fT/////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////L
+ v7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////////////////+YfWtmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////////////////+jjH1m
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////
+ //////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////////
+ //////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////39fSAXUJmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwCYfWv////////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDB
+ s6r////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////////////
+ ///////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwB0SSbUy8X/////////////////////////////////////////////////
+ ///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////
+ ///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbBs6r/////////////////////////
+ ///////////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwB0SSb/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////d1tGYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
+ MwBmMwDBs6r39fT///////////////////////////////////////////////////////////+AXUJm
+ MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXULBs6rBs6rm4N3/
+ //////////////////////////////////////////////////////////////////////////////+A
+ XUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////39fTBs6rBs6pmMwBmMwBm
+ MwBmMwBmMwBmMwBmMwBmMwCjjH3Bs6rUy8X/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+
+
\ No newline at end of file
diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.vb b/SDL/zoll/frmZollBrgBuchungenFremd.vb
index 01c69b55..7c4a0d7e 100644
--- a/SDL/zoll/frmZollBrgBuchungenFremd.vb
+++ b/SDL/zoll/frmZollBrgBuchungenFremd.vb
@@ -1,3 +1,232 @@
-Public Class frmZollBrgBuchungenFremd
+Imports System.Data
+Imports System.Data.SqlClient
+Imports System.Linq
+
+
+
+
+Public Class frmZollBrgBuchungenFremd
+
+ Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
+
+ Public Sub EnrichDgvWithMrnData(dgv As DataGridView)
+ If dgv Is Nothing OrElse dgv.Columns.Count = 0 Then Exit Sub
+
+ ' 1) Zielspalten in der DGV sicherstellen
+ EnsureDgvColumn(dgv, "Datum", GetType(Date))
+ EnsureDgvColumn(dgv, "CustomsOfficeOfDestination", GetType(String))
+ EnsureDgvColumn(dgv, "PlateNumber", GetType(String))
+ EnsureDgvColumn(dgv, "Customer", GetType(String))
+ EnsureDgvColumn(dgv, "Agent", GetType(String))
+ EnsureDgvColumn(dgv, "Comment", GetType(String))
+ dgv.Columns("Datum").DefaultCellStyle.Format = "dd.MM.yyyy"
+
+ ' 2) MRNs aus der ersten Spalte einsammeln (Distinct, nicht leer)
+ Dim mrns As List(Of String) =
+ (From r As DataGridViewRow In dgv.Rows
+ Where Not r.IsNewRow
+ Let v = If(r.Cells(0).Value, "").ToString().Trim()
+ Where v <> ""
+ Select v).Distinct(StringComparer.OrdinalIgnoreCase).ToList()
+
+ If mrns.Count = 0 Then Exit Sub
+
+ ' 3) Daten aus DB laden (beide Quellen)
+ Dim results As Dictionary(Of String, MrnRow) = LoadMrnData(mrns)
+
+ ' 4) Ergebnisse in die DGV zurückschreiben
+ For Each row As DataGridViewRow In dgv.Rows
+ If row.IsNewRow Then Continue For
+ Dim key As String = If(row.Cells(0).Value, "").ToString().Trim()
+ If key = "" Then Continue For
+
+ Dim hit As MrnRow = Nothing
+ If results.TryGetValue(key, hit) Then
+ row.Cells("Datum").Value = If(hit.Datum.HasValue, hit.Datum.Value, CType(Nothing, Date?))
+ row.Cells("CustomsOfficeOfDestination").Value = hit.CustomsOfficeOfDestination
+ row.Cells("PlateNumber").Value = hit.PlateNumber
+ row.Cells("Customer").Value = hit.Customer
+ row.Cells("Agent").Value = hit.Firma
+ row.Cells("Comment").Value = ""
+ Else
+ ' Falls nicht gefunden, optional leeren:
+ row.Cells("Datum").Value = Nothing
+ row.Cells("CustomsOfficeOfDestination").Value = Nothing
+ row.Cells("PlateNumber").Value = Nothing
+ row.Cells("Customer").Value = Nothing
+ row.Cells("Agent").Value = Nothing
+ row.Cells("Comment").Value = "Not found"
+ End If
+ Next
+ End Sub
+
+ Private Sub EnsureDgvColumn(dgv As DataGridView, colName As String, t As Type)
+ If Not dgv.Columns.Contains(colName) Then
+ Dim c As New DataGridViewTextBoxColumn()
+ c.Name = colName
+ c.HeaderText = colName
+ dgv.Columns.Add(c)
+ End If
+ End Sub
+
+ Private Class MrnRow
+ Public Property MRN As String
+ Public Property Datum As Date?
+ Public Property CustomsOfficeOfDestination As String
+ Public Property PlateNumber As String
+ Public Property Customer As String
+ Public Property Firma As String
+ Public Property Source As String ' "NCTS" oder "TELOTEC"
+ End Class
+
+ Private Function LoadMrnData(mrns As List(Of String)) As Dictionary(Of String, MrnRow)
+ Dim res As New Dictionary(Of String, MrnRow)(StringComparer.OrdinalIgnoreCase)
+
+ Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
+ ' ---------- DAKOSY / NCTS ----------
+ Dim nctsParam = mrns.Select(Function(val, i) "@pN" & i).ToArray()
+ Dim nctsSql As String =
+ "SELECT
+ ncts_MRN AS MRN,
+ CAST(ncts_Trans_DatumZeit AS date) AS Datum,
+ ncts_CustomsOfficeOfDestinationDeclared AS CustomsOfficeOfDestination,
+ ISNULL(ncts_DepartureTransportMeans_1_IdentificationNumber, ncts_ActiveBorderTransportMeans_1_IdentificationNumber) AS PlateNumber,
+ [Aviso].Auftraggeber AS Customer,
+ CASE
+ WHEN LEFT(ncts_ObjectName,4) IN ('4801','4802') THEN 'ATILLA'
+ WHEN LEFT(ncts_ObjectName,4) = '5601' THEN 'UNISPED'
+ ELSE 'VERAG'
+ END AS Firma
+ FROM [VERAG].[dbo].[tblDakosy_NCTSOut004]
+ INNER JOIN tblDakosy_Zollanmeldungen ON ncts_dyaAnmID = dy_Id
+ LEFT JOIN [SQLGUIDE01].[AVISO].[dbo].[Aviso] ON dy_AvisoId = Avisoid
+ WHERE ncts_MRN IN (" & String.Join(",", nctsParam) & ");"
+
+ Using cmd As New SqlCommand(nctsSql, conn)
+ For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(nctsParam(i), mrns(i)) : Next
+ Using rd = cmd.ExecuteReader()
+ While rd.Read()
+ Dim m As New MrnRow With {
+ .MRN = rd("MRN").ToString(),
+ .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)),
+ .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()),
+ .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()),
+ .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()),
+ .Firma = If(rd("Firma") Is DBNull.Value, Nothing, rd("Firma").ToString()),
+ .Source = "DAKOSY/NCTS"
+ }
+ res(m.MRN) = m ' NCTS hat Vorrang
+ End While
+ End Using
+ End Using
+
+ ' ---------- TELOTEC ----------
+ Dim telParam = mrns.Select(Function(val, i) "@pT" & i).ToArray()
+ Dim teloSql As String =
+ "SELECT
+ telanm_CRN AS MRN,
+ CAST(Hea_DecDT AS date) AS Datum,
+ DestCO_Ref AS CustomsOfficeOfDestination,
+ Transp_CrossIdnt AS PlateNumber,
+ CAST(Mandant_ID AS nvarchar(50)) AS Customer,
+ '' AS Firma
+ FROM [VERAG].[dbo].[tblTelotec_Anmeldung]
+ WHERE telanm_CRN IN (" & String.Join(",", telParam) & ")
+ AND [telnam_aktuellsteNachricht] = 1;"
+
+ Using cmd As New SqlCommand(teloSql, conn)
+ For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(telParam(i), mrns(i)) : Next
+ Using rd = cmd.ExecuteReader()
+ While rd.Read()
+ Dim mrn As String = rd("MRN").ToString()
+ If Not res.ContainsKey(mrn) Then
+ Dim m As New MrnRow With {
+ .MRN = mrn,
+ .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)),
+ .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()),
+ .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()),
+ .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()),
+ .Firma = "",
+ .Source = "TELOTEC"
+ }
+ res.Add(mrn, m)
+ End If
+ End While
+ End Using
+ End Using
+
+
+ End Using
+ If cbxEZollDaten.Checked Then
+
+ Using conn As SqlConnection = SQL.GetNewOpenConnectionEZOLL()
+ ' ---------- EZOLL ----------
+ ' Hinweis: Falls die View in einer anderen DB/Connection liegt, ggf. eigene Connection öffnen (z. B. SQL.GetNewOpenConnectionEZOLL()).
+ Dim ezParam = mrns.Select(Function(val, i) "@pE" & i).ToArray()
+ Dim ezSql As String =
+ "SELECT
+ ISNULL(v.CRN,'') AS MRN,
+ CAST(v.AnmeldungsDatum AS date) AS Datum,
+ ISNULL(v.Bestimmungszollstelle,'') AS CustomsOfficeOfDestination,
+ (SELECT TOP 1 t.CrossIdnt FROM ezoll.dbo.zsAnmTransp t WHERE t.AnmID = v.AnmID) AS PlateNumber,
+ (SELECT TOP 1 c.Na FROM ezoll.dbo.zsAnmCarrTra c WHERE c.AnmID = v.AnmID) AS Firma,
+ (SELECT TOP 1 c.Na FROM ezoll.dbo.zsAnmCarrTra c WHERE c.AnmID = v.AnmID) AS Customer
+ FROM vwVERAG_Zolaris_EZoll_NCTS_Datenübernahme_Eroeffnung v
+ WHERE v.CRN IN (" & String.Join(",", ezParam) & ");"
+
+ Using cmd As New SqlCommand(ezSql, conn)
+ For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(ezParam(i), mrns(i)) : Next
+ Using rd = cmd.ExecuteReader()
+ While rd.Read()
+ Dim mrn As String = rd("MRN").ToString()
+ If mrn = "" Then Continue While
+ If Not res.ContainsKey(mrn) Then
+ Dim m As New MrnRow With {
+ .MRN = mrn,
+ .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)),
+ .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()),
+ .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()),
+ .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()),
+ .Firma = If(rd("Firma") Is DBNull.Value, Nothing, rd("Firma").ToString()),
+ .Source = "EZOLL"
+ }
+ res.Add(mrn, m)
+ End If
+ End While
+ End Using
+ End Using
+
+ End Using
+
+ End If
+ Return res
+ End Function
+
+ Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+ EnrichDgvWithMrnData(MyDatagridview1)
+ End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+ Me.Cursor = Cursors.WaitCursor
+ cProgramFunctions.genExcelFromDGV_NEW(MyDatagridview1, False)
+ Me.Cursor = Cursors.Default
+ End Sub
+
+ Public Sub ClearDgvKeepMrn(dgv As DataGridView)
+ If dgv Is Nothing Then Exit Sub
+
+ ' --- Spalten löschen (alle außer der ersten) ---
+ For i As Integer = dgv.Columns.Count - 1 To 1 Step -1
+ dgv.Columns.RemoveAt(i)
+ Next
+
+ ' --- Zeilen löschen ---
+ dgv.Rows.Clear()
+ End Sub
+
+ Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
+ ClearDgvKeepMrn(MyDatagridview1)
+ End Sub
+
End Class
\ No newline at end of file
diff --git a/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb b/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb
index 65affe11..377b0ad5 100644
--- a/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb
+++ b/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb
@@ -37,6 +37,7 @@ Partial Class usrCntlBrgBuchungenFremd
Me.MyComboBox1 = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.Label8 = New System.Windows.Forms.Label()
+ Me.Button1 = New System.Windows.Forms.Button()
CType(Me.picDurmaz, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GroupBox2.SuspendLayout()
Me.SuspendLayout()
@@ -142,6 +143,7 @@ Partial Class usrCntlBrgBuchungenFremd
'
'GroupBox2
'
+ Me.GroupBox2.Controls.Add(Me.Button1)
Me.GroupBox2.Controls.Add(Me.cbxEZollDaten)
Me.GroupBox2.Controls.Add(Me.MyComboBox1)
Me.GroupBox2.Controls.Add(Me.Label1)
@@ -206,6 +208,17 @@ Partial Class usrCntlBrgBuchungenFremd
Me.Label8.TabIndex = 14
Me.Label8.Text = "Bürgschaftsbuchungen Fremd"
'
+ 'Button1
+ '
+ Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.Button1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer))
+ Me.Button1.Location = New System.Drawing.Point(6, 84)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(121, 37)
+ Me.Button1.TabIndex = 17
+ Me.Button1.Text = "MRN Liste prüfen"
+ Me.Button1.UseVisualStyleBackColor = True
+ '
'usrCntlBrgBuchungenFremd
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -237,5 +250,5 @@ Partial Class usrCntlBrgBuchungenFremd
Friend WithEvents MyComboBox1 As VERAG_PROG_ALLGEMEIN.MyComboBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents cbxEZollDaten As System.Windows.Forms.CheckBox
-
+ Friend WithEvents Button1 As Button
End Class
diff --git a/SDL/zoll/usrCntlBrgBuchungenFremd.vb b/SDL/zoll/usrCntlBrgBuchungenFremd.vb
index 6c0f1b6f..c9ab8337 100644
--- a/SDL/zoll/usrCntlBrgBuchungenFremd.vb
+++ b/SDL/zoll/usrCntlBrgBuchungenFremd.vb
@@ -176,4 +176,9 @@ Public Class usrCntlBrgBuchungenFremd
Private Sub MyComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MyComboBox1.SelectedIndexChanged
cbxEZollDaten.Enabled = (MyComboBox1._value = "VERAG/ATILLA")
End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+ Dim f As New frmZollBrgBuchungenFremd
+ f.Show(Me)
+ End Sub
End Class
diff --git a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb
index 12ef5fcb..a923e844 100644
--- a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb
+++ b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb
@@ -319,4 +319,184 @@ Public Class MyDatagridview
End Sub
+ ' ========================================================
+ ' ================== COPY/PASTE SUPPORT ==================
+ ' ========================================================
+ ' Standard: Nur erste Spalte (MRN) befüllen. Auf False setzen, um Blöcke (mehrere Spalten) zuzulassen.
+
+ Public Property _PasteSingleColumn As Boolean = True
+
+ Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
+ ' Strg+V oder Shift+Insert => Einfügen
+ If (e.Control AndAlso e.KeyCode = Keys.V) OrElse (e.Shift AndAlso e.KeyCode = Keys.Insert) Then
+ PasteFromClipboard()
+ e.Handled = True
+ Return
+ End If
+ MyBase.OnKeyDown(e)
+ End Sub
+
+ '''
+ ''' Fügt den Clipboard-Text (Excel: TAB/CRLF) in die DGV ein.
+ '''
+ Public Sub PasteFromClipboard()
+ Dim text As String = Clipboard.GetText()
+ If String.IsNullOrWhiteSpace(text) Then Exit Sub
+
+ Dim lines = text.Split({vbCrLf, vbLf, vbCr}, StringSplitOptions.None)
+ If lines.Length > 0 AndAlso lines(lines.Length - 1).Trim() = "" Then
+ ReDim Preserve lines(lines.Length - 2)
+ End If
+ If lines.Length = 0 Then Exit Sub
+
+ Dim startRow As Integer = If(Me.CurrentCell IsNot Nothing, Me.CurrentCell.RowIndex, 0)
+ Dim startCol As Integer = If(Me.CurrentCell IsNot Nothing, Me.CurrentCell.ColumnIndex, 0)
+ If startRow < 0 Then startRow = 0
+ If startCol < 0 Then startCol = 0
+
+ ' Temporär das „Neue-Zeile“-Verhalten und Binding einfrieren
+ Dim oldAddRows = Me.AllowUserToAddRows
+ Me.AllowUserToAddRows = False
+ Me.SuspendLayout()
+ Dim cm As CurrencyManager = Nothing
+ Try
+ If TypeOf Me.DataSource Is DataTable Then
+ Dim bs As CurrencyManager = TryCast(Me.BindingContext(Me.DataSource), CurrencyManager)
+ cm = bs
+ cm?.SuspendBinding()
+ End If
+
+ For i As Integer = 0 To lines.Length - 1
+ Dim r As Integer = startRow + i
+ Dim rowText As String = lines(i)
+ If String.IsNullOrWhiteSpace(rowText) Then Continue For
+
+ Dim cells = rowText.Split(vbTab)
+ EnsureRowExists(r)
+
+ If _PasteSingleColumn Then
+ Dim targetCol As Integer = 0 ' MRN-Spalte
+ If targetCol >= 0 AndAlso targetCol < Me.Columns.Count Then
+ SetCellValueSafe(r, targetCol, cells(0))
+ End If
+ Else
+ For j As Integer = 0 To cells.Length - 1
+ Dim c As Integer = startCol + j
+ If c >= 0 AndAlso c < Me.Columns.Count Then
+ SetCellValueSafe(r, c, cells(j))
+ End If
+ Next
+ End If
+ Next
+
+ Me.EndEdit() ' Commits pending edits im Grid
+ If TypeOf Me.DataSource Is DataTable Then
+ DirectCast(Me.DataSource, DataTable).AcceptChanges()
+ End If
+ Finally
+ cm?.ResumeBinding()
+ Me.ResumeLayout()
+ Me.AllowUserToAddRows = oldAddRows
+ Me.Refresh()
+ End Try
+ End Sub
+
+ Private Sub SetCellValueSafe(rowIndex As Integer, colIndex As Integer, raw As String)
+ If rowIndex < 0 OrElse rowIndex >= Me.Rows.Count Then Exit Sub
+ Dim col = Me.Columns(colIndex)
+ Dim v As String = If(raw, String.Empty).Trim()
+
+ ' Fall A: Datengebunden -> direkt in DataTable schreiben (über DataPropertyName)
+ If TypeOf Me.DataSource Is DataTable Then
+ Dim dt = DirectCast(Me.DataSource, DataTable)
+ Dim prop = If(String.IsNullOrWhiteSpace(col.DataPropertyName), col.Name, col.DataPropertyName)
+ If Not dt.Columns.Contains(prop) Then
+ ' Kein gebundenes Feld vorhanden -> fallback auf Zellenwert
+ GoTo FallbackCell
+ End If
+
+ Dim targetType As Type = dt.Columns(prop).DataType
+ Dim obj As Object = DBNull.Value
+
+ Try
+ If targetType Is GetType(String) Then
+ obj = If(v = "", DBNull.Value, CType(v, String))
+ ElseIf targetType Is GetType(Date) OrElse targetType Is GetType(DateTime) Then
+ If v = "" Then
+ obj = DBNull.Value
+ Else
+ Dim d As DateTime
+ obj = If(DateTime.TryParse(v, d), d.Date, CType(v, Object))
+ End If
+ ElseIf targetType Is GetType(Integer) Then
+ Dim n As Integer
+ obj = If(Integer.TryParse(v, n), n, If(v = "", DBNull.Value, CType(v, Object)))
+ ElseIf targetType Is GetType(Decimal) OrElse targetType Is GetType(Double) OrElse targetType Is GetType(Single) Then
+ Dim decv As Decimal
+ obj = If(Decimal.TryParse(v, Globalization.NumberStyles.Any, Globalization.CultureInfo.CurrentCulture, decv),
+ Convert.ChangeType(decv, targetType),
+ If(v = "", DBNull.Value, CType(v, Object)))
+ Else
+ ' generischer Versuch
+ obj = If(v = "", DBNull.Value, Convert.ChangeType(v, targetType))
+ End If
+ Catch
+ obj = If(v = "", DBNull.Value, v)
+ End Try
+
+ ' DataRow sichern (bei neu erzeugten Zeilen existiert sie sicher)
+ Dim drv As DataRowView = TryCast(Me.Rows(rowIndex).DataBoundItem, DataRowView)
+ If drv IsNot Nothing Then
+ drv(prop) = obj
+ Else
+ ' Falls kein DataRowView (unwahrscheinlich): direkt über Index
+ dt.Rows(rowIndex)(prop) = obj
+ End If
+
+ Return
+ End If
+
+FallbackCell:
+ ' Fall B: Ungebunden -> direkt in die Zelle schreiben
+ Dim cell = Me.Rows(rowIndex).Cells(colIndex)
+ If cell Is Nothing OrElse cell.ReadOnly Then Exit Sub
+
+ Try
+ If cell.ValueType Is GetType(Date) OrElse cell.ValueType Is GetType(DateTime) Then
+ If v = "" Then
+ cell.Value = Nothing
+ Else
+ Dim d As DateTime
+ cell.Value = If(DateTime.TryParse(v, d), d.Date, CType(v, Object))
+ End If
+ ElseIf cell.ValueType Is GetType(Integer) Then
+ Dim n As Integer
+ cell.Value = If(Integer.TryParse(v, n), n, If(v = "", Nothing, v))
+ ElseIf cell.ValueType Is GetType(Decimal) OrElse cell.ValueType Is GetType(Double) Then
+ Dim decv As Decimal
+ cell.Value = If(Decimal.TryParse(v, Globalization.NumberStyles.Any, Globalization.CultureInfo.CurrentCulture, decv), decv, If(v = "", Nothing, v))
+ Else
+ cell.Value = If(v = "", Nothing, v)
+ End If
+ Catch
+ cell.Value = If(v = "", Nothing, v)
+ End Try
+ End Sub
+
+ Private Sub EnsureRowExists(targetRow As Integer)
+ If targetRow < Me.Rows.Count Then Exit Sub
+
+ If TypeOf Me.DataSource Is DataTable Then
+ Dim dt = DirectCast(Me.DataSource, DataTable)
+ Do While targetRow >= (If(Me.AllowUserToAddRows, Me.Rows.Count - 1, Me.Rows.Count))
+ dt.Rows.Add(dt.NewRow())
+ Loop
+ Else
+ Do While targetRow >= (If(Me.AllowUserToAddRows, Me.Rows.Count - 1, Me.Rows.Count))
+ Me.Rows.Add()
+ Loop
+ End If
+ End Sub
+ ' ========================================================
+ ' ========================================================
End Class
diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb b/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb
index a591ae56..f8f1e3b7 100644
--- a/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb
+++ b/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb
@@ -200,4 +200,29 @@ Public Class cZollArtikel
Return result
End Function
+ Public Shared Function FindZollArtikelByNummer(artikelListe As List(Of cZollArtikel), artikelnummer As String) As cZollArtikel
+ If artikelListe Is Nothing OrElse artikelnummer Is Nothing Then Return Nothing
+
+ Dim suchNr As String = artikelnummer.Trim().ToUpperInvariant()
+
+ ' Finde alle Artikel mit gleicher Artikelnummer
+ Dim treffer = artikelListe.
+ Where(Function(a) a IsNot Nothing AndAlso
+ a.zollArt_Artikelnummer IsNot Nothing AndAlso
+ a.zollArt_Artikelnummer.ToString().Trim().ToUpperInvariant() = suchNr).
+ ToList()
+
+ If treffer.Count = 0 Then Return Nothing
+ If treffer.Count = 1 Then Return treffer(0)
+
+ ' Wenn mehrere gefunden: wähle den mit längster Warencodenummer (zollArt_Warencodenummer)
+ Dim bester = treffer.OrderByDescending(Function(a)
+ Dim code = If(a.zollArt_Warencodenummer, "").ToString().Trim()
+ Return code.Length
+ End Function).
+ FirstOrDefault()
+
+ Return bester
+ End Function
+
End Class
diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb
index 040ed230..6f005aca 100644
--- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb
+++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb
@@ -23,8 +23,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs
'== Kafka: Konfiguration (Klassenebene)
'========================
Public Shared BootstrapServers As String = "192.168.85.250:9092" 'http://192.168.85.250:8888
- Public Shared TopicName As String = "greenpulse.declarationdata.v1"
- ' Public Shared TopicName As String = "dev.greenpulse.declarationdata.v1"
+ ' Public Shared TopicName As String = "greenpulse.declarationdata.v1"
+ Public Shared TopicName As String = "dev.greenpulse.declarationdata.v1"
' Falls SASL/TLS benötigt:
Public Shared UseSasl As Boolean = False
Public Shared SaslUsername As String = ""
@@ -66,6 +66,11 @@ Public Class cATEZ_Greenpulse_KafkaDecs
Public Property ImporterDetails As ImporterDetailsNode
+ '--- documents ---
+
+ Public Property Documents As List(Of DocumentNode)
+
+
'--- declaration ---
Public Class DeclarationNode
@@ -201,6 +206,19 @@ Public Class cATEZ_Greenpulse_KafkaDecs
Public Property ImporterCoordinateLatitudeY As String
End Class
+ Public Class DocumentNode
+
+ Public Property Reference As String
+
+
+ Public Property DocType As String
+
+
+ Public Property MimeType As String
+
+
+ Public Property Blob As String
+ End Class
'========================
'== Serialisierung
@@ -267,7 +285,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs
.ImporterPoBox = "PO DCL-123",
.ImporterCoordinateLongitudeX = "41.0091982",
.ImporterCoordinateLatitudeY = "28.9662187"
- }
+ },
+ .Documents = New List(Of cATEZ_Greenpulse_KafkaDecs.DocumentNode)()
}
End Function
@@ -298,6 +317,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs
.MaxInFlight = 5,
.MessageTimeoutMs = Math.Max(waitMs, 60000),
.RequestTimeoutMs = 30000,
+ .CompressionType = Confluent.Kafka.CompressionType.Zstd, ' gute Kompression
+ .MessageMaxBytes = 20971520, ' ≈ 20 MB – darf Topic/Broker nicht übersteigen
.EnableDeliveryReports = True,
.AllowAutoCreateTopics = True
}
@@ -379,7 +400,7 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY
Dim obj As New cATEZ_Greenpulse_KafkaDecs() With {
.Declaration = New cATEZ_Greenpulse_KafkaDecs.DeclarationNode() With {
- .DeclarationSourceId = SafeStr(head("Bezugsnummer_LRN")),
+ .DeclarationSourceId = SafeStr(head("Registriernummer_MRN")),
.DeclarationNo = SafeStr(head("Registriernummer_MRN")),
.DeclarationDate = FirstNonEmptyDateStr(head, {"Annahmedatum", "Überlassungsdatum"}),
.RequestedProcedure = SafeStr(head("Verfahren")),
@@ -412,7 +433,8 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY
.ImporterPoBox = "",
.ImporterCoordinateLongitudeX = "",
.ImporterCoordinateLatitudeY = ""
- }
+ },
+ .Documents = New List(Of cATEZ_Greenpulse_KafkaDecs.DocumentNode)()
}
' 2) Commercial (Rechnung) – aus Unterlagen N380, falls vorhanden
@@ -424,6 +446,38 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY
.DefaultIfEmpty(Nothing) _
.FirstOrDefault()
+ ' --- Dokumente aus Unterlagen übernehmen ---
+ Dim SQLS As New VERAG_PROG_ALLGEMEIN.SQL
+ Dim SenungsId = SQLS.getValueTxtBySql("SELECT dy_SendungsId from [tblDakosy_Zollanmeldungen] where dy_BezugsNr=''", "FMZOLL",,, Nothing)
+
+
+ If SenungsId IsNot Nothing Then
+ If IsNumeric(SenungsId) AndAlso SenungsId > 0 Then
+ Dim ANH_LIST As New List(Of cAvisoAnhaenge)
+ cAvisoAnhaenge.LOAD_LIST_BySendung(ANH_LIST, SenungsId)
+
+
+ For Each doc In ANH_LIST
+ Select Case doc.anh_Art
+ Case "Rechnung", "eFatura"
+
+ Dim dateiBytes As Byte() = System.IO.File.ReadAllBytes(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(doc.anh_docId))
+
+ Dim d As New cATEZ_Greenpulse_KafkaDecs.DocumentNode With {
+ .Reference = doc.anh_Name,
+ .DocType = "invoice",
+ .MimeType = cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY.GuessMimeTypeFromNumber(doc.anh_Typ),
+ .Blob = Convert.ToBase64String(dateiBytes)
+ }
+ obj.Documents.Add(d)
+ End Select
+
+ Next
+ End If
+
+ End If
+
+
If invRow IsNot Nothing Then
obj.Commercial.InvoiceNumbers = SafeStr(invRow("Unterlagennummer"))
obj.Commercial.InvoiceDate = SafeDateStr(invRow("Unterlagendatum"))
@@ -519,4 +573,15 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY
Return String.IsNullOrWhiteSpace(Convert.ToString(value))
End Function
+
+ Public Shared Function GuessMimeTypeFromNumber(num As Object) As String
+ ' Wenn du Dateiendungen erkennst (z. B. .pdf oder .jpg im Namen)
+ Dim s As String = SafeStr(num).ToLowerInvariant()
+ If s.EndsWith(".pdf") Or s.ToLower = "PDF" Then Return "application/pdf"
+ If s.EndsWith(".jpg") Or s.EndsWith(".jpeg") Or s.ToLower = "JPG" Or s.ToLower = "JPEG" Then Return "image/jpeg"
+ If s.EndsWith(".png") Or s.ToLower = "PNG" Then Return "image/png"
+ Return "application/octet-stream"
+ End Function
+
+
End Class
diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
index e799662e..88d63d69 100644
--- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
+++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
@@ -62,7 +62,7 @@ Public Class cRelayHub
Public Class cRelayHubAddress
Public Property addressType As String
Public Property participantEORI As String
- Public Property participantSubsidiaryNumber As String
+ Public Property participantSubsidiaryNumber As Integer
Public Property companyName As String
Public Property streetAndNumber As String
Public Property countryCode As String
@@ -131,7 +131,21 @@ Public Class cRelayHub
Try
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
- Dim jsonPayload As String = JsonConvert.SerializeObject(request)
+
+ Dim sanitized = Sanitize(request)
+ Dim settings As New JsonSerializerSettings With {
+ .NullValueHandling = NullValueHandling.Ignore,
+ .ContractResolver = New Newtonsoft.Json.Serialization.DefaultContractResolver With {
+ .NamingStrategy = New Newtonsoft.Json.Serialization.CamelCaseNamingStrategy()
+ }
+ }
+ Dim jsonPayload As String = JsonConvert.SerializeObject(sanitized, settings)
+ Console.WriteLine("JSON → " & jsonPayload)
+
+
+ 'Dim jsonPayload As String = JsonConvert.SerializeObject(request)
+
+
' 1. Versuch
Dim response As Chilkat.HttpResponse = SendJobOrder(jsonPayload)
@@ -208,6 +222,26 @@ Public Class cRelayHub
End Try
End Function
+ Private Shared Function Sanitize(req As cRelayHub.cRelayHubJobOrderRequest) As cRelayHub.cRelayHubJobOrderRequest
+ req.outputApplication = If(req.outputApplication, "").Trim()
+ req.dispatchCountry = If(req.dispatchCountry, "").Trim().ToUpperInvariant()
+ req.destinationCountry = If(req.destinationCountry, "").Trim().ToUpperInvariant()
+
+ ' lokale Fail-fast Checks
+ If req.dispatchCountry.Length <> 2 Then Throw New ApplicationException("dispatchCountry ISO-2 erforderlich.")
+ If req.destinationCountry.Length <> 2 Then Throw New ApplicationException("destinationCountry ISO-2 erforderlich.")
+ Dim allowed = New HashSet(Of String)(StringComparer.Ordinal) From {
+ "test", "dakosy/sftp/vera", "evrim/excel", "sec/import/integration"
+ }
+ If Not allowed.Contains(req.outputApplication) Then
+ Throw New ApplicationException("outputApplication muss 'test' | 'dakosy/sftp/vera' | 'evrim/excel' | 'sec/import/integration' sein.")
+ End If
+ If req.regimeType <> "IMPORT" AndAlso req.regimeType <> "EXPORT" Then
+ Throw New ApplicationException("regimeType muss 'IMPORT' oder 'EXPORT' sein.")
+ End If
+ Return req
+ End Function
+
' Beispielfall
Function CreateSampleJobOrderRequest() As cRelayHubJobOrderRequest
Dim req As New cRelayHubJobOrderRequest With {