From d05da0c6921c23869fa2b1718ca4f239da775837 Mon Sep 17 00:00:00 2001 From: VitaliyCeban Date: Tue, 12 Jul 2022 16:10:56 +0300 Subject: [PATCH] Set raw hashes --- PasswordChanger1C/MainForm.Designer.cs | 49 ++- PasswordChanger1C/MainForm.cs | 105 ++++++- PasswordChanger1C/MainForm.resx | 291 +----------------- PasswordChanger1C/PasswordChanger1C.csproj | 9 + PasswordChanger1C/RawHashesPrompt.Designer.cs | 124 ++++++++ PasswordChanger1C/RawHashesPrompt.cs | 26 ++ PasswordChanger1C/RawHashesPrompt.resx | 120 ++++++++ PasswordChanger1C/SQLInfobase.cs | 12 + 8 files changed, 444 insertions(+), 292 deletions(-) create mode 100644 PasswordChanger1C/RawHashesPrompt.Designer.cs create mode 100644 PasswordChanger1C/RawHashesPrompt.cs create mode 100644 PasswordChanger1C/RawHashesPrompt.resx diff --git a/PasswordChanger1C/MainForm.Designer.cs b/PasswordChanger1C/MainForm.Designer.cs index b4bd300..30d6501 100644 --- a/PasswordChanger1C/MainForm.Designer.cs +++ b/PasswordChanger1C/MainForm.Designer.cs @@ -35,7 +35,7 @@ protected override void Dispose(bool disposing) [DebuggerStepThrough()] private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.components = new System.ComponentModel.Container(); this._Button6 = new System.Windows.Forms.Button(); this.FileIB = new System.Windows.Forms.TextBox(); this.OpenFileDialog = new System.Windows.Forms.OpenFileDialog(); @@ -87,10 +87,15 @@ private void InitializeComponent() this._LinkLabel1 = new System.Windows.Forms.LinkLabel(); this.Label3 = new System.Windows.Forms.Label(); this._LinkLabel2 = new System.Windows.Forms.LinkLabel(); + this.SetRawHashesSQL = new System.Windows.Forms.Button(); + this.ContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.CopyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ColumnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.TabControl1.SuspendLayout(); this.TabPage1.SuspendLayout(); this.TabPage2.SuspendLayout(); this.TabPage3.SuspendLayout(); + this.ContextMenu.SuspendLayout(); this.SuspendLayout(); // // _Button6 @@ -360,6 +365,7 @@ private void InitializeComponent() // // TabPage2 // + this.TabPage2.Controls.Add(this.SetRawHashesSQL); this.TabPage2.Controls.Add(this.Label7); this.TabPage2.Controls.Add(this._cbDBType); this.TabPage2.Controls.Add(this.TextBox2); @@ -409,7 +415,7 @@ private void InitializeComponent() this.TextBox2.Location = new System.Drawing.Point(9, 413); this.TextBox2.Multiline = true; this.TextBox2.Name = "TextBox2"; - this.TextBox2.Size = new System.Drawing.Size(610, 24); + this.TextBox2.Size = new System.Drawing.Size(506, 24); this.TextBox2.TabIndex = 22; this.TextBox2.Text = "Монопольного режима доступа к базе не требуется"; // @@ -467,6 +473,7 @@ private void InitializeComponent() this.ColumnHeader2, this.ColumnHeader3, this.ColumnHeader4, + this.ColumnHeader6, this.ColumnHeader5}); this.SQLUserList.FullRowSelect = true; this.SQLUserList.HideSelection = false; @@ -476,6 +483,7 @@ private void InitializeComponent() this.SQLUserList.TabIndex = 20; this.SQLUserList.UseCompatibleStateImageBehavior = false; this.SQLUserList.View = System.Windows.Forms.View.Details; + this.SQLUserList.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SQLUserList_MouseClick); // // ColumnHeader1 // @@ -616,6 +624,36 @@ private void InitializeComponent() this._LinkLabel2.Text = "© Aleksey.Bochkov"; this._LinkLabel2.Click += new System.EventHandler(this.LinkLabel2_Click); // + // SetRawHashesSQL + // + this.SetRawHashesSQL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.SetRawHashesSQL.Location = new System.Drawing.Point(544, 414); + this.SetRawHashesSQL.Name = "SetRawHashesSQL"; + this.SetRawHashesSQL.Size = new System.Drawing.Size(75, 51); + this.SetRawHashesSQL.TabIndex = 25; + this.SetRawHashesSQL.Text = "Установить сырые хеши"; + this.SetRawHashesSQL.UseVisualStyleBackColor = true; + this.SetRawHashesSQL.Click += new System.EventHandler(this.SetRawHashesSQL_Click); + // + // ContextMenu + // + this.ContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.CopyToolStripMenuItem}); + this.ContextMenu.Name = "ContextMenu"; + this.ContextMenu.Size = new System.Drawing.Size(140, 26); + // + // CopyToolStripMenuItem + // + this.CopyToolStripMenuItem.Name = "CopyToolStripMenuItem"; + this.CopyToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.CopyToolStripMenuItem.Text = "Копировать"; + this.CopyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); + // + // ColumnHeader6 + // + this.ColumnHeader6.Text = "Хеш пароля 2"; + this.ColumnHeader6.Width = 220; + // // MainForm // this.AccessibleRole = System.Windows.Forms.AccessibleRole.Application; @@ -627,10 +665,10 @@ private void InitializeComponent() this.Controls.Add(this._LinkLabel1); this.Controls.Add(this.TabControl1); this.HelpButton = true; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "MainForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Изменение паролей для информационных баз и хранилища 1С"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.Shown += new System.EventHandler(this.MainForm_Shown); this.TabControl1.ResumeLayout(false); this.TabPage1.ResumeLayout(false); @@ -639,6 +677,7 @@ private void InitializeComponent() this.TabPage2.PerformLayout(); this.TabPage3.ResumeLayout(false); this.TabPage3.PerformLayout(); + this.ContextMenu.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -945,6 +984,10 @@ internal LinkLabel LinkLabel2 internal Label LabelDatabaseVersionRepo; internal Label Label7; private ComboBox _cbDBType; + private Button SetRawHashesSQL; + private ContextMenuStrip ContextMenu; + private ToolStripMenuItem CopyToolStripMenuItem; + internal ColumnHeader ColumnHeader6; internal ComboBox cbDBType { diff --git a/PasswordChanger1C/MainForm.cs b/PasswordChanger1C/MainForm.cs index 632ba9e..bc48058 100644 --- a/PasswordChanger1C/MainForm.cs +++ b/PasswordChanger1C/MainForm.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Text; using System.Windows.Forms; namespace PasswordChanger1C @@ -213,6 +214,7 @@ private void Fill_itemUserList_SQL() itemUserList.SubItems.Add(Row.Name); itemUserList.SubItems.Add(Row.Descr); itemUserList.SubItems.Add(Row.PassHash); + itemUserList.SubItems.Add(Row.PassHash2); itemUserList.SubItems.Add(Row.AdmRole); SQLUserList.Items.Add(itemUserList); } @@ -307,7 +309,60 @@ public void SetUsers_SQLInfobase(in SQLInfobase.DBMSType dbms_type) MessageBoxIcon.Error); } } - + + public void SetUsersRawHashes_SQLInfobase(in SQLInfobase.DBMSType dbms_type, string passHash, string passHash2) + { + bool is_Success = true; + List Selected_ID = new(); + foreach (ListViewItem item in SQLUserList.SelectedItems) Selected_ID.Add(item.Text); + + var SelectedUsers = SQLUsers.FindAll(user => Selected_ID.Contains(user.IDStr) && user.PassHash != ""); + if (0 == SelectedUsers.Count) + { + MessageBox.Show("Невозможно изменить пароль выбранным пользователям, так как авторизация средставми 1С не используется", + "Ошибка изменения пароля", MessageBoxButtons.OK, + MessageBoxIcon.Error); + return; + } + + var UserNames = string.Join(", ", SelectedUsers.Select(user => user.Name)); + + var factory = SQLInfobase.CreateConnectionFactory(dbms_type, ConnectionString.Text); + + try + { + var Users = new SQLInfobase.Users(dbms_type, factory); + foreach (var SelectedUser in SelectedUsers) + { + var User = SelectedUser; + SQLInfobase.UpdateRawHashes(ref User, passHash.Trim(), passHash2.Trim()); + is_Success = is_Success && Users.Update(User); + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при попытке записи новых данных пользователей в базу данных:" + Environment.NewLine + + ex.Message, + "Ошибка работы с базой данных", MessageBoxButtons.OK, + MessageBoxIcon.Error); + return; + } + + if (is_Success) + { + MessageBox.Show("Успешно установлен пароль для пользователей:" + Environment.NewLine + UserNames, + "Операция успешно выполнена", MessageBoxButtons.OK, + MessageBoxIcon.Information); + GetUsers_SQLInfobase(dbms_type); + } + else + { + MessageBox.Show("Не удалось установить пароль пользователям:" + Environment.NewLine + UserNames, + "Ошибка установки пароля", MessageBoxButtons.OK, + MessageBoxIcon.Error); + } + } + private void ButtonSetRepoPassword_Click(object sender, EventArgs e) { if (RepoUserList.SelectedItems.Count == 0) @@ -424,5 +479,53 @@ private void CbDBType_SelectedIndexChanged(object sender, EventArgs e) _ => throw new SQLInfobase.WrongDBMSTypeException("unknown DBMS type"), }; } + + private void SetRawHashesSQL_Click(object sender, EventArgs e) + { + if (SQLUserList.SelectedItems.Count == 0) + { + MessageBox.Show("Не выделены строки с пользователями для установки нового пароля!", + "Не выделены строки с пользователями", MessageBoxButtons.OK, + MessageBoxIcon.Information); + return; + } + + var Rez = MessageBox.Show("Внесение изменений в базу данных может привести к непредсказуемым последствиям, вплоть до полного разрушения базы. " + Environment.NewLine + + "Продолжая операцию Вы осознаете это и понимаете, что восстановление будет возможно только из резервной копии." + Environment.NewLine + + "Установить новый пароль выбранным пользователям?", + "ВНИМАНИЕ!", MessageBoxButtons.YesNo); + if (Rez != DialogResult.Yes) + { + return; + } + + using var form = new RawHashesPrompt(); + if (form.ShowDialog() != DialogResult.OK) + return; + + SetUsersRawHashes_SQLInfobase(Selected_DBMSType(), form.PasswordHash.Text, form.PasswordHash2.Text); + } + + private void CopyToolStripMenuItem_Click(object sender, EventArgs e) + { + StringBuilder sb = new StringBuilder(); + foreach (var item in SQLUserList.SelectedItems) + { + ListViewItem l = item as ListViewItem; + if (l != null) + foreach (ListViewItem.ListViewSubItem sub in l.SubItems) + sb.Append(sub.Text + "\t"); + sb.AppendLine(); + } + Clipboard.SetDataObject(sb.ToString()); + } + + private void SQLUserList_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + ContextMenu.Show(SQLUserList, e.Location); + } + } } } \ No newline at end of file diff --git a/PasswordChanger1C/MainForm.resx b/PasswordChanger1C/MainForm.resx index cd0c9dd..c1bc66e 100644 --- a/PasswordChanger1C/MainForm.resx +++ b/PasswordChanger1C/MainForm.resx @@ -123,292 +123,7 @@ 152, 17 - - - - AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAA - AAD///////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////++////lv///ycAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA///////////h4vD/w8Th/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ - 4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ - 4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ - 4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnk/83O5v/u7vb///////// - ///////0////hv///yYAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////eXu8/wAAe/8HDIX/BwyF/wcM - hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcM - hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcM - hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wgM - hf8QE4n/Q0ej/36AwP/e3+/////////////////q////NQAAAAAAAAAAAAAAAAAAAAD//////////4CC - wv8EB4f/FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY - j/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY - j/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY - j/8VGI//FRiP/xUYj/8VGI//FBeO/wwPiv8IDIj/KSuY/4KEw//n6PT//////////+////88AAAAAAAA - AAAAAAAA//////////+AgsT/BAeL/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY - k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY - k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY - k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8WGJP/FReT/xETkP8KDY7/MTOg/9LS - 6///////////7f///zMAAAAAAAAAAP//////////gYLI/wUHj/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY - l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY - l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY - l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY - l/8WGJf/FhiY/w4Qk/8wM6T/zs/p///////////q////KAAAAAD//////////4GCyv8FB5T/Fhic/xYY - nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY - nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY - nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY - nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/DhCX/zI0p//n5/X//////////5wAAAAA//////// - //+Bgsz/BgeZ/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY - oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY - oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY - oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8MDZv/f4DM//// - ////////////OP//////////goLO/wcHnf8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY - pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY - pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY - pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY - pP8YGKT/ExOj/yEiqP/Ly+v//////////5T//////////4KC0f8HB6L/GBip/xgYqf8YGKn/GBip/xgY - qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY - qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY - qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY - qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8KCqP/fX3P///////////O//////////+CgtP/CQen/xkY - rf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkY - rf8ZGK3/GRit/xkYrf8WFaz/ExOr/xIRqv8QD6n/Dg2p/w0MqP8NC6j/DAuo/wwLqP8NC6j/DQyp/w8N - qf8QD6n/EhGq/xMTq/8WFaz/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkY - rf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/EhGq/zo6uf/n5/b///////// - ////////goLV/wkHqv8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkY - sP8ZGLD/GRiw/xkXsP8XFq//Fxav/xkXsP8ZF7D/IiGz/zQ0uf9AQb3/S0zB/1RWxP9bXcj/YGLJ/2Nl - yv9jZMr/YGHJ/1tcx/9TVMT/SkvA/z8/vf8yMbn/IyKz/xgXsP8ZGLD/GRiw/xkXsP8ZGLD/GRiw/xkY - sP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkX - sP8TE67/zc3u/////////////////4OC1/8KB67/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoY - tP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xgWs/8WFLP/JiS4/ycmuP8WFLL/FxWz/3N00f/Dyev/0tnx/+Lq - 9v/u9vr/9Pz8//j//f/6//7/+v/+//j//f/z+/v/7fX6/+Ho9f/Q1vD/vMHq/56i4P80NLz/FROy/xMS - sf8VE7L/ExKy/xgWs/8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoY - tP8aGLT/Ghi0/xoYtP8aGLT/Dgyw/8rJ7v////////////////+Dg9j/Cgqx/xoatv8aGrb/Ghq2/xoa - tv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xgZtv8cHLf/dHjU/9HX8f/X3fL/cnTS/xoa - tv+fpOH///////j//f/3//z/9v78//X+/P/1/fz/9P38//T9/P/1/fz/9v78//b//P/3//z/9//8//n/ - /f/z+vv/UFLI/xgatv9mac//kJLc/2Bjzf8bG7f/GRm2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoa - tv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/w4Osv/Jye7/////////////////g4PZ/wsL - s/8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8VFbb/TE7I//L6 - +//5//3/+v/9/+nx+P9FRsT/k5fe//v//v/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//1/fz/6fD4/0VGxP9dYM3/8/v8///////v9/r/XWDN/xUVtv8aG7j/Gxu4/xsb - uP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8PD7T/ysrv//// - /////////////4OE2f8LDLP/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xsc - uP8bHLj/ExO1/4OI2f/6//7/8/v7//P7+//6//7/ZWjQ/5GW3f/7//7/9Pz7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+bu9/9JS8f/o6jj//7//v/0/Pv//f/+/7G2 - 5/8jJLv/GBm3/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xsc - uP8bHLj/DxC0/8rK7/////////////////+DhNr/Cw21/xsduv8bHbr/Gx26/xsduv8bHbr/Gx26/xsd - uv8bHbr/Gx26/xsduv8bHbr/Gx26/xITtv+coeH/+//9//P7+//z+/v/+P/9/2xw0/+Rl97/+//9//T8 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/j6/b/UlXL/7nB - 6//9//7/8/v7//n//f/V2/L/Oz7E/xQVt/8bHbr/Gx26/xsduv8bHbr/Gx26/xsduv8bHbr/Gx26/xsd - uv8bHbr/Gx26/xsduv8bHbr/Gx26/w8Rtv/Kyu//////////////////g4Xa/wsOtf8bHrr/Gx66/xse - uv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8SE7f/pKrk//v//f/z+/v/8/v7//j/ - /f9xdtX/k5je//v//f/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//1/fz/4+r2/1pezv/AyOz//P/+//P7+//3//z/4+v2/0lNyf8SFLf/Gx66/xseuv8bHrr/Gx66/xse - uv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8PErb/ysrv/////////////////4OG - 2/8LD7b/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/EhS4/6Sp - 5P/7//3/8/v7//P7+//4//3/cXbV/5OZ3//7//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/9f38/+Pq9v9hZtD/xM3t//v//f/z+/v/9//8/+ry+P9OU8v/EhW4/xsf - u/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/DxO3/8rL - 7/////////////////+Dhtv/CxC3/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsg - vP8bILz/GyC8/xIWuf+fpuP/+//9//P7+//z+/v/+P/9/3F31v+TmeD/+//9//T8+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/i6vb/ZWvS/8jQ7//6//3/8/v7//f/ - /P/q8vn/TlTM/xIVuf8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsg - vP8bILz/GyC8/w8TuP/Ky+//////////////////g4fb/wsRt/8bIbz/GyG8/xshvP8bIbz/GyG8/xsh - vP8bIbz/GyG8/xshvP8bIbz/GyG8/xshvP8SF7n/n6fj//v//f/z+/v/8/v7//j//f9xeNb/k5rg//v/ - /f/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4ur2/2Zs - 0//J0e//+v/9//P7+//3//z/6vL5/05VzP8SFrn/GyG8/xshvP8bIbz/GyG8/xshvP8bIbz/GyG8/xsh - vP8bIbz/GyG8/xshvP8bIbz/GyG8/xshvP8PFLj/ysvv/////////////////4SI3P8ME7j/HCO9/xwj - vf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/Exm6/5+n5P/7//3/8/v7//P7 - +//4//3/cnnW/5Ob4P/6//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/9f38/+Lq9v9mbtP/ydHv//r//f/z+/v/9//8/+ry+f9PVs3/Exm6/xwjvf8cI73/HCO9/xwj - vf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/EBa5/8rL8P////////////// - //+EiNz/DBO5/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xMa - u/+fp+T/+//9//P7+//z+/v/+P/8/3J61/+Tm+D/+v/9//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/i6vb/Zm7U/8nR7//6//3/8/v7//f//P/q8vj/T1fN/xMa - u/8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xAX - uv/KzPD/////////////////hInc/wwUuf8cJb7/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwl - vv8cJb7/HCW+/xwlvv8TG7v/n6jk//v//f/z+/v/8/v7//j//P9yetf/k5vg//r//f/0/Pv/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4ur2/2Zv1P/J0e//+v/9//P7 - +//3//z/6vP4/09Yzf8TG7v/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwl - vv8cJb7/HCW+/xwlvv8QGLr/yszw/////////////////4SJ3f8MFbr/HCa//xwmv/8cJr//HCa//xwm - v/8cJr//HCa//xwmv/8cJr//HCa//xwmv/8cJr//Exy8/5+p5P/7//3/8/v7//P7+//4//z/cnrY/5Oc - 4f/6//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+Lq - 9v9mcNX/ydLw//r//f/z+/v/9//8/+ry+f9PWM7/Exy8/xwmv/8cJr//HCa//xwmv/8cJr//HCa//xwm - v/8cJr//HCa//xwmv/8cJr//HCa//xwmv/8cJr//EBm7/8rM8P////////////////+Eit3/DBe6/xwn - v/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xMdvP+fqeT/+//9//P7 - +//z+/v/+P/8/3J72P+TnOH/+v/9//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//X9/P/i6vb/ZnDV/8nS8P/6//3/8/v7//f//P/q8vn/T1nO/xMdvP8cJ7//HCe//xwn - v/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xAbu//KzPD///////// - ////////hIve/wwZu/8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwp - wP8TH73/n6rl//v//f/z+/v/8/v7//j//P9we9j/kp3h//v//f/0/Pv/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4uv2/2Rw1f/J0vD/+v/9//P7+//3//z/6vP5/09b - z/8TH73/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwp - wP8QHbz/ys3w/////////////////4SM3v8MG7z/HCvB/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwr - wf8cK8H/HCvB/xwrwf8cK8H/EyG+/5+q5f/7//3/8/v7//P7+//4//z/bXrX/5ei4v/7//3/9Pz7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+Ps9/9mctb/x9Dw//v/ - /f/z+/v/9//8/+rz+f9PXND/EyG+/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwr - wf8cK8H/HCvB/xwrwf8cK8H/EB+9/8rN8f////////////////+Ejd//DR29/x0twv8dLcL/HS3C/x0t - wv8dLcL/HS3C/x0twv8dLcL/HS3C/x0twv8dLcL/HS3C/xMjv/+grOX/+//9//P7+//z+/v/9f38/7/J - 7f/S3PL/9v38//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//T8 - +//v9/r/vcnt/+Hp9v/2/fz/8/v7//f//P/r8/n/UF7Q/xMjv/8dLcL/HS3C/x0twv8dLcL/HS3C/x0t - wv8dLcL/HS3C/x0twv8dLcL/HS3C/x0twv8dLcL/HS3C/xEhvv/KzvH/////////////////hI7f/w0e - vf8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8TJL//oKzl//v/ - /f/z+/v/8/v7//P7+//5//3/9//8//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/9Pz7//n//f/1/fv/8/v7//P7+//3//z/6/P5/1Be0P8TJL//HS7C/x0u - wv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8RIr//ys7x//// - /////////////4SO3/8NH7//HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0v - w/8dL8P/EyXA/6Cs5v/7//3/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9//8/+vz - +f9QX9H/EyXA/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0v - w/8dL8P/ESPA/8rO8f////////////////+Ej9//DSG//x0xw/8dMcP/HTHD/x0xw/8dMcP/HTHD/x0x - w/8dMcP/HTHD/x0xw/8dMcP/HTHD/xMnwP+grOb/+//9//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//f//P/r8/n/UGHR/xMnwP8dMcP/HTHD/x0xw/8dMcP/HTHD/x0xw/8dMcP/HTHD/x0x - w/8dMcP/HTHD/x0xw/8dMcP/HTHD/xElwP/Kz/H/////////////////hJDg/w0jwP8dM8T/HTPE/x0z - xP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8TKsH/oK3n//v//f/z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//2/vz/7vb6/1Rl0/8TKcH/HTPE/x0zxP8dM8T/HTPE/x0z - xP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8RJ8H/ys/x/////////////////4SR - 4P8NJsH/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/EyzC/6Cu - 5//7//3/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9v78//D5+/9WadT/EyrC/x01 - xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/ESnC/8rQ - 8v////////////////+EkuD/DSfB/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02 - xf8dNsX/HTbF/xMtw/+erOb/+v/9//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9 - /P/1/fv/W2/V/xIrwv8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02 - xf8dNsX/HTbF/xEqwv/K0PL/////////////////hJLg/w0owf8eN8X/HjfH/x43x/8eN8f/HjfH/x43 - x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43x/8ULsT/m6rl//r//f/z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//1/fv/9/78/11x1v8TLMP/HjfH/x43x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43 - x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43x/8SLMP/ytDy/////////////////46c5P8XNMT/HjrH/x05 - x/8dOcf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/FTLE/42f4//6//3/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9v78//L6+/9WbdX/Ey/D/x46x/8eOsf/HjrH/x46 - x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8dOcf/ES3D/8rQ8v////////////// - //+Ypub/MEvM/zZQzv8rR8v/Iz/J/x06yP8cOsj/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/xg2 - xf9bc9b/9f38//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//v//f/F0/H/Mk7N/xk2 - x/8eO8j/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/x07yP8cOsj/IDzI/xo4 - x//N1PP/////////////////l6Xm/zBOzP9BW9D/QFrQ/ztWz/8yT83/KUbL/yFAyf8ePMj/HTzI/x08 - yP8dPMj/HjzI/x49yP8cO8j/IkHJ/6q76v////7/+P/8//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f37//z/ - /f/q8/n/XHTX/xg4x/8ePMj/Hj3I/x49yP8ePcj/Hj3I/x49yP8ePcj/HTzI/x08yP8dPMj/HTzI/x49 - yP8lQ8r/LUrL/zhTzv8yT83/0tj0/////////////////5em5v8wT87/P1vR/z9b0f9AXNH/QFzR/0Bb - 0f87WND/M1HO/yxKzP8kQ8r/IEHK/x4+yf8cPcn/HT7J/xc5yP8xUM3/rr3r//H4+/////7////+//// - /v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+//// - /v////7////+//j//P/Y4/X/a4Pb/xg5yP8dPsn/Hj/J/x4+yf8ePsn/Hj7J/x0+yf8cPcn/HD3J/x8/ - yf8iQsr/J0bL/y9Ozf83VM//PlvR/0Bc0f9BXdH/NVPO/9LZ9P////////////////+Xp+b/MFHO/z9d - 0f8/XdH/P13R/z9d0f8/XdH/QF3R/0Be0f9AXtH/PVvR/zhX0P8zUs7/LEzM/yZIy/8hRMr/GTzI/yNG - y/9eedj/hJvh/4ac4v+Fm+L/hZvi/4Wb4v+GnOL/hJrh/4GX4f9/leD/fpXg/36V4P9/luD/g5nh/4ac - 4v+GnOL/hpzi/4ac4v+GnOL/hpzi/4ac4v90jN7/OljP/xg7yP8cPsn/HUDJ/x1Ayf8dQMn/HUDJ/x9C - yf8jRcv/KUrM/y9Pzf82VM//O1nQ/z9c0f9AXtH/QF3R/z9d0f8/XdH/P13R/zRUzv/S2fT///////// - ////////l6jn/zBSz/8/XtL/P17S/z9e0v8/XtL/P17S/z9e0v8/XtL/P17S/0Bf0v9BX9L/QWDS/0Bf - 0v8+XdL/PFvR/zhX0P8vUc7/JUjM/x9Cyv8aPsn/FzvI/xY6yP8VOsj/ETXF/xA2x/8rTMz/VHHW/2R+ - 2v9eedn/Q2HS/xs/yf8LMcT/EDXF/xM3x/8TN8f/EzfH/xM4x/8TOcf/FTrI/xs/yf8hRMv/I0bL/ydK - zf8sTc3/MFHP/zVVz/87WdH/PVzR/z9e0v9BX9L/QWDS/0Bf0v8/XtL/P17S/z9e0v8/XtL/P17S/z9e - 0v80Vc//0tn0/////////////////5eo5/8yU8//QF/S/0Bf0v9AX9L/QF/S/0Bf0v9AX9L/QF/S/0Bf - 0v9AX9L/QF/S/0Bf0v9AYNL/QWDS/0Fg0v9BYNL/QWDS/0Fg0v9AYNL/QF/S/z1d0v86W9D/NFXQ/0Jg - 0/+QpeT/1OD0//f++//7//3/+//9/+ny+f+4ye7/Y37a/y1Pzv8sTs3/MFHO/zFSz/8yVM//NFbP/zdX - 0P85WtH/PFzR/z9f0v9BYNL/QWDS/0Fg0v9BYNL/QWDS/0Fg0v9AYNL/QGDS/0Bf0v9AX9L/QF/S/0Bf - 0v9AX9L/QF/S/0Bf0v9AX9L/NVbP/9La9P////////////////+Xqef/MlXQ/0Bh0/9AYdP/QGHT/0Bh - 0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh - 0/9BYdP/O13S/1h12f/E0/H/+//9//n//f/z+/v/8/v7//P7+//1/fz//v/9//D3+v+Zruf/Q2PU/0Bg - 0/9CY9P/QmLT/0Ji0/9BYtP/QWLT/0Fh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh - 0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/zVY0P/S2vX/////////////////l6rn/zJW - 0P9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi - 0/9AYtP/QGLT/0Bi0/9AYtP/PmDT/0hp1f+/0PD//f/9//X8+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//4//z/9f38/5Sp5v89YNP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi - 0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/81WdD/0tr1//// - /////////////5er6P8yWNH/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk - 1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGPU/zxf0v+OpuX/9//8//T8+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//f//P/p8/j/aYbd/ztg0/9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk - 1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk - 1P9AZNT/NVvR/9Lb9f////////////////+Xq+j/MlnR/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl - 1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/z1i0/9NcNf/0t/0//v/ - /P/z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//0+/v//P/9/7HD7f8/ZNP/P2TU/0Bl - 1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl - 1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/zVc0v/S2/X/////////////////l6zo/zJb0f9AZ9T/QGfU/0Bn - 1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn - 1P85YdL/aYne/+jx+f/3//z/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//r/ - /f/W4/T/UnbY/ztj0/9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn - 1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P81XtL/0tv1/////////////////5et - 6P8yXdH/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo - 1P9AaNT/QGjU/0Bo1P9AaNT/OWLS/3aU4P/t9vr/9v78//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//4//z/4Oz3/2KE2/86Y9P/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo - 1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/NV/S/9Lc - 9f////////////////+Xruj/Ml7R/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp - 1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/zpk0/9oit3/5/H5//f+/P/z+/v/8/v7//P7 - +//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/+f/8/9nl9v9Zfdn/PGbT/0Bp1P9AadT/QGnU/0Bp - 1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp - 1P9AadT/QGnU/zVg0v/S3PX/////////////////mK7o/zNg0v9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr - 1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f89aNT/THTY/9Hf - 9P/6//z/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//z//f/A0vH/RW7W/z9p - 1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr - 1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f82YtP/09z1/////////////////5yy6f80YtL/QWzV/0Fs - 1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs - 1f9BbNX/QGvV/zxo1P+QrOb/+P78//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//T9 - +//z+/v/f57j/z1o1P9AbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs - 1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/NmTT/9Pd9f////////////// - //+2yO//PmrV/z9r1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft - 1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v8/atX/TXfY/8ra8//8//3/8/v7//P7+//z+/v/8/v7//P7 - +//z+/v/8/v7//T7+//9//3/u9Dw/0dx1/8/a9X/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft - 1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/zZl - 1P/T3fX//////////8n////47/P7/1d/2/88atX/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu - 1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/ztp1f9hiNz/1eP1//7/ - /f/0/Pv/8/v7//P7+//z+/v/8/v7//X8/P/9//3/zNzz/1eA2/88atX/QW7W/0Fu1v9Bbtb/QW7W/0Fu - 1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu - 1v9Bbtb/QW7W/0Fu1v82ZtT/0931//////8AAAAA////4f////+Nqef/OGnU/0Fw1v9BcNb/QXDW/0Fw - 1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw - 1v9BcNb/O2zV/1yE2/++0/D/9v38//v//f/4//z/+P/8//r//f/1/Pz/tszu/1aA2v87bNX/QXDW/0Fw - 1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw - 1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/NmjU/9Pe9f//////////Af///6P/////5uz6/1J9 - 2v88bdb/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw - 1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/87bNb/R3TY/3mb4/+wx+3/0+P1/9Hh9P+sxO3/dZni/0Ry - 1/89bdb/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw - 1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/zZo1f/T3vb//////wAA - AAD///8i////6P////+pv+3/N2rV/z9w1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx - 1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/z5v1v87bdb/PW7W/z9w - 1/8/cNf/PW7W/ztt1v8+b9f/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx - 1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx - 1/82adX/0972//////8AAAAAAAAAAP///47/////9ff9/4in5v83a9X/QHHX/0Fy1/9Bctf/QXLX/0Fy - 1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy - 1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy - 1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy - 1/9Bctf/QXLX/0Fy1/9Bctf/NmrV/9Pe9v//////AAAAAAAAAAD///8F////qv/////9/v7/h6fn/zdr - 1v88b9f/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz - 2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz - 2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz - 2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/zZr1v/T3vb//////wAAAAAAAAAAAAAAAP// - /wP///+1//////n6/v+ov+3/VoPc/zlt1v88b9f/P3LY/0Fz2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0 - 2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0 - 2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0 - 2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P83bNb/09/2//// - //8AAAAAAAAAAAAAAAAAAAAA////B////6n//////////+/0/P+guuz/Wobd/0N22f81a9b/NGrV/zRr - 1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr - 1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr - 1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr - 1f80a9X/KGLT/9Dd9f//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////hf///+X///////////X4 - /f/C0/P/nbbr/5iz6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0 - 6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0 - 6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0 - 6v+YtOr/mLTq/5i06v+YtOr/mLTq/5Ow6f/n7vr//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD///8h////gf///93////x//////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D////mf////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////AAAAAAAAAH8AAAAAAAAAHwAAAAAAAAAPAAAAAAAAAAcAAAAAAAAAAwAAAAAAAAABAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAA - AAAAAAAA8AAAAAAAAAD8AAAAAAAAAP4AAAAAAAAA/4AAAAAAAAA= - - + + 316, 17 + \ No newline at end of file diff --git a/PasswordChanger1C/PasswordChanger1C.csproj b/PasswordChanger1C/PasswordChanger1C.csproj index b8b152a..f79df7e 100644 --- a/PasswordChanger1C/PasswordChanger1C.csproj +++ b/PasswordChanger1C/PasswordChanger1C.csproj @@ -189,6 +189,12 @@ + + Form + + + RawHashesPrompt.cs + True True @@ -202,6 +208,9 @@ MainForm.cs + + RawHashesPrompt.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/PasswordChanger1C/RawHashesPrompt.Designer.cs b/PasswordChanger1C/RawHashesPrompt.Designer.cs new file mode 100644 index 0000000..d945ee2 --- /dev/null +++ b/PasswordChanger1C/RawHashesPrompt.Designer.cs @@ -0,0 +1,124 @@ + +namespace PasswordChanger1C +{ + partial class RawHashesPrompt + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.PasswordHash = new System.Windows.Forms.TextBox(); + this.PasswordHash2 = new System.Windows.Forms.TextBox(); + this.OKButton = new System.Windows.Forms.Button(); + this.CancelFormButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Pass hash:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 35); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(68, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Pass hash 2:"; + // + // PasswordHash + // + this.PasswordHash.Location = new System.Drawing.Point(86, 6); + this.PasswordHash.Name = "PasswordHash"; + this.PasswordHash.Size = new System.Drawing.Size(282, 20); + this.PasswordHash.TabIndex = 2; + // + // PasswordHash2 + // + this.PasswordHash2.Location = new System.Drawing.Point(86, 32); + this.PasswordHash2.Name = "PasswordHash2"; + this.PasswordHash2.Size = new System.Drawing.Size(282, 20); + this.PasswordHash2.TabIndex = 3; + // + // OKButton + // + this.OKButton.Location = new System.Drawing.Point(212, 58); + this.OKButton.Name = "OKButton"; + this.OKButton.Size = new System.Drawing.Size(75, 23); + this.OKButton.TabIndex = 4; + this.OKButton.Text = "OK"; + this.OKButton.UseVisualStyleBackColor = true; + this.OKButton.Click += new System.EventHandler(this.OKButton_Click); + // + // CancelFormButton + // + this.CancelFormButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelFormButton.Location = new System.Drawing.Point(293, 58); + this.CancelFormButton.Name = "CancelFormButton"; + this.CancelFormButton.Size = new System.Drawing.Size(75, 23); + this.CancelFormButton.TabIndex = 5; + this.CancelFormButton.Text = "Отмена"; + this.CancelFormButton.UseVisualStyleBackColor = true; + // + // RawHashesPrompt + // + this.AcceptButton = this.OKButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelFormButton; + this.ClientSize = new System.Drawing.Size(380, 89); + this.Controls.Add(this.CancelFormButton); + this.Controls.Add(this.OKButton); + this.Controls.Add(this.PasswordHash2); + this.Controls.Add(this.PasswordHash); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RawHashesPrompt"; + this.Text = "Хеши"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button OKButton; + private System.Windows.Forms.Button CancelFormButton; + internal System.Windows.Forms.TextBox PasswordHash; + internal System.Windows.Forms.TextBox PasswordHash2; + } +} \ No newline at end of file diff --git a/PasswordChanger1C/RawHashesPrompt.cs b/PasswordChanger1C/RawHashesPrompt.cs new file mode 100644 index 0000000..8448d6d --- /dev/null +++ b/PasswordChanger1C/RawHashesPrompt.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PasswordChanger1C +{ + public partial class RawHashesPrompt : Form + { + public RawHashesPrompt() + { + InitializeComponent(); + } + + private void OKButton_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } + } +} diff --git a/PasswordChanger1C/RawHashesPrompt.resx b/PasswordChanger1C/RawHashesPrompt.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/PasswordChanger1C/RawHashesPrompt.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/PasswordChanger1C/SQLInfobase.cs b/PasswordChanger1C/SQLInfobase.cs index 22a0e47..e6cc553 100644 --- a/PasswordChanger1C/SQLInfobase.cs +++ b/PasswordChanger1C/SQLInfobase.cs @@ -91,6 +91,18 @@ public static void UpdatePassword(ref SQLUser SQLUser, in string NewPassword) SQLUser.Data = NewBytes; } + public static void UpdateRawHashes(ref SQLUser SQLUser, in string passHash, in string passHash2) + { + var NewHashes = Tuple.Create(passHash, passHash2); + var OldHashes = Tuple.Create(SQLUser.PassHash, SQLUser.PassHash2); + string NewData = CommonModule.ReplaceHashes(SQLUser.DataStr, OldHashes, NewHashes); + var NewBytes = CommonModule.EncodePasswordStructure(NewData, SQLUser.KeySize, SQLUser.KeyData); + SQLUser.PassHash = NewHashes.Item1; + SQLUser.PassHash2 = NewHashes.Item2; + SQLUser.DataStr = NewData; + SQLUser.Data = NewBytes; + } + public static Func CreateConnectionFactory(in DBMSType dbms_type, string connection_str) { return dbms_type switch