From 4df07bd3d25e9148bae3ccbcf3abdec9b063cf06 Mon Sep 17 00:00:00 2001 From: Richard Date: Wed, 15 Jul 2026 09:27:34 +0200 Subject: [PATCH] UI: Master-Key-Button (Settings, via Designer) + UI-Designer-WIP + Steuer-PDF - Settings: neuer Toolbar-Button 'Master-Key erzeugen' (Tab General Settings, via Designer). Erzeugt zufaelligen 32-Byte-AES-Key -> master.key (gitignored), nur aktiv wenn KEIN Key existiert (Env-Var oder Datei), Lockout-Schutz + Backup-Warnung, danach deaktiviert. - Einbezogen: laufende Designer-Umstrukturierung (SettingsView/LauncherForm: Button-Bilder aus Properties.Resources statt eingebettet; dgv_accountlist im Launcher; DashboardView.resx). - docs/steuer: US-CPA-Fragebogen als PDF. Co-Authored-By: Claude Opus 4.8 --- Ui/LauncherForm.Designer.cs | 47 +++- Ui/Views/DashboardView.resx | 120 ++++++++++ Ui/Views/SettingsView.Designer.cs | 206 ++++++++---------- Ui/Views/SettingsView.cs | 53 +++++ Ui/Views/SettingsView.resx | 30 +-- .../Accounting-US-Tax-Questionnaire.pdf | 118 ++++++++++ 6 files changed, 427 insertions(+), 147 deletions(-) create mode 100644 Ui/Views/DashboardView.resx create mode 100644 docs/steuer/Accounting-US-Tax-Questionnaire.pdf diff --git a/Ui/LauncherForm.Designer.cs b/Ui/LauncherForm.Designer.cs index 5168eee..409be8d 100644 --- a/Ui/LauncherForm.Designer.cs +++ b/Ui/LauncherForm.Designer.cs @@ -32,10 +32,14 @@ namespace PolyTraderSharp.Ui lbl_trading = new ToolStripStatusLabel(); lbl_modules = new ToolStripStatusLabel(); lbl_ratelimit = new ToolStripStatusLabel(); + dgv_accountlist = new DataGridView(); + btn_accounting = new ToolStripButton(); + toolStripSeparator1 = new ToolStripSeparator(); menuStrip.SuspendLayout(); toolstrip_windows.SuspendLayout(); toolstrip_quickbar.SuspendLayout(); statusStrip_info.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dgv_accountlist).BeginInit(); SuspendLayout(); // // menuStrip @@ -54,18 +58,18 @@ namespace PolyTraderSharp.Ui miDatei.Name = "miDatei"; miDatei.Size = new Size(69, 29); miDatei.Text = "Datei"; - // + // // miBeenden // miBeenden.Name = "miBeenden"; - miBeenden.Size = new Size(275, 34); + miBeenden.Size = new Size(182, 34); miBeenden.Text = "Beenden"; // // toolstrip_windows // toolstrip_windows.AutoSize = false; toolstrip_windows.ImageScalingSize = new Size(64, 64); - toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_dashboard, btn_settings, btn_terminal, btn_jobs }); + toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_dashboard, btn_settings, btn_terminal, btn_jobs, btn_accounting, toolStripSeparator1 }); toolstrip_windows.Location = new Point(0, 35); toolstrip_windows.Name = "toolstrip_windows"; toolstrip_windows.Size = new Size(2599, 70); @@ -140,7 +144,7 @@ namespace PolyTraderSharp.Ui statusStrip_info.BackColor = Color.Gainsboro; statusStrip_info.ImageScalingSize = new Size(24, 24); statusStrip_info.Items.AddRange(new ToolStripItem[] { lbl_trading, lbl_modules, lbl_ratelimit }); - statusStrip_info.Location = new Point(0, 140); + statusStrip_info.Location = new Point(0, 637); statusStrip_info.Name = "statusStrip_info"; statusStrip_info.Size = new Size(2599, 32); statusStrip_info.TabIndex = 5; @@ -164,11 +168,40 @@ namespace PolyTraderSharp.Ui lbl_ratelimit.Size = new Size(66, 25); lbl_ratelimit.Text = "API: —"; // + // dgv_accountlist + // + dgv_accountlist.AllowUserToAddRows = false; + dgv_accountlist.AllowUserToDeleteRows = false; + dgv_accountlist.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dgv_accountlist.Dock = DockStyle.Fill; + dgv_accountlist.Location = new Point(0, 139); + dgv_accountlist.Name = "dgv_accountlist"; + dgv_accountlist.ReadOnly = true; + dgv_accountlist.RowHeadersWidth = 62; + dgv_accountlist.Size = new Size(2599, 498); + dgv_accountlist.TabIndex = 6; + // + // btn_accounting + // + btn_accounting.Image = Properties.Resources.coins_in_hand; + btn_accounting.ImageScaling = ToolStripItemImageScaling.None; + btn_accounting.ImageTransparentColor = Color.Magenta; + btn_accounting.Name = "btn_accounting"; + btn_accounting.Size = new Size(106, 65); + btn_accounting.Text = "Accounting"; + btn_accounting.TextImageRelation = TextImageRelation.ImageAboveText; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(6, 70); + // // LauncherForm // AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(2599, 172); + ClientSize = new Size(2599, 669); + Controls.Add(dgv_accountlist); Controls.Add(statusStrip_info); Controls.Add(toolstrip_quickbar); Controls.Add(toolstrip_windows); @@ -187,6 +220,7 @@ namespace PolyTraderSharp.Ui toolstrip_quickbar.PerformLayout(); statusStrip_info.ResumeLayout(false); statusStrip_info.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dgv_accountlist).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -208,5 +242,8 @@ namespace PolyTraderSharp.Ui private ToolStripStatusLabel lbl_trading; private ToolStripStatusLabel lbl_modules; private ToolStripStatusLabel lbl_ratelimit; + private ToolStripButton btn_accounting; + private ToolStripSeparator toolStripSeparator1; + private DataGridView dgv_accountlist; } } diff --git a/Ui/Views/DashboardView.resx b/Ui/Views/DashboardView.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Ui/Views/DashboardView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Ui/Views/SettingsView.Designer.cs b/Ui/Views/SettingsView.Designer.cs index ab9bc49..3d30b1c 100644 --- a/Ui/Views/SettingsView.Designer.cs +++ b/Ui/Views/SettingsView.Designer.cs @@ -17,52 +17,48 @@ namespace PolyTraderSharp.Ui.Views private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsView)); propertyGrid = new PropertyGrid(); toolStrip1 = new ToolStrip(); tabControl1 = new TabControl(); tabPage1 = new TabPage(); - tabPage2 = new TabPage(); toolStrip2 = new ToolStrip(); btn_save = new ToolStripButton(); btn_loadsettings = new ToolStripButton(); + btnGenMasterKey = new ToolStripButton(); + tabPage2 = new TabPage(); + pgAccount = new PropertyGrid(); + dgvAccounts = new DataGridView(); toolStripAccounts = new ToolStrip(); btnAccNew = new ToolStripButton(); btnAccDelete = new ToolStripButton(); - dgvAccounts = new DataGridView(); - colAccName = new DataGridViewTextBoxColumn(); - colAccWallet = new DataGridViewTextBoxColumn(); - colAccDemo = new DataGridViewCheckBoxColumn(); - colAccActive = new DataGridViewCheckBoxColumn(); - pgAccount = new PropertyGrid(); tabControl1.SuspendLayout(); tabPage1.SuspendLayout(); - tabPage2.SuspendLayout(); toolStrip2.SuspendLayout(); - toolStripAccounts.SuspendLayout(); + tabPage2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dgvAccounts).BeginInit(); + toolStripAccounts.SuspendLayout(); SuspendLayout(); - // + // // propertyGrid - // + // propertyGrid.Dock = DockStyle.Bottom; propertyGrid.Location = new Point(3, 610); propertyGrid.Margin = new Padding(4, 25, 4, 5); propertyGrid.Name = "propertyGrid"; propertyGrid.Size = new Size(1171, 274); propertyGrid.TabIndex = 1; - // + // // toolStrip1 - // + // toolStrip1.ImageScalingSize = new Size(24, 24); toolStrip1.Location = new Point(0, 0); toolStrip1.Name = "toolStrip1"; toolStrip1.Size = new Size(1185, 25); toolStrip1.TabIndex = 2; toolStrip1.Text = "toolStrip1"; - // + // // tabControl1 - // + // tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; tabControl1.Controls.Add(tabPage1); tabControl1.Controls.Add(tabPage2); @@ -71,9 +67,9 @@ namespace PolyTraderSharp.Ui.Views tabControl1.SelectedIndex = 0; tabControl1.Size = new Size(1185, 925); tabControl1.TabIndex = 3; - // + // // tabPage1 - // + // tabPage1.Controls.Add(toolStrip2); tabPage1.Controls.Add(propertyGrid); tabPage1.Location = new Point(4, 34); @@ -83,9 +79,43 @@ namespace PolyTraderSharp.Ui.Views tabPage1.TabIndex = 0; tabPage1.Text = "General Settings"; tabPage1.UseVisualStyleBackColor = true; + // + // toolStrip2 + // + toolStrip2.ImageScalingSize = new Size(24, 24); + toolStrip2.Items.AddRange(new ToolStripItem[] { btn_save, btn_loadsettings, btnGenMasterKey }); + toolStrip2.Location = new Point(3, 3); + toolStrip2.Name = "toolStrip2"; + toolStrip2.Size = new Size(1171, 34); + toolStrip2.TabIndex = 0; + toolStrip2.Text = "toolStrip2"; + // + // btn_save + // + btn_save.Image = Properties.Resources.diskette; + btn_save.ImageTransparentColor = Color.Magenta; + btn_save.Name = "btn_save"; + btn_save.Size = new Size(150, 29); + btn_save.Text = "Save Changes"; + // + // btn_loadsettings + // + btn_loadsettings.Image = Properties.Resources.token_quantifier; + btn_loadsettings.ImageTransparentColor = Color.Magenta; + btn_loadsettings.Name = "btn_loadsettings"; + btn_loadsettings.Size = new Size(223, 29); + btn_loadsettings.Text = "Load Settings from File"; + // + // btnGenMasterKey + // + btnGenMasterKey.DisplayStyle = ToolStripItemDisplayStyle.Text; + btnGenMasterKey.Name = "btnGenMasterKey"; + btnGenMasterKey.Size = new Size(200, 29); + btnGenMasterKey.Text = "Master-Key erzeugen"; + btnGenMasterKey.ToolTipText = "Erzeugt einen zufälligen AES-Master-Key (nur wenn noch keiner existiert)."; // // tabPage2 - // + // tabPage2.Controls.Add(pgAccount); tabPage2.Controls.Add(dgvAccounts); tabPage2.Controls.Add(toolStripAccounts); @@ -96,115 +126,56 @@ namespace PolyTraderSharp.Ui.Views tabPage2.TabIndex = 1; tabPage2.Text = "Polymarket Accounts"; tabPage2.UseVisualStyleBackColor = true; - // - // toolStrip2 - // - toolStrip2.ImageScalingSize = new Size(24, 24); - toolStrip2.Items.AddRange(new ToolStripItem[] { btn_save, btn_loadsettings }); - toolStrip2.Location = new Point(3, 3); - toolStrip2.Name = "toolStrip2"; - toolStrip2.Size = new Size(1171, 34); - toolStrip2.TabIndex = 0; - toolStrip2.Text = "toolStrip2"; - // - // btn_save - // - btn_save.Image = (Image)resources.GetObject("btn_save.Image"); - btn_save.ImageTransparentColor = Color.Magenta; - btn_save.Name = "btn_save"; - btn_save.Size = new Size(150, 29); - btn_save.Text = "Save Changes"; - // - // btn_loadsettings - // - btn_loadsettings.Image = (Image)resources.GetObject("btn_loadsettings.Image"); - btn_loadsettings.ImageTransparentColor = Color.Magenta; - btn_loadsettings.Name = "btn_loadsettings"; - btn_loadsettings.Size = new Size(223, 29); - btn_loadsettings.Text = "Load Settings from File"; - // - // toolStripAccounts - // - toolStripAccounts.ImageScalingSize = new Size(24, 24); - toolStripAccounts.Items.AddRange(new ToolStripItem[] { btnAccNew, btnAccDelete }); - toolStripAccounts.Location = new Point(3, 3); - toolStripAccounts.Name = "toolStripAccounts"; - toolStripAccounts.Size = new Size(1171, 34); - toolStripAccounts.TabIndex = 0; - // - // btnAccNew - // - btnAccNew.DisplayStyle = ToolStripItemDisplayStyle.Text; - btnAccNew.Name = "btnAccNew"; - btnAccNew.Size = new Size(130, 29); - btnAccNew.Text = "Neuer Account"; - // - // btnAccDelete - // - btnAccDelete.DisplayStyle = ToolStripItemDisplayStyle.Text; - btnAccDelete.Name = "btnAccDelete"; - btnAccDelete.Size = new Size(90, 29); - btnAccDelete.Text = "Löschen"; - // + // + // pgAccount + // + pgAccount.Dock = DockStyle.Fill; + pgAccount.Location = new Point(623, 37); + pgAccount.Name = "pgAccount"; + pgAccount.Size = new Size(551, 847); + pgAccount.TabIndex = 2; + // // dgvAccounts - // + // dgvAccounts.AllowUserToAddRows = false; dgvAccounts.AllowUserToDeleteRows = false; - dgvAccounts.AutoGenerateColumns = false; dgvAccounts.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgvAccounts.Columns.AddRange(new DataGridViewColumn[] { colAccName, colAccWallet, colAccDemo, colAccActive }); dgvAccounts.Dock = DockStyle.Left; dgvAccounts.Location = new Point(3, 37); dgvAccounts.MultiSelect = false; dgvAccounts.Name = "dgvAccounts"; dgvAccounts.ReadOnly = true; dgvAccounts.RowHeadersVisible = false; + dgvAccounts.RowHeadersWidth = 62; dgvAccounts.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvAccounts.Size = new Size(620, 847); dgvAccounts.TabIndex = 1; - // - // colAccName - // - colAccName.DataPropertyName = "Name"; - colAccName.HeaderText = "Name"; - colAccName.Name = "colAccName"; - colAccName.ReadOnly = true; - colAccName.Width = 200; - // - // colAccWallet - // - colAccWallet.DataPropertyName = "WalletAddress"; - colAccWallet.HeaderText = "Wallet"; - colAccWallet.Name = "colAccWallet"; - colAccWallet.ReadOnly = true; - colAccWallet.Width = 260; - // - // colAccDemo - // - colAccDemo.DataPropertyName = "IsDemo"; - colAccDemo.HeaderText = "Demo"; - colAccDemo.Name = "colAccDemo"; - colAccDemo.ReadOnly = true; - colAccDemo.Width = 60; - // - // colAccActive - // - colAccActive.DataPropertyName = "IsActive"; - colAccActive.HeaderText = "Aktiv"; - colAccActive.Name = "colAccActive"; - colAccActive.ReadOnly = true; - colAccActive.Width = 60; - // - // pgAccount - // - pgAccount.Dock = DockStyle.Fill; - pgAccount.Location = new Point(623, 37); - pgAccount.Name = "pgAccount"; - pgAccount.Size = new Size(551, 847); - pgAccount.TabIndex = 2; - // + // + // toolStripAccounts + // + toolStripAccounts.ImageScalingSize = new Size(24, 24); + toolStripAccounts.Items.AddRange(new ToolStripItem[] { btnAccNew, btnAccDelete }); + toolStripAccounts.Location = new Point(3, 3); + toolStripAccounts.Name = "toolStripAccounts"; + toolStripAccounts.Size = new Size(1171, 34); + toolStripAccounts.TabIndex = 0; + // + // btnAccNew + // + btnAccNew.Image = Properties.Resources.add; + btnAccNew.Name = "btnAccNew"; + btnAccNew.Size = new Size(157, 29); + btnAccNew.Text = "Neuer Account"; + // + // btnAccDelete + // + btnAccDelete.Image = Properties.Resources.cancel; + btnAccDelete.Name = "btnAccDelete"; + btnAccDelete.Size = new Size(104, 29); + btnAccDelete.Text = "Löschen"; + // // SettingsView - // + // AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1185, 1523); @@ -216,13 +187,13 @@ namespace PolyTraderSharp.Ui.Views tabControl1.ResumeLayout(false); tabPage1.ResumeLayout(false); tabPage1.PerformLayout(); - tabPage2.ResumeLayout(false); - tabPage2.PerformLayout(); toolStrip2.ResumeLayout(false); toolStrip2.PerformLayout(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dgvAccounts).EndInit(); toolStripAccounts.ResumeLayout(false); toolStripAccounts.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)dgvAccounts).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -237,6 +208,7 @@ namespace PolyTraderSharp.Ui.Views private TabPage tabPage2; private ToolStripButton btn_save; private ToolStripButton btn_loadsettings; + private ToolStripButton btnGenMasterKey; private ToolStrip toolStripAccounts; private ToolStripButton btnAccNew; private ToolStripButton btnAccDelete; diff --git a/Ui/Views/SettingsView.cs b/Ui/Views/SettingsView.cs index 8dd1727..b48c112 100644 --- a/Ui/Views/SettingsView.cs +++ b/Ui/Views/SettingsView.cs @@ -1,6 +1,8 @@ using System; using System.ComponentModel; +using System.IO; using System.Linq; +using System.Security.Cryptography; using System.Windows.Forms; using PolyTrader.Core.Persistence; using PolyTraderSharp.Models; @@ -33,6 +35,8 @@ namespace PolyTraderSharp.Ui.Views btn_save.Click += (_, _) => Save(); btn_loadsettings.Click += (_, _) => Reload(); + btnGenMasterKey.Click += (_, _) => GenerateMasterKey(); + UpdateMasterKeyButtonState(); btnAccNew.Click += (_, _) => AddAccount(); btnAccDelete.Click += (_, _) => DeleteAccount(); @@ -129,5 +133,54 @@ namespace PolyTraderSharp.Ui.Views _state?.Accounts.AddOrUpdate(acc.AccountId, acc, (_, _) => acc); dgvAccounts.Refresh(); } + + // ===== Master-Key (at-rest-Verschlüsselung, F1) ===== + + /// Pfad der Master-Key-Datei – identisch zu Program.cs (App-Ordner, gitignored). + private static string MasterKeyFilePath => Path.Combine(AppContext.BaseDirectory, "master.key"); + + /// Existiert bereits ein Master-Key (Umgebungsvariable ODER Datei)? + private static bool MasterKeyExists() => + !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("POLYTRADER_MASTER_KEY")) + || File.Exists(MasterKeyFilePath); + + /// Button nur aktiv, solange KEIN Master-Key existiert (Überschreiben = Lockout-Gefahr). + private void UpdateMasterKeyButtonState() => btnGenMasterKey.Enabled = !MasterKeyExists(); + + private void GenerateMasterKey() + { + // Sicherheitsnetz gegen Race/Doppelklick: einen bestehenden Key NIEMALS überschreiben. + if (MasterKeyExists()) + { + MessageBox.Show( + "Es existiert bereits ein Master-Key – Erzeugung abgebrochen. Ein Überschreiben würde den " + + "Zugriff auf bereits verschlüsselte Wallet-Keys unwiederbringlich zerstören.", + "Master-Key vorhanden", MessageBoxButtons.OK, MessageBoxIcon.Warning); + UpdateMasterKeyButtonState(); + return; + } + + try + { + byte[] keyBytes = RandomNumberGenerator.GetBytes(32); // 256-Bit-Schlüssel + File.WriteAllText(MasterKeyFilePath, Convert.ToBase64String(keyBytes)); + _logger?.Info("🔐 Master-Key erzeugt und in master.key gespeichert. At-rest-Verschlüsselung wird beim nächsten Start aktiv."); + + MessageBox.Show( + "Ein zufälliger 32-Byte-Master-Key wurde erzeugt und in der Datei 'master.key' (App-Ordner, gitignored) gespeichert.\n\n" + + "WICHTIG:\n" + + "• Sichere diese Datei SOFORT separat und sicher (z. B. Passwort-Manager / Offline-Backup).\n" + + "• Master-Key-Verlust = KEIN Zugriff mehr auf die verschlüsselten Wallet-Keys!\n" + + "• Die Verschlüsselung der Account-Credentials wird beim nächsten Programmstart aktiv.", + "Master-Key erzeugt", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Fehler beim Erzeugen des Master-Keys: {ex.Message}", + "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + UpdateMasterKeyButtonState(); // nach Erzeugung deaktivieren + } } } diff --git a/Ui/Views/SettingsView.resx b/Ui/Views/SettingsView.resx index be2d855..1353791 100644 --- a/Ui/Views/SettingsView.resx +++ b/Ui/Views/SettingsView.resx @@ -118,32 +118,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 17, 17 + 225, 17 - 162, 17 + 370, 17 + + + 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEBSURBVEhL3ZIvC8JAGIf3OTTZ/A62+RXs2g2rFsGi2P0C - WlwT02wGMQjLhgVRnAMR/5bVV37CHeduf9TdFQfPDt7wPOy9GWEYkk4MvGzbJsuylAInD2BgmqZS4JQC - 99tDCcoCl+OBPKdH3qxHe3eiPuAOTFq0CxwWURYQ5QBfojfgKA5sl0Mux7pwJx8H/NOdmvPj64yKs8gM - QFqdBlQc7V/nt5HUwDq4cTnj20hiYLW7Unnsv8l/icQGKrVGojwrgpk4lwL1VpdKw40kjCMaYfclzqVA - 3z1LojSYTPwZ2Bxrzh1gsujPALBmrDt3IA2sG2vXFgBw/lFAJwh0dGLofp4xWrfOyeSKuAAAAABJRU5E - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEBSURBVEhL3ZIvC8JAGIf3OTTZ/A62+RXs2g2rFsGi2P0C - WlwT02wGMQjLhgVRnAMR/5bVV37CHeduf9TdFQfPDt7wPOy9GWEYkk4MvGzbJsuylAInD2BgmqZS4JQC - 99tDCcoCl+OBPKdH3qxHe3eiPuAOTFq0CxwWURYQ5QBfojfgKA5sl0Mux7pwJx8H/NOdmvPj64yKs8gM - QFqdBlQc7V/nt5HUwDq4cTnj20hiYLW7Unnsv8l/icQGKrVGojwrgpk4lwL1VpdKw40kjCMaYfclzqVA - 3z1LojSYTPwZ2Bxrzh1gsujPALBmrDt3IA2sG2vXFgBw/lFAJwh0dGLofp4xWrfOyeSKuAAAAABJRU5E - rkJggg== - - \ No newline at end of file diff --git a/docs/steuer/Accounting-US-Tax-Questionnaire.pdf b/docs/steuer/Accounting-US-Tax-Questionnaire.pdf new file mode 100644 index 0000000..883c8f9 --- /dev/null +++ b/docs/steuer/Accounting-US-Tax-Questionnaire.pdf @@ -0,0 +1,118 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 10 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/Contents 12 0 R /MediaBox [ 0 0 612 792 ] /Parent 10 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +7 0 obj +<< +/Contents 13 0 R /MediaBox [ 0 0 612 792 ] /Parent 10 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/PageMode /UseNone /Pages 10 0 R /Type /Catalog +>> +endobj +9 0 obj +<< +/Author (PolyTrader) /CreationDate (D:20260714175142+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260714175142+02'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (US Tax Treatment Questionnaire \204 Polymarket Trading \(Florida LLC\)) /Trapped /False +>> +endobj +10 0 obj +<< +/Count 3 /Kids [ 5 0 R 6 0 R 7 0 R ] /Type /Pages +>> +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2584 +>> +stream +Gatmc$CL;;u[K*.@ag'p(afj$QCd(Q\Ft;$A^f]gcI[kcQ&O)3EkI]?I,l2LMpKr@>".Cg`O1^9\hs&>N_nSEX.hfNKooeaR(Ph]+S\Nc,]>*%=r:[nQIDMu@TIP^8hSAf5HUj^@!7"q60&2H'R.QW6QCJ*<%W,[hnMD"mrfX>IMdFlFOKPqEV:W:a88EFXuL(_kE5Utf>SZ&`3Fq[BS.uUhH3ZtF?(G4f%N^ikr68IW0M]X"'2QjWeggM@8qRh#hgb^.eLMR9`^r1\U(iSaW"HgR\gGtI0!#2uTd2X2S?L5X;-.rl46qO-;&CklQ+^^DL2&B/L1(cO(RaZI;:e//]+E$6:N,SI;)#C"#Q,=0)J)H-%6RKf0OmDug,A8#26/U[3;;^:dE^PLY*Bc>7qup8_1BLqJR>#kHTTWj%'B([Wq^=_34*+PJnI]sq&N@S'#VNYJBc=G3Kr67<;f.eK$d`8#(LCFi!Z+pg-s^^s4jZI,[ArrB=?mBU3]0WYbL&FpO^&/R:qYL*=,EV'=EYOfkZ^[@05/U73`.p$mskM@=oX"FPVjg)I,OFdNR666bc")qnSd"C"anq:>W_,S6$[`dXX!NVC6O>R=J>O[4%B13Acn&df*Yo?lKgA_D3/`/Se@XQgb\4;Ao52;a^jfO]eIaue8SrbDIb-BsoHO>e!CY&%p.LpS=6qUGiHZiSoV7qN)T1Z$:t6RCME6BcE2[AIcbZ^4nT5lt9lFuZ#sU&W/`rD]i1a`p#kd._2q2emu(BN9Qb/X9gC-q@BogF:t=$NRX=o;ht4\%+e59++ISg<(/^/NQ[(!tgnGLr:HM,Ds?9P'-0oR@]4gG.P/Wk^k$d/^u+G9Zh^.7_80q#_*h.ZRp!W2!F3CL!`Ut[4HcU*0e8g]QFD>Yh]4QOpoh#b$`21%kq+HWu1K/3'/tG]piPC[M=\/JVmp%BgAP\%Ap8^Vd;+obuP?0V*JBT6DO'VaE&V39$kVWl@p0V$ut%4@Etke7qq>nLqI^eM3?eO\63n6R2p!@Tn/qsf*8r!D)!#VL$`oiIK<8&)BW-b'!$P'7l$AKEg8M*$dXSU5mL^/VLI%g#$Q!q<__t[q>f;W[I)&B^?%[o-k#keAShZMX+;F"$I8"BQ$VJZ!4@nmn/F$gF6IRKC3*bRK"j'dMiU6?9Cmk&(ioBN/q]2%]5@-5_Jk42aJ[6Xk09cP2fkuSAb&d4ni^fqoJ4Jq#c$LoRO,G.i:\_DWr0JZ9BX#6c7LjaPt$aG`VQN(^WF?%1FSI0UUbrE2/HRn7!F:M'M?9O!g.LH7=IcV>P0^d.Y(;Ad+=2fD?OJ$8H>'mp7:l$akON7V:cbm]F.\@@TJ#I==SepG;9&7L&a9gnP'ZH(oDLhTUbI9X!S'#UfWEFG.,bh-I9.&kOQ7a0_"#N"['7)cPVPTiIf-MeRH=DNQ6GX\J[SJO;7.lmj_?'pk"'khi5Ue^20:kjs^tkeh1;'d\dpQu@PeF-fJOY[Z,\+OMq,EbSAZV_$4;DDJ\A**pk[M2L[J2S,%'0AlcVrec<_D)np:Yj(;)Pmmo"20`e9DPP"^m,9$1g)iJ(=>P:a"YG/8^h?6QM*88?Hu.]S?hZ>KY>?q(ilFo5#d*kk:B-2H`4_rqEcQAUHd#QNY!'DC?+M9'UJ#l>TV3RAS;@47][,`eH,9QLa2ad>3Dp:uJrSfNR4eqV/)#<9R2YXT5ps$VGOB'm_hs]e2_-s-q2T)(G0Y^gon,67P*Gbb);dsE1Ff^K*Z(EW~>endstream +endobj +12 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2499 +>> +stream +Gatm3&+*D6bEA6]mmNe$AQ;3Rsp98PP%5&0%ia?Fm14YS5"q.S_o@/,348KTIDB4LiK2jHc0_0^Y]48RfA3ZS#ARW%/t\Cc-:aR>&5IJ^'He/uP/W;;@S=5%/61kUtg.Z.eX^7uHJpB'IJ*di>\s=Q:Q`d1t\*cTen:Q[c+NGsd(;TBcOMqs?grJdUkuQQ1=o=r@Q59B]?*5f5).#6(GLB:H"4]s+.:6dCZjTj[7=Lk_/BSqdYc*G(b("fM"r8J3:GmA_kgp*)n6'1Z'G\HUY%84q'Mk^(S?3C\5H[A#jT?>Du\2]0h.^0HHL^CL.'pJ7;1]=c7LChNRhW7O,oh5KV`0m]'@-b+a$$AN);qU!2#`300Fe82`!*fH0-Y?9]C+UPb?X)kSd5=+@8mfmHo3ZC<#IU&`842mk[B$=V\1qShr-s9NJ$&T3%?gnZR)3JN&rjgOg6Je;.5YXfU9]=_H-Q'?/"QO'e?C""GPTV(*.b\@HaoI*Q05N'iIIKO2Bl-47%Ebs8$"Spj@WaG/(,`4(L4!S*,eYIRPn6F6P@\fW"t@L?Cf?%V`>;a4s[nc#0bbGV@mmrS%>OX7?W!71!o=0lcA41]d/Jm#,CoPEj52.`!-8E#?JOgCp=1ubGBj_7e3kE*I`)UN&jZO0%XE=1OK#4A.Pb,]-5k1.n90k^Gf6MV]n;Y\M=XHl-`;@pGDj_>#HN,g^ECq7'dX7Va;+mN/T;F::bLgXm%_WnI5g;H;XJ5"e%02cKsHaY.hkCSWOrE,dVh?nC1@4>qC.h`RKkYg4'-+60^:DpTu7c_^7c/U*#`D4ak_b.8c:P]4[U,iE'GeGNVV3#rWU=#0OAg?.^a&]%Y/P0,P3)D<%Jm-cUZ%P]cHEZb7_&,d0TH5qB"rO@oBC0$%A#F'O7g8O-dPD?7_Kre&\]UIW)ek7qY]c&%V/VosaO(,JG3FFcC;qlQ'sh_t=)D92/Gs6YW%bEendstream +endobj +13 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2449 +>> +stream +Gatmfr2rD"_,G?"TY\"If2/i8sVk6W7nhm8lS1[SEZI+ks7]\rZ_*)(.98-eA$hg)UNjt;%b-2^SU8l]5R/,3tlsN)N:-BK4/TrdIC3gm=M:iI5m%78MZtVb6mOiYpH=CK'%R0r1A/!]gkRanFiBr?ONa&\Y6QCR4+EogR9X)KIeuD%L-G>nj%9iSURcP[_J,%.)*1\mkB.$o/O\6UZi&VBi-r+mC\K,p5M@#%]A9Mjr=)54m_&7-jm*"U&.b]lG+51#)ADSf-0n+p2\-Y.Q-37kO__f;0&e<=g?eb_nWC#WOZp6o[m=0bUfP>qPNe._7Aus"_/uS=u+pKqsCgbU0K+DNP`:W`Ohr-_JGV:V56Ld'Q07G5o5d/U;K8rmM5@2Q8je"GG@ZIZ!Z8M7arn"QN>bP>kFshj#4XD@6n@t!la$b>03VS4+$5C\bV[O]mb9!N%cF6_C8#tbCr'hfjS.9W]4C^Q^MSZe?JrJG`*PLU7=9tKq"$#[VX>Mrj9-qL7?h8:$:WSiWcEkW'FFl&Yhj@tl&9"ONlIlYe9I`On&tr8peHb6EQ^kgpd`2d66#rh.irEq;P)MM'3:]%W#t$:gEJ4nEPgHRa-s>o%B)UdTl:W'A'H"-_at5upOuCN`m5ANV$miVinC1:G@L?eB>lIgb,1U,TmF'",:bk1n:d^=%.IP[GNu8_l%qnum`QRn=r_>*tYFKSR$V')8U.hFbhKV@Dp4VXYMaef,k`Q@^OuB2O57rpVep`GE6E#KK+6Y49@]h"/H"i`dDlpeREo1'8&5,QK7REB1B6F/6ZMO-2baDKlFDVboYm=>_9#MW;pTM=C3iR94<1<]Y4#eV$co'k)&+7@1N^(CP8Idd37qo71;DeLNcHu3:Lqa_S2(k-#9)dm>2I-laNK;I!p!M/muC]@CA:5%8ffTJ8`UNW!W^!0"pPOp=T=T>K9`3m"A`9%74fF7I,4CDkPm/-D8J0Q]"?6St=l9c*c5Q02.['LBhL4W-*LAC-kT]g>.E2Ht!?].TR*$(#98s0:k/-5?IiaQ`'h68@W]e#Ghro:aJcR$m.T'"][Ndo#GGm+8@GZW]"OZBQG3^>E?+`V);t*I4K#W_?lVlG'2PBaI7*.UAX8qA+;D+NUZ]%cj*$a@RauoNh)oIg,$AtP-G[)om*0/c4WZ/,/mWIf.^?-Fd_\a?86PPA)m7;YNjZ4i^PBlR47W3=Ot#M+oY`F?Fm1F*X.EoOI?sh/Bk+K^9:qS"qmk4$i*cd6qR=lo!;Oo8c3YV8K<[(L4`fU(SoMG)%l?KrCcZOGq^SkLq[KPgpJI?pV@Q=W3mN6*HK@:\6=O/q5h1OAHJP^h*/"u<<+,kWI9o#,%CbS^i!I*X#E`,PR?=TaEq#?]j;%rCQD/f(_HuX-9`hUW]"$nVtVPA)spRg<-DJ;BCegC0Xe&0;Z7EK`%_aoe+q&%]aN+q"Ea1+,^5.]I8@\VQ.P*]d9>\d9nm8Q\/O_1Nj<'F]10F=.8Dk$')m21%A5NH3Y+fHC]X1gdNYg"I#XJPP\5"?kZiT)~>endstream +endobj +xref +0 14 +0000000000 65535 f +0000000061 00000 n +0000000112 00000 n +0000000219 00000 n +0000000331 00000 n +0000000446 00000 n +0000000641 00000 n +0000000836 00000 n +0000001031 00000 n +0000001100 00000 n +0000001434 00000 n +0000001506 00000 n +0000004182 00000 n +0000006773 00000 n +trailer +<< +/ID +[<18477745dd8f1284102189041b6ea342><18477745dd8f1284102189041b6ea342>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 9 0 R +/Root 8 0 R +/Size 14 +>> +startxref +9314 +%%EOF