From 9f7c6206ca59bad570a8c76ff4e1c70306b99196 Mon Sep 17 00:00:00 2001
From: liyaobang <884131781@qq.com>
Date: Tue, 8 Apr 2025 15:15:02 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4rbac=20=E6=8F=90=E4=BA=A4?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8F=B3=E9=94=AE=E9=94=99=E4=BD=8D=E7=9A=84?=
=?UTF-8?q?bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DH.RBAC/AccountForm.Designer.cs | 879 ++++++++++++
DH.RBAC/AccountForm.cs | 304 ++++
DH.RBAC/AccountForm.resx | 1161 ++++++++++++++++
DH.RBAC/Common/GlobalConfig.cs | 35 +
DH.RBAC/Common/IconDict.cs | 719 ++++++++++
DH.RBAC/Common/MyConfig.cs | 45 +
DH.RBAC/DH.RBAC.csproj | 143 ++
DH.RBAC/Logic/BaseLogic.cs | 303 ++++
DH.RBAC/Logic/Logger.cs | 80 ++
DH.RBAC/Logic/Sys/SysItemLogic.cs | 167 +++
DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs | 182 +++
DH.RBAC/Logic/Sys/SysLogLogic.cs | 123 ++
DH.RBAC/Logic/Sys/SysOrganizeLogic.cs | 157 +++
DH.RBAC/Logic/Sys/SysPermissionLogic.cs | 238 ++++
DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs | 170 +++
DH.RBAC/Logic/Sys/SysRoleLogic.cs | 176 +++
DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs | 175 +++
DH.RBAC/Logic/Sys/SysUserLogic.cs | 509 +++++++
DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs | 57 +
DH.RBAC/Models/Base/BaseModelEntity.cs | 91 ++
DH.RBAC/Models/Base/CodeGenerator.cs | 22 +
DH.RBAC/Models/Base/MenuControlAttribute.cs | 20 +
DH.RBAC/Models/DTO/Parms/AuthorParms.cs | 16 +
DH.RBAC/Models/DTO/Parms/FileUploadParms.cs | 14 +
.../Models/DTO/Parms/ItemDetailIndexParms.cs | 17 +
DH.RBAC/Models/DTO/Parms/KeyValue.cs | 14 +
DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs | 15 +
DH.RBAC/Models/DTO/Parms/LogIndexParms.cs | 17 +
.../Models/DTO/Parms/LongPrimaryKeyParms.cs | 18 +
.../Models/DTO/Parms/ModifyPasswordParms.cs | 16 +
DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs | 14 +
DH.RBAC/Models/DTO/Parms/SearchParms.cs | 15 +
.../Models/DTO/Parms/StrPrimaryKeyParms.cs | 18 +
DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs | 16 +
DH.RBAC/Models/DTO/Parms/UserLoginParms.cs | 15 +
DH.RBAC/Models/Enum/ModuleType.cs | 27 +
DH.RBAC/Models/Sys/SysItem.cs | 37 +
DH.RBAC/Models/Sys/SysItemDetail.cs | 35 +
DH.RBAC/Models/Sys/SysLog.cs | 29 +
DH.RBAC/Models/Sys/SysOrganize.cs | 58 +
DH.RBAC/Models/Sys/SysPermission.cs | 61 +
DH.RBAC/Models/Sys/SysRole.cs | 55 +
DH.RBAC/Models/Sys/SysRoleAuthorize.cs | 29 +
DH.RBAC/Models/Sys/SysUser.cs | 115 ++
DH.RBAC/Models/Sys/SysUserLogOn.cs | 60 +
DH.RBAC/Models/Sys/SysUserRoleRelation.cs | 26 +
DH.RBAC/Properties/Resources.Designer.cs | 153 +++
DH.RBAC/Properties/Resources.resx | 148 ++
DH.RBAC/RBACWindow.Designer.cs | 114 ++
DH.RBAC/RBACWindow.cs | 204 +++
DH.RBAC/RBACWindow.resx | 120 ++
DH.RBAC/Resources/avatar.png | Bin 0 -> 3428 bytes
DH.RBAC/Resources/back.png | Bin 0 -> 9509 bytes
DH.RBAC/Resources/background.png | Bin 0 -> 381580 bytes
DH.RBAC/Resources/login_back.jpg | Bin 0 -> 21693 bytes
DH.RBAC/Resources/logo.png | Bin 0 -> 40686 bytes
DH.RBAC/Resources/logo2.png | Bin 0 -> 19562 bytes
DH.RBAC/Resources/menu01.png | Bin 0 -> 4080 bytes
DH.RBAC/Resources/menu02.png | Bin 0 -> 4345 bytes
DH.RBAC/Resources/menu03.png | Bin 0 -> 3903 bytes
.../UserControls/AccountControl.Designer.cs | 87 ++
DH.RBAC/UserControls/AccountControl.cs | 75 +
DH.RBAC/UserControls/AccountControl.resx | 120 ++
DH.RBAC/UserControls/Menus/UserMenuPanel.cs | 121 ++
DH.RBAC/UserControls/Menus/UserMenuPanel.resx | 120 ++
DH.RBAC/UserControls/ProgressForm.Designer.cs | 69 +
DH.RBAC/UserControls/ProgressForm.cs | 132 ++
DH.RBAC/UserControls/ProgressForm.resx | 120 ++
DH.RBAC/Utility/Extension/ExtMethods.cs | 322 +++++
DH.RBAC/Utility/Extension/MyEnvironment.cs | 70 +
DH.RBAC/Utility/Other/DESHelper.cs | 108 ++
DH.RBAC/Utility/Other/FormHelper.cs | 40 +
DH.RBAC/Utility/Other/JsonHelper.cs | 131 ++
DH.RBAC/Utility/Other/MD5Helper.cs | 117 ++
DH.RBAC/Utility/Other/PanelScrollHelper.cs | 45 +
DH.RBAC/Utility/Other/ScreenUtils.cs | 113 ++
DH.RBAC/Utility/Other/SnowFlakeHelper.cs | 203 +++
DH.RBAC/Utility/Other/StringHelper.cs | 316 +++++
DH.RBAC/Utility/Other/TreeSelect.cs | 55 +
DH.RBAC/Utility/Other/UIUtils.cs | 277 ++++
DH.RBAC/Utility/Other/UUID.cs | 52 +
DH.RBAC/Utility/Other/ZTreeNode.cs | 34 +
DH.RBAC/Utility/PopupTool/GripBounds.cs | 114 ++
DH.RBAC/Utility/PopupTool/Popup.cs | 524 +++++++
DH.RBAC/Utility/PopupTool/UnsafeMethods.cs | 180 +++
DH.RBAC/Views/DefaultPage.Designer.cs | 63 +
DH.RBAC/Views/DefaultPage.cs | 21 +
DH.RBAC/Views/DefaultPage.resx | 60 +
DH.RBAC/Views/EmptyPage.Designer.cs | 48 +
DH.RBAC/Views/EmptyPage.cs | 26 +
DH.RBAC/Views/EmptyPage.resx | 120 ++
DH.RBAC/Views/MyPage.cs | 91 ++
DH.RBAC/Views/MyPage.resx | 60 +
DH.RBAC/Views/Sys/BaseSubForm.Designer.cs | 146 ++
DH.RBAC/Views/Sys/BaseSubForm.cs | 71 +
DH.RBAC/Views/Sys/BaseSubForm.resx | 1161 ++++++++++++++++
.../Sys/Organize/AddOrganizeForm.Designer.cs | 706 ++++++++++
DH.RBAC/Views/Sys/Organize/AddOrganizeForm.cs | 226 +++
.../Views/Sys/Organize/AddOrganizeForm.resx | 1161 ++++++++++++++++
.../Sys/Organize/OrganizePage.Designer.cs | 424 ++++++
DH.RBAC/Views/Sys/Organize/OrganizePage.cs | 187 +++
DH.RBAC/Views/Sys/Organize/OrganizePage.resx | 138 ++
.../Permission/AddPermissionForm.Designer.cs | 553 ++++++++
.../Views/Sys/Permission/AddPermissionForm.cs | 423 ++++++
.../Sys/Permission/AddPermissionForm.resx | 1161 ++++++++++++++++
.../Views/Sys/Permission/IconForm.Designer.cs | 216 +++
DH.RBAC/Views/Sys/Permission/IconForm.cs | 163 +++
DH.RBAC/Views/Sys/Permission/IconForm.resx | 1167 ++++++++++++++++
.../Sys/Permission/PermissionPage.Designer.cs | 462 +++++++
.../Views/Sys/Permission/PermissionPage.cs | 203 +++
.../Views/Sys/Permission/PermissionPage.resx | 157 +++
.../Views/Sys/Role/AddRoleForm.Designer.cs | 427 ++++++
DH.RBAC/Views/Sys/Role/AddRoleForm.cs | 267 ++++
DH.RBAC/Views/Sys/Role/AddRoleForm.resx | 1161 ++++++++++++++++
.../Sys/Role/RoleAuthorizeForm.Designer.cs | 200 +++
DH.RBAC/Views/Sys/Role/RoleAuthorizeForm.cs | 207 +++
DH.RBAC/Views/Sys/Role/RoleAuthorizeForm.resx | 1161 ++++++++++++++++
DH.RBAC/Views/Sys/Role/RolePage.Designer.cs | 437 ++++++
DH.RBAC/Views/Sys/Role/RolePage.cs | 223 +++
DH.RBAC/Views/Sys/Role/RolePage.resx | 138 ++
.../Views/Sys/User/AddUserForm.Designer.cs | 691 ++++++++++
DH.RBAC/Views/Sys/User/AddUserForm.cs | 428 ++++++
DH.RBAC/Views/Sys/User/AddUserForm.resx | 1221 +++++++++++++++++
DH.RBAC/Views/Sys/User/UserPage.Designer.cs | 435 ++++++
DH.RBAC/Views/Sys/User/UserPage.cs | 253 ++++
DH.RBAC/Views/Sys/User/UserPage.resx | 138 ++
DH.RBAC/favicon.ico | Bin 0 -> 4286 bytes
DHSoftware.sln | 13 +
DHSoftware/Configs/config.json | Bin 0 -> 516 bytes
DHSoftware/Configs/log4net.config | 84 ++
DHSoftware/DHSoftware.csproj | 11 +
DHSoftware/LoginWindow.Designer.cs | 2 +-
DHSoftware/LoginWindow.cs | 125 +-
DHSoftware/MainWindow.Designer.cs | 21 +
DHSoftware/MainWindow.cs | 97 +-
DHSoftware/MainWindow.resx | 4 +-
DHSoftware/Program.cs | 24 +-
DHSoftware/Views/SettingWindow.Designer.cs | 2 +
DHSoftware/Views/SettingWindow.cs | 224 ++-
139 files changed, 27868 insertions(+), 117 deletions(-)
create mode 100644 DH.RBAC/AccountForm.Designer.cs
create mode 100644 DH.RBAC/AccountForm.cs
create mode 100644 DH.RBAC/AccountForm.resx
create mode 100644 DH.RBAC/Common/GlobalConfig.cs
create mode 100644 DH.RBAC/Common/IconDict.cs
create mode 100644 DH.RBAC/Common/MyConfig.cs
create mode 100644 DH.RBAC/DH.RBAC.csproj
create mode 100644 DH.RBAC/Logic/BaseLogic.cs
create mode 100644 DH.RBAC/Logic/Logger.cs
create mode 100644 DH.RBAC/Logic/Sys/SysItemLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysLogLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysOrganizeLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysPermissionLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysRoleLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysUserLogic.cs
create mode 100644 DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs
create mode 100644 DH.RBAC/Models/Base/BaseModelEntity.cs
create mode 100644 DH.RBAC/Models/Base/CodeGenerator.cs
create mode 100644 DH.RBAC/Models/Base/MenuControlAttribute.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/AuthorParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/FileUploadParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/ItemDetailIndexParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/KeyValue.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/LogIndexParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/LongPrimaryKeyParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/ModifyPasswordParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/SearchParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/StrPrimaryKeyParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs
create mode 100644 DH.RBAC/Models/DTO/Parms/UserLoginParms.cs
create mode 100644 DH.RBAC/Models/Enum/ModuleType.cs
create mode 100644 DH.RBAC/Models/Sys/SysItem.cs
create mode 100644 DH.RBAC/Models/Sys/SysItemDetail.cs
create mode 100644 DH.RBAC/Models/Sys/SysLog.cs
create mode 100644 DH.RBAC/Models/Sys/SysOrganize.cs
create mode 100644 DH.RBAC/Models/Sys/SysPermission.cs
create mode 100644 DH.RBAC/Models/Sys/SysRole.cs
create mode 100644 DH.RBAC/Models/Sys/SysRoleAuthorize.cs
create mode 100644 DH.RBAC/Models/Sys/SysUser.cs
create mode 100644 DH.RBAC/Models/Sys/SysUserLogOn.cs
create mode 100644 DH.RBAC/Models/Sys/SysUserRoleRelation.cs
create mode 100644 DH.RBAC/Properties/Resources.Designer.cs
create mode 100644 DH.RBAC/Properties/Resources.resx
create mode 100644 DH.RBAC/RBACWindow.Designer.cs
create mode 100644 DH.RBAC/RBACWindow.cs
create mode 100644 DH.RBAC/RBACWindow.resx
create mode 100644 DH.RBAC/Resources/avatar.png
create mode 100644 DH.RBAC/Resources/back.png
create mode 100644 DH.RBAC/Resources/background.png
create mode 100644 DH.RBAC/Resources/login_back.jpg
create mode 100644 DH.RBAC/Resources/logo.png
create mode 100644 DH.RBAC/Resources/logo2.png
create mode 100644 DH.RBAC/Resources/menu01.png
create mode 100644 DH.RBAC/Resources/menu02.png
create mode 100644 DH.RBAC/Resources/menu03.png
create mode 100644 DH.RBAC/UserControls/AccountControl.Designer.cs
create mode 100644 DH.RBAC/UserControls/AccountControl.cs
create mode 100644 DH.RBAC/UserControls/AccountControl.resx
create mode 100644 DH.RBAC/UserControls/Menus/UserMenuPanel.cs
create mode 100644 DH.RBAC/UserControls/Menus/UserMenuPanel.resx
create mode 100644 DH.RBAC/UserControls/ProgressForm.Designer.cs
create mode 100644 DH.RBAC/UserControls/ProgressForm.cs
create mode 100644 DH.RBAC/UserControls/ProgressForm.resx
create mode 100644 DH.RBAC/Utility/Extension/ExtMethods.cs
create mode 100644 DH.RBAC/Utility/Extension/MyEnvironment.cs
create mode 100644 DH.RBAC/Utility/Other/DESHelper.cs
create mode 100644 DH.RBAC/Utility/Other/FormHelper.cs
create mode 100644 DH.RBAC/Utility/Other/JsonHelper.cs
create mode 100644 DH.RBAC/Utility/Other/MD5Helper.cs
create mode 100644 DH.RBAC/Utility/Other/PanelScrollHelper.cs
create mode 100644 DH.RBAC/Utility/Other/ScreenUtils.cs
create mode 100644 DH.RBAC/Utility/Other/SnowFlakeHelper.cs
create mode 100644 DH.RBAC/Utility/Other/StringHelper.cs
create mode 100644 DH.RBAC/Utility/Other/TreeSelect.cs
create mode 100644 DH.RBAC/Utility/Other/UIUtils.cs
create mode 100644 DH.RBAC/Utility/Other/UUID.cs
create mode 100644 DH.RBAC/Utility/Other/ZTreeNode.cs
create mode 100644 DH.RBAC/Utility/PopupTool/GripBounds.cs
create mode 100644 DH.RBAC/Utility/PopupTool/Popup.cs
create mode 100644 DH.RBAC/Utility/PopupTool/UnsafeMethods.cs
create mode 100644 DH.RBAC/Views/DefaultPage.Designer.cs
create mode 100644 DH.RBAC/Views/DefaultPage.cs
create mode 100644 DH.RBAC/Views/DefaultPage.resx
create mode 100644 DH.RBAC/Views/EmptyPage.Designer.cs
create mode 100644 DH.RBAC/Views/EmptyPage.cs
create mode 100644 DH.RBAC/Views/EmptyPage.resx
create mode 100644 DH.RBAC/Views/MyPage.cs
create mode 100644 DH.RBAC/Views/MyPage.resx
create mode 100644 DH.RBAC/Views/Sys/BaseSubForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/BaseSubForm.cs
create mode 100644 DH.RBAC/Views/Sys/BaseSubForm.resx
create mode 100644 DH.RBAC/Views/Sys/Organize/AddOrganizeForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Organize/AddOrganizeForm.cs
create mode 100644 DH.RBAC/Views/Sys/Organize/AddOrganizeForm.resx
create mode 100644 DH.RBAC/Views/Sys/Organize/OrganizePage.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Organize/OrganizePage.cs
create mode 100644 DH.RBAC/Views/Sys/Organize/OrganizePage.resx
create mode 100644 DH.RBAC/Views/Sys/Permission/AddPermissionForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/AddPermissionForm.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/AddPermissionForm.resx
create mode 100644 DH.RBAC/Views/Sys/Permission/IconForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/IconForm.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/IconForm.resx
create mode 100644 DH.RBAC/Views/Sys/Permission/PermissionPage.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/PermissionPage.cs
create mode 100644 DH.RBAC/Views/Sys/Permission/PermissionPage.resx
create mode 100644 DH.RBAC/Views/Sys/Role/AddRoleForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Role/AddRoleForm.cs
create mode 100644 DH.RBAC/Views/Sys/Role/AddRoleForm.resx
create mode 100644 DH.RBAC/Views/Sys/Role/RoleAuthorizeForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Role/RoleAuthorizeForm.cs
create mode 100644 DH.RBAC/Views/Sys/Role/RoleAuthorizeForm.resx
create mode 100644 DH.RBAC/Views/Sys/Role/RolePage.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/Role/RolePage.cs
create mode 100644 DH.RBAC/Views/Sys/Role/RolePage.resx
create mode 100644 DH.RBAC/Views/Sys/User/AddUserForm.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/User/AddUserForm.cs
create mode 100644 DH.RBAC/Views/Sys/User/AddUserForm.resx
create mode 100644 DH.RBAC/Views/Sys/User/UserPage.Designer.cs
create mode 100644 DH.RBAC/Views/Sys/User/UserPage.cs
create mode 100644 DH.RBAC/Views/Sys/User/UserPage.resx
create mode 100644 DH.RBAC/favicon.ico
create mode 100644 DHSoftware/Configs/config.json
create mode 100644 DHSoftware/Configs/log4net.config
diff --git a/DH.RBAC/AccountForm.Designer.cs b/DH.RBAC/AccountForm.Designer.cs
new file mode 100644
index 0000000..9065606
--- /dev/null
+++ b/DH.RBAC/AccountForm.Designer.cs
@@ -0,0 +1,879 @@
+namespace DH.RBAC
+{
+ partial class AccountForm
+ {
+ ///
+ /// 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()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AccountForm));
+ this.uiPanel1 = new Sunny.UI.UIPanel();
+ this.titlePanel = new System.Windows.Forms.Panel();
+ this.uiLabel15 = new Sunny.UI.UILabel();
+ this.btnClose = new Sunny.UI.UISymbolLabel();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.lblCurrentUser = new System.Windows.Forms.Label();
+ this.imageAvator = new System.Windows.Forms.PictureBox();
+ this.uiTabControl1 = new Sunny.UI.UITabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.txtBirthday = new Sunny.UI.UIDatePicker();
+ this.btnSave = new Sunny.UI.UIButton();
+ this.txtSignature = new Sunny.UI.UITextBox();
+ this.lblSignature = new Sunny.UI.UILabel();
+ this.txtAddress = new Sunny.UI.UITextBox();
+ this.lblAddress = new Sunny.UI.UILabel();
+ this.txtTel = new Sunny.UI.UITextBox();
+ this.lblTel = new Sunny.UI.UILabel();
+ this.txtEmail = new Sunny.UI.UITextBox();
+ this.lblEmail = new Sunny.UI.UILabel();
+ this.lblBirthday = new Sunny.UI.UILabel();
+ this.rdFemale = new Sunny.UI.UIRadioButton();
+ this.rdMale = new Sunny.UI.UIRadioButton();
+ this.txtNickName = new Sunny.UI.UITextBox();
+ this.lblGender = new Sunny.UI.UILabel();
+ this.lblNickName = new Sunny.UI.UILabel();
+ this.txtName = new Sunny.UI.UITextBox();
+ this.lblName = new Sunny.UI.UILabel();
+ this.txtAccount = new Sunny.UI.UITextBox();
+ this.lblAccount = new Sunny.UI.UILabel();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.btnSelectAvator = new Sunny.UI.UIButton();
+ this.uiLabel10 = new Sunny.UI.UILabel();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.btnReset = new Sunny.UI.UIButton();
+ this.btnChangePassword = new Sunny.UI.UIButton();
+ this.txtComfirmPassword = new Sunny.UI.UITextBox();
+ this.txtNewPassword = new Sunny.UI.UITextBox();
+ this.lblComfirmPassword = new Sunny.UI.UILabel();
+ this.lblNewPassword = new Sunny.UI.UILabel();
+ this.txtOldPassword = new Sunny.UI.UITextBox();
+ this.lblOldPassword = new Sunny.UI.UILabel();
+ this.uiLabel11 = new Sunny.UI.UILabel();
+ this.uiPanel1.SuspendLayout();
+ this.titlePanel.SuspendLayout();
+ this.panel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.imageAvator)).BeginInit();
+ this.uiTabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // uiPanel1
+ //
+ this.uiPanel1.Controls.Add(this.titlePanel);
+ this.uiPanel1.Controls.Add(this.panel1);
+ this.uiPanel1.Controls.Add(this.uiTabControl1);
+ this.uiPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiPanel1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(241)))), ((int)(((byte)(243)))));
+ this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.uiPanel1.Location = new System.Drawing.Point(0, 0);
+ this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiPanel1.Name = "uiPanel1";
+ this.uiPanel1.RectColor = System.Drawing.Color.Silver;
+ this.uiPanel1.Size = new System.Drawing.Size(1031, 558);
+ this.uiPanel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiPanel1.StyleCustomMode = true;
+ this.uiPanel1.TabIndex = 6;
+ this.uiPanel1.Text = null;
+ this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // titlePanel
+ //
+ this.titlePanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.titlePanel.Controls.Add(this.uiLabel15);
+ this.titlePanel.Controls.Add(this.btnClose);
+ this.titlePanel.Location = new System.Drawing.Point(0, -1);
+ this.titlePanel.Name = "titlePanel";
+ this.titlePanel.Size = new System.Drawing.Size(1031, 43);
+ this.titlePanel.TabIndex = 7;
+ this.titlePanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseDown);
+ this.titlePanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseMove);
+ //
+ // uiLabel15
+ //
+ this.uiLabel15.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiLabel15.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.uiLabel15.Location = new System.Drawing.Point(0, 0);
+ this.uiLabel15.Name = "uiLabel15";
+ this.uiLabel15.Size = new System.Drawing.Size(986, 43);
+ this.uiLabel15.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLabel15.TabIndex = 1;
+ this.uiLabel15.Text = "用户账号管理";
+ this.uiLabel15.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiLabel15.MouseDown += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseDown);
+ this.uiLabel15.MouseMove += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseMove);
+ //
+ // btnClose
+ //
+ this.btnClose.Dock = System.Windows.Forms.DockStyle.Right;
+ this.btnClose.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.btnClose.Location = new System.Drawing.Point(986, 0);
+ this.btnClose.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnClose.Name = "btnClose";
+ this.btnClose.Padding = new System.Windows.Forms.Padding(64, 0, 0, 0);
+ this.btnClose.Size = new System.Drawing.Size(45, 43);
+ this.btnClose.Style = Sunny.UI.UIStyle.Custom;
+ this.btnClose.Symbol = 77;
+ this.btnClose.SymbolSize = 60;
+ this.btnClose.TabIndex = 0;
+ this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+ this.btnClose.MouseEnter += new System.EventHandler(this.btnClose_MouseEnter);
+ this.btnClose.MouseLeave += new System.EventHandler(this.btnClose_MouseLeave);
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.White;
+ this.panel1.Controls.Add(this.lblCurrentUser);
+ this.panel1.Controls.Add(this.imageAvator);
+ this.panel1.Location = new System.Drawing.Point(12, 56);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(241, 218);
+ this.panel1.TabIndex = 6;
+ //
+ // lblCurrentUser
+ //
+ this.lblCurrentUser.Location = new System.Drawing.Point(3, 176);
+ this.lblCurrentUser.Name = "lblCurrentUser";
+ this.lblCurrentUser.Size = new System.Drawing.Size(235, 27);
+ this.lblCurrentUser.TabIndex = 4;
+ this.lblCurrentUser.Text = "admin@管理员";
+ this.lblCurrentUser.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // imageAvator
+ //
+ this.imageAvator.Image = global:: DH.RBAC.Properties.Resources.avatar;
+ this.imageAvator.Location = new System.Drawing.Point(49, 27);
+ this.imageAvator.Name = "imageAvator";
+ this.imageAvator.Size = new System.Drawing.Size(139, 136);
+ this.imageAvator.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.imageAvator.TabIndex = 3;
+ this.imageAvator.TabStop = false;
+ //
+ // uiTabControl1
+ //
+ this.uiTabControl1.Controls.Add(this.tabPage1);
+ this.uiTabControl1.Controls.Add(this.tabPage2);
+ this.uiTabControl1.Controls.Add(this.tabPage3);
+ this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
+ this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40);
+ this.uiTabControl1.Location = new System.Drawing.Point(275, 56);
+ this.uiTabControl1.MainPage = "";
+ this.uiTabControl1.MenuStyle = Sunny.UI.UIMenuStyle.Custom;
+ this.uiTabControl1.Name = "uiTabControl1";
+ this.uiTabControl1.SelectedIndex = 0;
+ this.uiTabControl1.Size = new System.Drawing.Size(734, 490);
+ this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
+ this.uiTabControl1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiTabControl1.TabBackColor = System.Drawing.Color.White;
+ this.uiTabControl1.TabIndex = 5;
+ this.uiTabControl1.TabSelectedColor = System.Drawing.Color.White;
+ this.uiTabControl1.TabUnSelectedForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(82)))), ((int)(((byte)(91)))));
+ //
+ // tabPage1
+ //
+ this.tabPage1.BackColor = System.Drawing.Color.White;
+ this.tabPage1.Controls.Add(this.txtBirthday);
+ this.tabPage1.Controls.Add(this.btnSave);
+ this.tabPage1.Controls.Add(this.txtSignature);
+ this.tabPage1.Controls.Add(this.lblSignature);
+ this.tabPage1.Controls.Add(this.txtAddress);
+ this.tabPage1.Controls.Add(this.lblAddress);
+ this.tabPage1.Controls.Add(this.txtTel);
+ this.tabPage1.Controls.Add(this.lblTel);
+ this.tabPage1.Controls.Add(this.txtEmail);
+ this.tabPage1.Controls.Add(this.lblEmail);
+ this.tabPage1.Controls.Add(this.lblBirthday);
+ this.tabPage1.Controls.Add(this.rdFemale);
+ this.tabPage1.Controls.Add(this.rdMale);
+ this.tabPage1.Controls.Add(this.txtNickName);
+ this.tabPage1.Controls.Add(this.lblGender);
+ this.tabPage1.Controls.Add(this.lblNickName);
+ this.tabPage1.Controls.Add(this.txtName);
+ this.tabPage1.Controls.Add(this.lblName);
+ this.tabPage1.Controls.Add(this.txtAccount);
+ this.tabPage1.Controls.Add(this.lblAccount);
+ this.tabPage1.Location = new System.Drawing.Point(0, 40);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Size = new System.Drawing.Size(734, 450);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "资料";
+ //
+ // txtBirthday
+ //
+ this.txtBirthday.FillColor = System.Drawing.Color.White;
+ this.txtBirthday.FillColor2 = System.Drawing.Color.White;
+ this.txtBirthday.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtBirthday.Location = new System.Drawing.Point(117, 139);
+ this.txtBirthday.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtBirthday.MaxLength = 10;
+ this.txtBirthday.MinimumSize = new System.Drawing.Size(63, 0);
+ this.txtBirthday.Name = "txtBirthday";
+ this.txtBirthday.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.txtBirthday.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtBirthday.Size = new System.Drawing.Size(188, 36);
+
+ this.txtBirthday.StyleCustomMode = true;
+ this.txtBirthday.SymbolDropDown = 61555;
+ this.txtBirthday.SymbolNormal = 61555;
+ this.txtBirthday.TabIndex = 20;
+ this.txtBirthday.Text = "2021-12-29";
+ this.txtBirthday.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.txtBirthday.Value = new System.DateTime(2021, 12, 29, 0, 0, 0, 0);
+ //
+ // btnSave
+ //
+ this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnSave.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.btnSave.Location = new System.Drawing.Point(117, 379);
+ this.btnSave.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnSave.Name = "btnSave";
+ this.btnSave.Size = new System.Drawing.Size(125, 44);
+ this.btnSave.Style = Sunny.UI.UIStyle.Custom;
+ this.btnSave.TabIndex = 19;
+ this.btnSave.Text = "保存";
+ this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+ //
+ // txtSignature
+ //
+ this.txtSignature.ButtonFillColor = System.Drawing.Color.White;
+ this.txtSignature.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtSignature.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtSignature.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtSignature.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtSignature.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtSignature.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtSignature.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtSignature.ButtonSymbol = 61761;
+ this.txtSignature.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtSignature.FillColor2 = System.Drawing.Color.White;
+ this.txtSignature.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtSignature.Location = new System.Drawing.Point(117, 252);
+ this.txtSignature.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtSignature.Maximum = 2147483647D;
+ this.txtSignature.MaxLength = 128;
+ this.txtSignature.Minimum = -2147483648D;
+ this.txtSignature.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtSignature.Multiline = true;
+ this.txtSignature.Name = "txtSignature";
+ this.txtSignature.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtSignature.Size = new System.Drawing.Size(581, 103);
+
+ this.txtSignature.StyleCustomMode = true;
+ this.txtSignature.TabIndex = 18;
+ this.txtSignature.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblSignature
+ //
+ this.lblSignature.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblSignature.Location = new System.Drawing.Point(3, 252);
+ this.lblSignature.Name = "lblSignature";
+ this.lblSignature.Size = new System.Drawing.Size(107, 29);
+ this.lblSignature.Style = Sunny.UI.UIStyle.Custom;
+ this.lblSignature.TabIndex = 17;
+ this.lblSignature.Text = "个性签名";
+ this.lblSignature.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtAddress
+ //
+ this.txtAddress.ButtonFillColor = System.Drawing.Color.White;
+ this.txtAddress.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtAddress.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtAddress.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtAddress.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtAddress.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtAddress.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtAddress.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtAddress.ButtonSymbol = 61761;
+ this.txtAddress.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtAddress.FillColor2 = System.Drawing.Color.White;
+ this.txtAddress.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtAddress.Location = new System.Drawing.Point(429, 191);
+ this.txtAddress.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtAddress.Maximum = 2147483647D;
+ this.txtAddress.MaxLength = 128;
+ this.txtAddress.Minimum = -2147483648D;
+ this.txtAddress.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtAddress.Name = "txtAddress";
+ this.txtAddress.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtAddress.Size = new System.Drawing.Size(269, 42);
+
+ this.txtAddress.StyleCustomMode = true;
+ this.txtAddress.TabIndex = 16;
+ this.txtAddress.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblAddress
+ //
+ this.lblAddress.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblAddress.Location = new System.Drawing.Point(312, 198);
+ this.lblAddress.Name = "lblAddress";
+ this.lblAddress.Size = new System.Drawing.Size(110, 29);
+ this.lblAddress.Style = Sunny.UI.UIStyle.Custom;
+ this.lblAddress.TabIndex = 15;
+ this.lblAddress.Text = "联系地址";
+ this.lblAddress.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtTel
+ //
+ this.txtTel.ButtonFillColor = System.Drawing.Color.White;
+ this.txtTel.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtTel.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtTel.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtTel.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtTel.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtTel.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtTel.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtTel.ButtonSymbol = 61761;
+ this.txtTel.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtTel.FillColor2 = System.Drawing.Color.White;
+ this.txtTel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtTel.Location = new System.Drawing.Point(117, 191);
+ this.txtTel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtTel.Maximum = 2147483647D;
+ this.txtTel.MaxLength = 20;
+ this.txtTel.Minimum = -2147483648D;
+ this.txtTel.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtTel.Name = "txtTel";
+ this.txtTel.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtTel.Size = new System.Drawing.Size(188, 42);
+
+ this.txtTel.StyleCustomMode = true;
+ this.txtTel.TabIndex = 14;
+ this.txtTel.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblTel
+ //
+ this.lblTel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblTel.Location = new System.Drawing.Point(3, 198);
+ this.lblTel.Name = "lblTel";
+ this.lblTel.Size = new System.Drawing.Size(107, 29);
+ this.lblTel.Style = Sunny.UI.UIStyle.Custom;
+ this.lblTel.TabIndex = 13;
+ this.lblTel.Text = "移动电话";
+ this.lblTel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtEmail
+ //
+ this.txtEmail.ButtonFillColor = System.Drawing.Color.White;
+ this.txtEmail.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtEmail.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtEmail.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtEmail.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtEmail.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtEmail.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtEmail.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtEmail.ButtonSymbol = 61761;
+ this.txtEmail.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtEmail.FillColor2 = System.Drawing.Color.White;
+ this.txtEmail.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtEmail.Location = new System.Drawing.Point(429, 136);
+ this.txtEmail.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtEmail.Maximum = 2147483647D;
+ this.txtEmail.MaxLength = 60;
+ this.txtEmail.Minimum = -2147483648D;
+ this.txtEmail.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtEmail.Name = "txtEmail";
+ this.txtEmail.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtEmail.Size = new System.Drawing.Size(269, 42);
+
+ this.txtEmail.StyleCustomMode = true;
+ this.txtEmail.TabIndex = 12;
+ this.txtEmail.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblEmail
+ //
+ this.lblEmail.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblEmail.Location = new System.Drawing.Point(357, 143);
+ this.lblEmail.Name = "lblEmail";
+ this.lblEmail.Size = new System.Drawing.Size(65, 29);
+ this.lblEmail.Style = Sunny.UI.UIStyle.Custom;
+ this.lblEmail.TabIndex = 11;
+ this.lblEmail.Text = "邮箱";
+ this.lblEmail.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // lblBirthday
+ //
+ this.lblBirthday.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblBirthday.Location = new System.Drawing.Point(3, 143);
+ this.lblBirthday.Name = "lblBirthday";
+ this.lblBirthday.Size = new System.Drawing.Size(107, 29);
+ this.lblBirthday.Style = Sunny.UI.UIStyle.Custom;
+ this.lblBirthday.TabIndex = 9;
+ this.lblBirthday.Text = "出生日期";
+ this.lblBirthday.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // rdFemale
+ //
+ this.rdFemale.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.rdFemale.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.rdFemale.Location = new System.Drawing.Point(501, 88);
+ this.rdFemale.MinimumSize = new System.Drawing.Size(1, 1);
+ this.rdFemale.Name = "rdFemale";
+ this.rdFemale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.rdFemale.Size = new System.Drawing.Size(57, 36);
+ this.rdFemale.Style = Sunny.UI.UIStyle.Custom;
+ this.rdFemale.TabIndex = 8;
+ this.rdFemale.Text = "女";
+ //
+ // rdMale
+ //
+ this.rdMale.Checked = true;
+ this.rdMale.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.rdMale.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.rdMale.Location = new System.Drawing.Point(433, 88);
+ this.rdMale.MinimumSize = new System.Drawing.Size(1, 1);
+ this.rdMale.Name = "rdMale";
+ this.rdMale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.rdMale.Size = new System.Drawing.Size(57, 36);
+ this.rdMale.Style = Sunny.UI.UIStyle.Custom;
+ this.rdMale.TabIndex = 7;
+ this.rdMale.Text = "男";
+ //
+ // txtNickName
+ //
+ this.txtNickName.ButtonFillColor = System.Drawing.Color.White;
+ this.txtNickName.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtNickName.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtNickName.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtNickName.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtNickName.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtNickName.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtNickName.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtNickName.ButtonSymbol = 61761;
+ this.txtNickName.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtNickName.FillColor2 = System.Drawing.Color.White;
+ this.txtNickName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtNickName.Location = new System.Drawing.Point(429, 32);
+ this.txtNickName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtNickName.Maximum = 2147483647D;
+ this.txtNickName.MaxLength = 20;
+ this.txtNickName.Minimum = -2147483648D;
+ this.txtNickName.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtNickName.Name = "txtNickName";
+ this.txtNickName.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtNickName.Size = new System.Drawing.Size(269, 42);
+
+ this.txtNickName.StyleCustomMode = true;
+ this.txtNickName.TabIndex = 3;
+ this.txtNickName.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblGender
+ //
+ this.lblGender.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblGender.Location = new System.Drawing.Point(357, 91);
+ this.lblGender.Name = "lblGender";
+ this.lblGender.Size = new System.Drawing.Size(65, 29);
+ this.lblGender.Style = Sunny.UI.UIStyle.Custom;
+ this.lblGender.TabIndex = 6;
+ this.lblGender.Text = "性别";
+ this.lblGender.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // lblNickName
+ //
+ this.lblNickName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblNickName.Location = new System.Drawing.Point(357, 39);
+ this.lblNickName.Name = "lblNickName";
+ this.lblNickName.Size = new System.Drawing.Size(65, 29);
+ this.lblNickName.Style = Sunny.UI.UIStyle.Custom;
+ this.lblNickName.TabIndex = 2;
+ this.lblNickName.Text = "昵称";
+ this.lblNickName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtName
+ //
+ this.txtName.ButtonFillColor = System.Drawing.Color.White;
+ this.txtName.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtName.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtName.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtName.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtName.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtName.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtName.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtName.ButtonSymbol = 61761;
+ this.txtName.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtName.FillColor2 = System.Drawing.Color.White;
+ this.txtName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtName.Location = new System.Drawing.Point(117, 84);
+ this.txtName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtName.Maximum = 2147483647D;
+ this.txtName.MaxLength = 20;
+ this.txtName.Minimum = -2147483648D;
+ this.txtName.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtName.Name = "txtName";
+ this.txtName.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtName.Size = new System.Drawing.Size(188, 42);
+
+ this.txtName.StyleCustomMode = true;
+ this.txtName.TabIndex = 5;
+ this.txtName.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblName
+ //
+ this.lblName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblName.Location = new System.Drawing.Point(45, 91);
+ this.lblName.Name = "lblName";
+ this.lblName.Size = new System.Drawing.Size(65, 29);
+ this.lblName.Style = Sunny.UI.UIStyle.Custom;
+ this.lblName.TabIndex = 4;
+ this.lblName.Text = "姓名";
+ this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtAccount
+ //
+ this.txtAccount.ButtonFillColor = System.Drawing.Color.White;
+ this.txtAccount.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtAccount.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtAccount.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtAccount.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtAccount.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtAccount.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtAccount.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtAccount.ButtonSymbol = 61761;
+ this.txtAccount.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtAccount.Enabled = false;
+ this.txtAccount.FillColor2 = System.Drawing.Color.White;
+ this.txtAccount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtAccount.Location = new System.Drawing.Point(117, 32);
+ this.txtAccount.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtAccount.Maximum = 2147483647D;
+ this.txtAccount.MaxLength = 20;
+ this.txtAccount.Minimum = -2147483648D;
+ this.txtAccount.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtAccount.Name = "txtAccount";
+ this.txtAccount.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtAccount.Size = new System.Drawing.Size(188, 42);
+
+ this.txtAccount.StyleCustomMode = true;
+ this.txtAccount.TabIndex = 1;
+ this.txtAccount.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblAccount
+ //
+ this.lblAccount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblAccount.Location = new System.Drawing.Point(45, 39);
+ this.lblAccount.Name = "lblAccount";
+ this.lblAccount.Size = new System.Drawing.Size(65, 29);
+ this.lblAccount.Style = Sunny.UI.UIStyle.Custom;
+ this.lblAccount.TabIndex = 0;
+ this.lblAccount.Text = "账号";
+ this.lblAccount.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // tabPage2
+ //
+ this.tabPage2.BackColor = System.Drawing.Color.White;
+ this.tabPage2.Controls.Add(this.btnSelectAvator);
+ this.tabPage2.Controls.Add(this.uiLabel10);
+ this.tabPage2.Location = new System.Drawing.Point(0, 40);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Size = new System.Drawing.Size(200, 60);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "头像";
+ //
+ // btnSelectAvator
+ //
+ this.btnSelectAvator.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnSelectAvator.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.btnSelectAvator.Location = new System.Drawing.Point(258, 127);
+ this.btnSelectAvator.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnSelectAvator.Name = "btnSelectAvator";
+ this.btnSelectAvator.Size = new System.Drawing.Size(137, 48);
+ this.btnSelectAvator.Style = Sunny.UI.UIStyle.Custom;
+ this.btnSelectAvator.TabIndex = 1;
+ this.btnSelectAvator.Text = "上传头像";
+ this.btnSelectAvator.Click += new System.EventHandler(this.btnSelectAvator_Click);
+ //
+ // uiLabel10
+ //
+ this.uiLabel10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.uiLabel10.Location = new System.Drawing.Point(111, 47);
+ this.uiLabel10.Name = "uiLabel10";
+ this.uiLabel10.Size = new System.Drawing.Size(538, 29);
+ this.uiLabel10.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLabel10.TabIndex = 0;
+ this.uiLabel10.Text = "建议尺寸168*168,支持jpg,bmp,png,不能超过200kb";
+ this.uiLabel10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // tabPage3
+ //
+ this.tabPage3.BackColor = System.Drawing.Color.White;
+ this.tabPage3.Controls.Add(this.btnReset);
+ this.tabPage3.Controls.Add(this.btnChangePassword);
+ this.tabPage3.Controls.Add(this.txtComfirmPassword);
+ this.tabPage3.Controls.Add(this.txtNewPassword);
+ this.tabPage3.Controls.Add(this.lblComfirmPassword);
+ this.tabPage3.Controls.Add(this.lblNewPassword);
+ this.tabPage3.Controls.Add(this.txtOldPassword);
+ this.tabPage3.Controls.Add(this.lblOldPassword);
+ this.tabPage3.Controls.Add(this.uiLabel11);
+ this.tabPage3.Location = new System.Drawing.Point(0, 40);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Size = new System.Drawing.Size(200, 60);
+ this.tabPage3.TabIndex = 2;
+ this.tabPage3.Text = "账号";
+ //
+ // btnReset
+ //
+ this.btnReset.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnReset.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.btnReset.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.btnReset.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.btnReset.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnReset.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnReset.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.btnReset.Location = new System.Drawing.Point(268, 261);
+ this.btnReset.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnReset.Name = "btnReset";
+ this.btnReset.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.btnReset.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.btnReset.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnReset.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnReset.Size = new System.Drawing.Size(125, 44);
+ this.btnReset.Style = Sunny.UI.UIStyle.Orange;
+ this.btnReset.StyleCustomMode = true;
+ this.btnReset.TabIndex = 21;
+ this.btnReset.Text = "重置";
+ this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
+ //
+ // btnChangePassword
+ //
+ this.btnChangePassword.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnChangePassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.btnChangePassword.Location = new System.Drawing.Point(114, 261);
+ this.btnChangePassword.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnChangePassword.Name = "btnChangePassword";
+ this.btnChangePassword.Size = new System.Drawing.Size(125, 44);
+ this.btnChangePassword.Style = Sunny.UI.UIStyle.Custom;
+ this.btnChangePassword.TabIndex = 20;
+ this.btnChangePassword.Text = "保存";
+ this.btnChangePassword.Click += new System.EventHandler(this.btnChangePassword_Click);
+ //
+ // txtComfirmPassword
+ //
+ this.txtComfirmPassword.ButtonFillColor = System.Drawing.Color.White;
+ this.txtComfirmPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtComfirmPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtComfirmPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtComfirmPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtComfirmPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtComfirmPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtComfirmPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtComfirmPassword.ButtonSymbol = 61761;
+ this.txtComfirmPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtComfirmPassword.FillColor2 = System.Drawing.Color.White;
+ this.txtComfirmPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtComfirmPassword.Location = new System.Drawing.Point(205, 178);
+ this.txtComfirmPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtComfirmPassword.Maximum = 2147483647D;
+ this.txtComfirmPassword.Minimum = -2147483648D;
+ this.txtComfirmPassword.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtComfirmPassword.Name = "txtComfirmPassword";
+ this.txtComfirmPassword.PasswordChar = '*';
+ this.txtComfirmPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtComfirmPassword.Size = new System.Drawing.Size(188, 42);
+
+ this.txtComfirmPassword.StyleCustomMode = true;
+ this.txtComfirmPassword.TabIndex = 11;
+ this.txtComfirmPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // txtNewPassword
+ //
+ this.txtNewPassword.ButtonFillColor = System.Drawing.Color.White;
+ this.txtNewPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtNewPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtNewPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtNewPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtNewPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtNewPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtNewPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtNewPassword.ButtonSymbol = 61761;
+ this.txtNewPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtNewPassword.FillColor2 = System.Drawing.Color.White;
+ this.txtNewPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtNewPassword.Location = new System.Drawing.Point(205, 123);
+ this.txtNewPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtNewPassword.Maximum = 2147483647D;
+ this.txtNewPassword.Minimum = -2147483648D;
+ this.txtNewPassword.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtNewPassword.Name = "txtNewPassword";
+ this.txtNewPassword.PasswordChar = '*';
+ this.txtNewPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtNewPassword.Size = new System.Drawing.Size(188, 42);
+
+ this.txtNewPassword.StyleCustomMode = true;
+ this.txtNewPassword.TabIndex = 9;
+ this.txtNewPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblComfirmPassword
+ //
+ this.lblComfirmPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblComfirmPassword.Location = new System.Drawing.Point(88, 185);
+ this.lblComfirmPassword.Name = "lblComfirmPassword";
+ this.lblComfirmPassword.Size = new System.Drawing.Size(110, 29);
+ this.lblComfirmPassword.Style = Sunny.UI.UIStyle.Custom;
+ this.lblComfirmPassword.TabIndex = 10;
+ this.lblComfirmPassword.Text = "确认密码";
+ this.lblComfirmPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // lblNewPassword
+ //
+ this.lblNewPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblNewPassword.Location = new System.Drawing.Point(114, 130);
+ this.lblNewPassword.Name = "lblNewPassword";
+ this.lblNewPassword.Size = new System.Drawing.Size(84, 29);
+ this.lblNewPassword.Style = Sunny.UI.UIStyle.Custom;
+ this.lblNewPassword.TabIndex = 8;
+ this.lblNewPassword.Text = "新密码";
+ this.lblNewPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // txtOldPassword
+ //
+ this.txtOldPassword.ButtonFillColor = System.Drawing.Color.White;
+ this.txtOldPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtOldPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.txtOldPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.txtOldPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.txtOldPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.txtOldPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtOldPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.txtOldPassword.ButtonSymbol = 61761;
+ this.txtOldPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.txtOldPassword.FillColor2 = System.Drawing.Color.White;
+ this.txtOldPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.txtOldPassword.Location = new System.Drawing.Point(205, 71);
+ this.txtOldPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.txtOldPassword.Maximum = 2147483647D;
+ this.txtOldPassword.Minimum = -2147483648D;
+ this.txtOldPassword.MinimumSize = new System.Drawing.Size(1, 16);
+ this.txtOldPassword.Name = "txtOldPassword";
+ this.txtOldPassword.PasswordChar = '*';
+ this.txtOldPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.txtOldPassword.Size = new System.Drawing.Size(188, 42);
+
+ this.txtOldPassword.StyleCustomMode = true;
+ this.txtOldPassword.TabIndex = 7;
+ this.txtOldPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // lblOldPassword
+ //
+ this.lblOldPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.lblOldPassword.Location = new System.Drawing.Point(114, 78);
+ this.lblOldPassword.Name = "lblOldPassword";
+ this.lblOldPassword.Size = new System.Drawing.Size(84, 29);
+ this.lblOldPassword.Style = Sunny.UI.UIStyle.Custom;
+ this.lblOldPassword.TabIndex = 6;
+ this.lblOldPassword.Text = "旧密码";
+ this.lblOldPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // uiLabel11
+ //
+ this.uiLabel11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.uiLabel11.Location = new System.Drawing.Point(45, 23);
+ this.uiLabel11.Name = "uiLabel11";
+ this.uiLabel11.Size = new System.Drawing.Size(125, 29);
+ this.uiLabel11.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLabel11.TabIndex = 0;
+ this.uiLabel11.Text = "修改密码";
+ this.uiLabel11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // AccountForm
+ //
+ this.AllowShowTitle = false;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 27F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1031, 558);
+ this.Controls.Add(this.uiPanel1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AccountForm";
+ this.Padding = new System.Windows.Forms.Padding(0);
+ this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
+ this.ShowTitle = false;
+ this.ShowTitleIcon = true;
+ this.Style = Sunny.UI.UIStyle.Custom;
+ this.Text = "账户管理";
+ this.TitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
+ this.TitleForeColor = System.Drawing.Color.DimGray;
+ this.TopMost = true;
+ this.Load += new System.EventHandler(this.AccountForm_Load);
+ this.uiPanel1.ResumeLayout(false);
+ this.titlePanel.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.imageAvator)).EndInit();
+ this.uiTabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage3.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private Sunny.UI.UIPanel uiPanel1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Label lblCurrentUser;
+ private System.Windows.Forms.PictureBox imageAvator;
+ private Sunny.UI.UITabControl uiTabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private Sunny.UI.UIButton btnSave;
+ private Sunny.UI.UITextBox txtSignature;
+ private Sunny.UI.UILabel lblSignature;
+ private Sunny.UI.UITextBox txtAddress;
+ private Sunny.UI.UILabel lblAddress;
+ private Sunny.UI.UITextBox txtTel;
+ private Sunny.UI.UILabel lblTel;
+ private Sunny.UI.UITextBox txtEmail;
+ private Sunny.UI.UILabel lblEmail;
+ private Sunny.UI.UILabel lblBirthday;
+ private Sunny.UI.UIRadioButton rdFemale;
+ private Sunny.UI.UIRadioButton rdMale;
+ private Sunny.UI.UILabel lblGender;
+ private Sunny.UI.UILabel lblNickName;
+ private Sunny.UI.UITextBox txtName;
+ private Sunny.UI.UILabel lblName;
+ private Sunny.UI.UITextBox txtAccount;
+ private Sunny.UI.UILabel lblAccount;
+ private System.Windows.Forms.TabPage tabPage2;
+ private Sunny.UI.UIButton btnSelectAvator;
+ private Sunny.UI.UILabel uiLabel10;
+ private System.Windows.Forms.TabPage tabPage3;
+ private Sunny.UI.UIButton btnReset;
+ private Sunny.UI.UIButton btnChangePassword;
+ private Sunny.UI.UITextBox txtComfirmPassword;
+ private Sunny.UI.UITextBox txtNewPassword;
+ private Sunny.UI.UILabel lblComfirmPassword;
+ private Sunny.UI.UILabel lblNewPassword;
+ private Sunny.UI.UITextBox txtOldPassword;
+ private Sunny.UI.UILabel lblOldPassword;
+ private Sunny.UI.UILabel uiLabel11;
+ private System.Windows.Forms.Panel titlePanel;
+ private Sunny.UI.UILabel uiLabel15;
+ private Sunny.UI.UISymbolLabel btnClose;
+ private Sunny.UI.UITextBox txtNickName;
+ private Sunny.UI.UIDatePicker txtBirthday;
+ }
+}
\ No newline at end of file
diff --git a/DH.RBAC/AccountForm.cs b/DH.RBAC/AccountForm.cs
new file mode 100644
index 0000000..fff43c3
--- /dev/null
+++ b/DH.RBAC/AccountForm.cs
@@ -0,0 +1,304 @@
+using Sunny.UI;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Windows.Forms;
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Common;
+using DH.RBAC.Properties;
+using DH.RBAC.Logic.Sys;
+using DH.RBAC.Utility.Other;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace DH.RBAC
+{
+ ///
+ /// 用户账户界面
+ ///
+ public partial class AccountForm : UIForm
+ {
+ private SysUserLogic userlogic;
+ private SysUserLogOnLogic userLogOnLogic;
+ ///
+ /// 构造方法
+ ///
+ public AccountForm()
+ {
+ InitializeComponent();
+ userlogic = new SysUserLogic();
+ userLogOnLogic = new SysUserLogOnLogic();
+ }
+
+ #region 标题栏 处理
+ private void btnClose_Click(object sender, EventArgs e)
+ {
+ FormHelper.subForm = null;
+ this.Close();
+ }
+ private Point mPoint;
+ private void titlePanel_MouseDown(object sender, MouseEventArgs e)
+ {
+ mPoint = new Point(e.X, e.Y);
+ }
+
+ private void titlePanel_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
+ }
+ }
+
+ private void btnClose_MouseEnter(object sender, EventArgs e)
+ {
+ btnClose.BackColor = Color.FromArgb(231, 231, 231);
+ }
+
+ private void btnClose_MouseLeave(object sender, EventArgs e)
+ {
+ btnClose.BackColor = Color.Transparent;
+
+ }
+ #endregion
+
+ private string Avatar;
+ ///
+ /// 画面加载,读取用户信息,显示在界面上
+ ///
+ ///
+ ///
+ private void AccountForm_Load(object sender, EventArgs e)
+ {
+ SysUser user = userlogic.Get(GlobalConfig.CurrentUser.Id);
+ if (user == null)
+ {
+ AntdUI.Message.warn(this, "网络或服务器异常,请稍后重试!", autoClose: 3);
+
+ return;
+ }
+ Avatar = user.Avatar;
+ txtAccount.Text = user.Account;
+ txtNickName.Text = user.NickName;
+ txtName.Text = user.RealName;
+ if (user.Gender == "1")
+ rdMale.Checked = true;
+ else
+ rdFemale.Checked = true;
+ txtBirthday.Value = user.Birthday.Value;
+ txtEmail.Text = user.Email;
+ txtTel.Text = user.MobilePhone;
+ txtAddress.Text = user.Address;
+ txtSignature.Text = user.Signature;
+
+ //头像显示
+ if (StringHelper.IsNullOrEmpty(user.AvatarBase64))
+ {
+ imageAvator.Image = Resources.avatar;
+ }
+ else
+ {
+ try
+ {
+ MemoryStream ms = new MemoryStream(Convert.FromBase64String(user.AvatarBase64));
+ imageAvator.Image = Image.FromStream(ms);
+ }
+ catch
+ {
+ imageAvator.Image = Resources.avatar;
+ }
+ }
+
+ lblCurrentUser.Text = $"{user.Account}@{user.NickName}";
+ }
+
+ ///
+ /// 保存修改
+ ///
+ ///
+ ///
+ private void btnSave_Click(object sender, EventArgs e)
+ {
+ //非空检测
+ if (StringHelper.IsNullOrEmpty(txtNickName.Text))
+ {
+ AntdUI.Message.warn(this, "昵称不能为空!", autoClose: 3);
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtName.Text))
+ {
+ AntdUI.Message.warn(this, "姓名不能为空!", autoClose: 3);
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtBirthday.Text))
+ {
+ AntdUI.Message.warn(this, "请选择生日!", autoClose: 3);
+
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtEmail.Text))
+ {
+ AntdUI.Message.warn(this, "邮箱不能为空!", autoClose: 3);
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtTel.Text))
+ {
+ AntdUI.Message.warn(this, "手机不能为空!", autoClose: 3);
+
+ return;
+ }
+
+ //获得目前信息,提交给服务端处理,返回结果
+ SysUser model = new SysUser();
+ model.Id = GlobalConfig.CurrentUser.Id;
+ model.Account = txtAccount.Text;
+ model.NickName = txtNickName.Text;
+ model.RealName = txtName.Text;
+ model.Avatar = Avatar;
+ model.Gender = rdMale.Checked ? "1" : "0";
+ model.StrBirthday = txtBirthday.Text;
+ model.Email = txtEmail.Text;
+ model.MobilePhone = txtTel.Text;
+ model.Address = txtAddress.Text;
+ model.Signature = txtSignature.Text;
+
+ DateTime defaultDt = DateTime.Today;
+ DateTime.TryParse(model.StrBirthday, out defaultDt);
+ model.Birthday = defaultDt;
+ int row = userlogic.AppUpdateBasicInfo(model);
+
+ if (row == 0)
+ {
+ AntdUI.Message.warn(this, "对不起,操作失败!", autoClose: 3);
+
+
+ return;
+ }
+ AntdUI.Message.success(this, "恭喜你,操作成功!", autoClose: 3);
+
+ }
+
+
+ ///
+ /// 选择图片上传
+ ///
+ ///
+ ///
+ private void btnSelectAvator_Click(object sender, EventArgs e)
+ {
+ //OpenFileDialog dialog = new OpenFileDialog();
+ //dialog.Filter = "Image Files(*.BMP;*.JPG;*.png)|*.BMP;*.JPG;*.png";
+ //if (dialog.ShowDialog() == DialogResult.OK)
+ //{
+ // string fileName = dialog.FileName;
+ // Image image = Image.FromFile(fileName);
+ // //上传到服务器
+ // AjaxResult result = null;
+
+ // string url = GlobalConfig.Config.Url + "account/uploadImage";
+ // string str = HttpUtils.PostFile(url, fileName, 2000);
+ // try
+ // {
+ // result = str.ToObject();
+ // }
+ // catch
+ // {
+ // result = null;
+ // }
+
+
+ // if (result == null)
+ // {
+ // this.ShowWarningDialog("网络或服务器异常,请稍后重试", UIStyle.White);
+ // return;
+ // }
+ // if (result.state != ResultType.Success)
+ // {
+ // this.ShowWarningDialog(result.message, UIStyle.White);
+ // return;
+ // }
+ // //上传成功,修改界面头像,以及服务器头像地址
+ // Avatar = result.data.ToString();
+ // imageAvator.Image = image;
+ // this.ShowSuccessDialog("上传成功,点击保存后生效", UIStyle.White);
+ //}
+ }
+
+ private void btnReset_Click(object sender, EventArgs e)
+ {
+ txtOldPassword.Text = string.Empty;
+ txtNewPassword.Text = string.Empty;
+ txtComfirmPassword.Text = string.Empty;
+ }
+
+ private void btnChangePassword_Click(object sender, EventArgs e)
+ {
+ //非空检测
+ if (StringHelper.IsNullOrEmpty(txtOldPassword.Text))
+ {
+ AntdUI.Message.warn(this, "旧密码不能为空!", autoClose: 3);
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtNewPassword.Text))
+ {
+ AntdUI.Message.warn(this, "新密码不能为空!", autoClose: 3);
+
+
+ return;
+ }
+ if (StringHelper.IsNullOrEmpty(txtComfirmPassword.Text))
+ {
+ AntdUI.Message.warn(this, "确认密码不能为空!", autoClose: 3);
+
+
+ return;
+ }
+ if (txtNewPassword.Text != txtComfirmPassword.Text)
+ {
+ AntdUI.Message.warn(this, "两次密码不一致!", autoClose: 3);
+
+
+ return;
+ }
+
+ Dictionary parm = new Dictionary();
+ string userId = GlobalConfig.CurrentUser.Id;
+ string oldPassword = txtOldPassword.Text;
+ string newPassword = txtNewPassword.Text;
+ string confirmPassword = txtComfirmPassword.Text;
+
+
+ if (!newPassword.Equals(confirmPassword))
+ {
+ AntdUI.Message.warn(this, "两次密码输入不一致,请重新确认!", autoClose: 3);
+
+ return;
+ }
+ oldPassword = oldPassword.MD5Encrypt();
+ newPassword = newPassword.MD5Encrypt();
+ confirmPassword = confirmPassword.MD5Encrypt();
+
+ var userLoginEntity = userLogOnLogic.GetByAccount(userId);
+ if (oldPassword.DESEncrypt(userLoginEntity.SecretKey).MD5Encrypt() != userLoginEntity.Password)
+ {
+ AntdUI.Message.warn(this, "旧密码验证失败!", autoClose: 3);
+ return;
+ }
+ userLoginEntity.Password = newPassword.DESEncrypt(userLoginEntity.SecretKey).MD5Encrypt();
+ int isSuccess = userLogOnLogic.ModifyPwd(userLoginEntity);
+ if (isSuccess == 0)
+ {
+ AntdUI.Message.warn(this, "对不起,操作失败!", autoClose: 3);
+
+ return;
+ }
+ AntdUI.Message.success(this, "修改成功!", autoClose: 3);
+
+ }
+ }
+}
diff --git a/DH.RBAC/AccountForm.resx b/DH.RBAC/AccountForm.resx
new file mode 100644
index 0000000..01360ee
--- /dev/null
+++ b/DH.RBAC/AccountForm.resx
@@ -0,0 +1,1161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAgIAAAAEAIACoAAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAAAAMQOAADEDgAAAAAAAAAA
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AC4AAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABkAAAAagAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAOAAAADQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAAeAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB2AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAHAAAADwAAABsAAAAdAAAAHAAAABwAAAAdAAAAFQAAAAsAAAAMAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAA2QAAAOUAAAApAAAAAAAAAAAAAAAAAAAAHwAA
+ AP8AAAD/AAAAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAANUAAADTAAAAUgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAACcAAAAOgAAAAAAAAAAAAAAJwAAAA8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUAAAB2AAAA+QAAANsAAAAuAAAAAAAAAAAAAAAAAAAAAAAAABMAAACRAAAASgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAJ4AAABJAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAArAAA
+ AP8AAAC9AAAAAAAAAAAAAAAAAAAAAAAAADcAAAB9AAAAsAAAAMsAAADWAAAA6AAAAOoAAADqAAAA6gAA
+ AOsAAADfAAAA0AAAANIAAADFAAAAvwAAALIAAACmAAAAlgAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AIAAAAD/AAAA/wAAANoAAAAvAAAAAAAAAAAAAAAUAAAA5wAAAP8AAADxAAAAvwAAAL4AAAC/AAAAvgAA
+ AL4AAAC/AAAAvwAAALkAAADnAAAA/wAAAP8AAABaAAAAAAAAAAAAAAAAAAAAAAAAACEAAACrAAAA9wAA
+ AP8AAACKAAAAFQAAAIUAAAD5AAAAyAAAABYAAAAAAAAABAAAAHcAAABhAAAAXQAAAPsAAAD/AAAA/wAA
+ AOAAAAAuAAAAAAAAAAAAAAAWAAAAwwAAAP8AAADpAAAALAAAAAAAAAAAAAAAAAAAAAYAAADGAAAA/wAA
+ AP8AAADCAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAIEAAAChAAAApgAA
+ AKYAAACmAAAApgAAAKQAAACOAAAAYgAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAMEAAAD/AAAA/wAAAP8AAABzAAAAAAAAADkAAAC0AAAA/QAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAvAAAAP8AAAD/AAAA/wAAAOgAAABGAAAAAAAA
+ AAwAAADaAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AEEAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAPQAAAD/AAAA/wAAALgAAABkAAAA/wAAAP8AAAD/AAAAtwAA
+ AAAAAAA3AAAA/wAAAP8AAADkAAAAkwAAANYAAAD/AAAA/wAAANoAAAAYAAAAAAAAALwAAAD/AAAA/wAA
+ AP8AAADDAAAACAAAAAAAAAAAAAAAmAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAsAAAACcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAADYAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2gAA
+ ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAPwAA
+ AN8AAAD/AAAA/wAAAPoAAAC3AAAA9AAAAP8AAAD/AAAA/wAAAPkAAADhAAAAygAAAK4AAACoAAAArAAA
+ AMoAAADVAAAA3QAAAOcAAADvAAAA+QAAAP8AAAD/AAAA/wAAAP8AAADCAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAA9AAAA+wAAAP8AAAD/AAAA/wAAAPQAAABdAAAABwAAANsAAAD/AAAA2gAAAFwAAABbAAAAoQAA
+ AP8AAAD/AAAAlQAAAFsAAABbAAAAsQAAAP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkQAA
+ AP8AAAD/AAAA8QAAABwAAABhAAAA+wAAAP8AAAD/AAAAawAAAI0AAAD/AAAA/wAAAP8AAADMAAAALAAA
+ AM4AAAD/AAAA/wAAAMEAAACeAAAA/wAAAP8AAAD/AAAAxAAAAD8AAAABAAAAAAAAAAAAAABNAAAAkwAA
+ AN4AAAD/AAAA/wAAAP8AAAD/AAAA5gAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAP8AAAD/AAAA/wAA
+ APcAAADYAAAA1QAAANoAAAD6AAAA/wAAAP8AAAD/AAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAMcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ ANEAAABzAAAANgAAABYAAAAiAAAAJAAAACQAAAATAAAAAAAAAAAAAAALAAAAGwAAACcAAAA3AAAAQgAA
+ AFkAAACMAAAAmwAAAJkAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADQAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAByAAAAzgAAAP8AAAC9AAAAAAAAAAAAAABaAAAA/wAAAP8AAABEAAAAAAAAAAAAAAB2AAAA/wAA
+ AP8AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAAAP8AAAD/AAAASAAAAAAAAABlAAAA/wAA
+ AP8AAADoAAAASwAAAE8AAADaAAAA/wAAAP8AAAAsAAAAGgAAANgAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ ALEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGIAAADPAAAA/wAAAP8AAAD/AAAA9AAA
+ ADMAAAAAAAAAAAAAAAAAAABUAAAA/wAAAP8AAADxAAAASQAAAAMAAAAAAAAABgAAAD8AAADfAAAA/wAA
+ AP8AAADpAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAEQAAAJsAAAD/AAAA/wAAAOwAAABlAAAADAAAAAAAAAAAAAAABAAAAM4AAAD+AAAA/gAA
+ AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAlgAAAMQAAACyAAAAHQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAAMUAAAD/AAAA3gAAAIcAAAD/AAAA/wAAAGgAAADMAAAA/wAAANwAAABiAAAAXAAA
+ AKUAAAD/AAAA/wAAAJkAAABdAAAAXAAAALQAAAD/AAAA/wAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAcAAADVAAAA/wAAAP8AAAB+AAAAAAAAAAAAAACpAAAA/wAAAP8AAABjAAAAAAAAAH4AAAD/AAAA/wAA
+ AFQAAAAAAAAAMgAAAOYAAAD/AAAA/wAAAP8AAACpAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAsAAACPAAAA/wAAAP8AAAD/AAAAxAAAAAcAAAAAAAAAAAAAAFQAAAD/AAAA/wAA
+ ANcAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAD/AAAA/wAAAOgAAAAqAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAP8AAAD/AAAAxgAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAwwAAAP8AAAD/AAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgAA
+ AO8AAAD/AAAA/wAAAP8AAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAxwAAAP8AAADcAAAAAAAA
+ AG4AAADRAAAAIwAAANYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJMAAAD/AAAA/wAAAK0AAAAAAAAAAAAA
+ ADYAAAD6AAAA/wAAAMkAAABBAAAAlQAAAP8AAAD/AAAAYAAAAAAAAAAAAAAAggAAAP8AAAD/AAAA9wAA
+ ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAA/wAA
+ AP8AAAD/AAAARwAAAAAAAAAAAAAAVAAAAP8AAAD/AAAA2AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA
+ AP8AAACOAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAA4AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtAAAA/wAA
+ AP8AAABVAAAAAAAAAAAAAAAAAAAAAAAAAB0AAADpAAAA/wAAAP8AAAD/AAAA/wAAAN8AAAANAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUAAADHAAAA/wAAAOAAAAADAAAAAAAAAAwAAAAOAAAA3AAAAP8AAADoAAAAmgAA
+ AJQAAADFAAAA/wAAAP8AAAC+AAAAlQAAAJQAAADPAAAA/wAAAP8AAABCAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAUgAAAP8AAAD/AAAA2QAAAAkAAAAAAAAAAAAAAMoAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAB4AAAAAAAAAAEAAAC9AAAA/wAAAP8AAAD+AAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAADXAAAA/wAAAP8AAACXAAAAAAAAAAAAAABUAAAA/wAA
+ AP8AAADYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkAAAD/AAAA/wAA
+ AMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAD/AAAA/wAAAFUAAAAAAAAAAAAAAAAAAAAAAAAAkAAA
+ AP8AAAD/AAAA6gAAAOcAAAD/AAAA/wAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMAAAD/AAAA3gAA
+ AAAAAAAAAAAAAAAAAA8AAADcAAAA/wAAAL8AAAAAAAAAAAAAAF8AAAD/AAAA/wAAAEoAAAAAAAAAAAAA
+ AHoAAAD/AAAA/wAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA8QAAAP8AAAD9AAAAMgAA
+ AAAAAAAAAAAAnwAAAP8AAAD/AAAA5QAAANkAAADYAAAA4gAAAGUAAAAAAAAALAAAAPgAAAD/AAAA/wAA
+ AP8AAADCAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AHwAAAD/AAAA/wAAAMUAAAADAAAAAAAAAFQAAAD/AAAA/wAAANgAAAAQAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA
+ AP8AAAD/AAAAVQAAAAAAAAAAAAAAAAAAABAAAADiAAAA/wAAAP8AAABVAAAAkwAAAP8AAACtAAAAJQAA
+ AAAAAAAAAAAAgwAAAKsAAACUAAAA4gAAAP8AAADtAAAAkgAAAKcAAACGAAAADwAAANoAAAD/AAAA2gAA
+ AF0AAABXAAAAogAAAP8AAAD/AAAAlgAAAFgAAABXAAAAsgAAAP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADAAAAA/wAAAP8AAABmAAAAAgAAAAAAAAB4AAAA/wAAAP8AAABKAAAAAAAA
+ AAAAAAAPAAAAEQAAAAMAAABlAAAA/wAAAP4AAAD1AAAA/wAAAPgAAAAlAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAPwAAAD/AAAA3wAAABQAAAAAAAAAVAAA
+ AP8AAAD/AAAA2AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AAAA/wAA
+ AP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrAAAA/wAAAP8AAABVAAAAAAAAAAAAAAAAAAAAQQAA
+ AP8AAAD/AAAA2QAAAAEAAABMAAAAdAAAAAAAAAAAAAAAAAAAAAAAAADGAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAM4AAAAQAAAA4gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAADzAAAAcgAA
+ AIoAAADBAAAAqQAAAMkAAAD/AAAA/wAAAMUAAACZAAAAmgAAAKsAAADBAAAAVAAAAIcAAAD/AAAA5QAA
+ AI8AAAD/AAAA/wAAAFoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAeAAAA6gAAAP8AAADtAAAAHwAAAAAAAABUAAAA/wAAAP8AAADYAAAAEAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkAAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AKsAAAD/AAAA/wAAAFUAAAAAAAAAAAAAAAAAAABlAAAA/wAAAP8AAACfAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAJ0AAADUAAAAsAAAAOkAAAD/AAAA8QAAAKMAAADLAAAAogAAAA0AAAC5AAAA0QAA
+ AL8AAACwAAAAtAAAALMAAACuAAAArgAAALYAAAC4AAAAtQAAALQAAADNAAAA1gAAADkAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAACwAAAAAAAAAnwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAB0AAAAoQAAAP8AAAC+AAAAPgAAAPYAAAD/AAAAkQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAADhAAAA/wAAAPoAAAArAAAAAAAA
+ AFQAAAD/AAAA/wAAANgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAA
+ AP8AAAD/AAAAyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqQAAAP8AAAD/AAAAUAAAAAAAAAAAAAAAAAAA
+ AH4AAAD/AAAA/wAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAxQAA
+ AP8AAADeAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAlAAAAIwAAACAAAAAcAAAALAAAAEIAAABCAAAAHgAA
+ AAoAAAATAAAAEQAAABgAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABeAAAAlAAAAHMAAABjAAAAkAAAAP8AAAD/AAAA5AAAAGkAAAB2AAAAjAAAAF4AAADGAAAA/wAA
+ AJ0AAAAKAAAA6AAAAP8AAAC5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAANAAAAD/AAAA/wAAACEAAAAAAAAARwAAAP8AAAD/AAAA1QAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAA/wAAAP8AAADEAAAACQAAAEIAAAAqAAAAHwAA
+ ABMAAACxAAAA/wAAAP8AAABiAAAAHgAAADEAAAAuAAAAkgAAAP8AAAD/AAAAaAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAA/wAAAN8AAAAAAAAAAAAAAAAAAAAAAAAAGwAA
+ APwAAAD/AAAA/wAAAO0AAAC1AAAA/wAAAP8AAAByAAAAlgAAAOoAAADnAAAA6gAAAJ8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAA3AAAAzwAA
+ ANkAAAB2AAAAAAAAAA0AAACHAAAA2QAAAPwAAAD/AAAAigAAAAAAAADTAAAA/wAAANEAAAALAAAAAAAA
+ AAAAAAAAAAAAAAAAADkAAADMAAAAwQAAALQAAACtAAAAmgAAAJoAAACaAAAA7QAAAP8AAAD/AAAArQAA
+ AJoAAAC7AAAA/wAAAP8AAADwAAAAoAAAAJoAAACaAAAAmgAAAK8AAAC1AAAAxAAAAMsAAAAvAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFsAAACUAAAAdgAA
+ AJcAAAD/AAAA/wAAALoAAAAtAAAA/wAAAP0AAAD2AAAA3wAAAPUAAAD/AAAA/wAAAOsAAADzAAAA/wAA
+ AMEAAACkAAAA/wAAAP8AAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAA
+ AM4AAAD/AAAA4gAAABkAAAAiAAAAEwAAAAAAAAAXAAAA1AAAANcAAADXAAAAxQAAAJ4AAAD/AAAA/wAA
+ AFsAAACYAAAA7AAAAOwAAADuAAAApwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAgQAA
+ AP0AAAD5AAAAIAAAAF8AAADBAAAAqwAAAJ4AAACqAAAAvAAAAKMAAACcAAAA1wAAAP8AAAD/AAAA/wAA
+ AN8AAABkAAAAAAAAALIAAAD/AAAA6gAAABkAAAAAAAAAAAAAAAAAAAAAAAAASgAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAApQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAygAAAEAAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAzgAAAKMAAAD/AAAA/wAAAF0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAIwAAAD2AAAA/wAAAP8AAAD/AAAA6QAAAP8AAACLAAAAAAAA
+ AAAAAAAOAAAAJAAAACQAAAAhAAAAdQAAAP8AAAD/AAAAWwAAAB8AAAAzAAAAMgAAAC4AAAAHAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAOAAAAXQAAANEAAAD/AAAA/wAAAP8AAACjAAAAcAAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAAcQAAAAAAAAAAAAAAmwAAAP8AAAD+AAAAJwAA
+ AAAAAAAAAAAAAAAAAAAAAABFAAAA+QAAAPEAAADtAAAA5wAAAN4AAADUAAAA1QAAAN0AAADeAAAA3gAA
+ APkAAAD/AAAA/wAAAPAAAADeAAAA3gAAANwAAADSAAAA2QAAAN4AAADnAAAA7AAAAPMAAAD5AAAAOgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTAAAA8gAA
+ AOYAAADfAAAA4AAAAOwAAADTAAAAPQAAAJoAAACMAAAAeQAAAGkAAADNAAAA/wAAAP8AAACZAAAAdAAA
+ AJUAAAB1AAAApAAAAP8AAAD/AAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/wAA
+ AP8AAAD8AAAA9gAAAPgAAAD/AAAA/wAAALgAAACkAAAAqwAAANMAAAD/AAAA/wAAAO4AAACpAAAA/wAA
+ AP8AAABvAAAAxgAAAOAAAADiAAAAtQAAAGEAAAB8AAAAYAAAAAMAAAAAAAAAAAAAAEAAAAD/AAAA/wAA
+ AP8AAAD/AAAA2AAAAE0AAABYAAAA/wAAAP8AAAB/AAAAQwAAAEQAAABKAAAA6wAAAP8AAAC1AAAA2gAA
+ AP8AAADcAAAADQAAAAAAAACMAAAA/wAAAP8AAAA+AAAAAAAAAAAAAAAAAAAAAAAAABAAAAA2AAAAKQAA
+ ACAAAAAWAAAAAQAAADQAAAAoAAAAAAAAAAAAAAAEAAAA0AAAAP8AAAD/AAAAjgAAAAQAAAAAAAAAAAAA
+ ADsAAAAVAAAAAwAAABYAAAAfAAAALAAAADYAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAApAAAAEQAAAAQAAAAIAAAAHwAAAC8AAAAJAAAAAAAA
+ AAAAAAAAAAAAAAAAAKQAAAD/AAAA/wAAAEcAAAAAAAAAAAAAAAAAAACmAAAA/wAAAP8AAABbAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAA6AAAAEUAAAAxAAAAMgAAADUAAABLAAAAbAAA
+ AP8AAAD/AAAA6gAAALsAAAC+AAAArAAAAJkAAAD/AAAA/wAAAGwAAADRAAAA7wAAAO4AAADIAAAA4wAA
+ AP8AAADaAAAABwAAAAAAAAAAAAAABAAAAK4AAAD/AAAA8AAAAIMAAAAWAAAAAAAAAFkAAAD/AAAA/wAA
+ AFoAAAAQAAAADwAAABcAAADmAAAA/wAAAIQAAACEAAAA/wAAAP8AAABdAAAAAAAAAHQAAAD/AAAA/wAA
+ AEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA4AAAAOkAAACCAAAAGgAA
+ AAAAAADOAAAA/wAAAP8AAACJAAAAAAAAADYAAACaAAAA+wAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ AGcAAAAAAAAAAAAAADoAAABGAAAAKgAAACMAAAAPAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAHAAA
+ ACgAAABBAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADMAAAA/wAA
+ AP8AAADuAAAATAAAAAAAAAAVAAAAFgAAAAgAAAADAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAAGAAAACAAAABMAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAnAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACgAAAA8QAAAOYAAACmAAAAAQAAAAAAAAAAAAAAAAAAAAQAAADKAAAAxwAA
+ AJ4AAAB+AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAUAAAA6QAAAP8AAAD6AAAA4AAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACbAAAASgAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAjAAAACwAA
+ AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABOAAAATQAA
+ ADkAAABCAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADobtSBOF
+ 6ygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJfxomxXcBgMZ5CFbChRgVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADBcBQZwnYAf8J1AH7BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0
+ AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0
+ AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0
+ AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0
+ AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0
+ AH3BdAB9wXQAfcF0AH3BdAB9wXQAfcF0AH3DdgCBwnQAadqRAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAABKI8ikEg/b0A4X55g6D8FcAAAAAAAAAAAAAAAAAAAAA358/CMF1
+ BsPZgwD/yXkB/8J2A+XCdgOfxH0QPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB4B47chAD/0X4A/9F+
+ AP/RfgD/0H4A/9J/AP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SA
+ AP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SA
+ AP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SA
+ AP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SA
+ AP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/9SAAP/UgAD/1IAA/92F
+ AP/AcwDqv38AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqv8GBoLzwACJ
+ //8Ahvv/AoT4/waE85gii/MWAAAAAAAAAADAdwuGz3wA/8N1AP/EdgD/yHgA/898AP/CcwL9wnYEqMR8
+ EycAAAAAAAAAAAAAAAC9exUjxHUD7sd4AP/CdQD/wnUA/8J1AP/DdQD/xHYA/8JzAPvAcwD9wHMA/cBz
+ AP3AcwD9wHMA/cFzAP3BdAD9xHYA/MV1APvFdQD7xXUA+8J0AP3BcwD9wHMA/cBzAP3BcwD9xXMA+8Vy
+ APvFcgD7xXIA+8VyAPvFcgD7xHQA/MFzAP3AcwD9wHMA/cBzAP3AcwD9wHMA/cBzAP3AcwD9wHMA/cFz
+ AP3BdAD9xHYA/MV1APvFdQD7xXUA+8J0AP3BcwD9wHMA/cBzAP3AcwD9wHMA/cBzAP3AcwD9wHMA/cFz
+ AP3BcwD9wXMA/cFzAP3BcwD9wXMA/cFzAP3BcwD9wXMA/cFzAP3BcwD9wXMA/cBzAP3BcwD9wXMA/cFz
+ AP3BcwD9wXMA/cFzAP3BcwD9wXMA/cFzAP3BcwD9yXgA/cN1ANW7dwAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuC74EBif//AYHy/wGB8P8Bg/X/AIv//wOA79YAov4L2HkAO8Z3
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACY31GwuG84cqqtQGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAJdzc3P//////39/f/8UFBT/Tk5O/01NTf8+Pj7/Ghoa/6enp///////kpKS/wAA
+ ALgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf3+/BByG6SQFgvb4DYTxgRmM
+ 8EUGgu9UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw3YORcZ3BfHMeALxx3cHib9/
+ GRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMFAAAAMmIiIj/5ubm/8nJ
+ yf+5ubn/tra2/729vf/s7Oz//////56env8GBgbgAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAH//AhCF7i5Pn+8QCILwmgmG8JwViPJUC4TwiRWK8CMIhe49F4vvIQyF
+ 8igAlP8YjX9jEsN4BnDCcwbNyngDh8R7FSMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAALhSUlL/wMDA//b29v//////+Pj4/8TExP9dXV3/AAAAygAA
+ AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAn/8IVar/BhGI8ToPiO9UEIXyPwuE8W4Ph/BEEInxTgCL/jehgkgxyHoGS8J5GBUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ AFwAAAC2ISEh4CMjI/MfHx/iAQEBugAAAGkAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAIAAAABUAAAAAAAAAAAAA
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/DH.RBAC/Common/GlobalConfig.cs b/DH.RBAC/Common/GlobalConfig.cs
new file mode 100644
index 0000000..6f0f397
--- /dev/null
+++ b/DH.RBAC/Common/GlobalConfig.cs
@@ -0,0 +1,35 @@
+using System.Collections.Generic;
+using System.Drawing;
+using DH.RBAC.Model.Sys;
+
+namespace DH.RBAC.Common
+{
+ ///
+ /// 全局数据存放
+ ///
+ public class GlobalConfig
+ {
+ public static MyConfig Config { get; set; }
+ ///
+ /// 当前登录的用户
+ ///
+ public static SysUser CurrentUser;
+
+ ///
+ /// 当前用户头像
+ ///
+ public static Image Avatar;
+
+ ///
+ /// 当前选的哪个菜单
+ ///
+ public static string CurrentMenuText;
+
+ ///
+ /// 当前用户权限
+ ///
+ public static List PermissionList;
+
+
+ }
+}
diff --git a/DH.RBAC/Common/IconDict.cs b/DH.RBAC/Common/IconDict.cs
new file mode 100644
index 0000000..a801ef0
--- /dev/null
+++ b/DH.RBAC/Common/IconDict.cs
@@ -0,0 +1,719 @@
+using System.Collections.Generic;
+
+namespace DH.RBAC.Common
+{
+ ///
+ /// 图标字典
+ ///
+ public class IconDict
+ {
+ ///
+ /// 全局存放图标字典
+ ///
+ public static Dictionary MyIconDict = Init();
+
+
+ ///
+ /// 初始化字典
+ ///
+ ///
+ private static Dictionary Init()
+ {
+ Dictionary dict = new Dictionary();
+ dict.Add("fa fa-bluetooth", 62099);
+ dict.Add("fa fa-bluetooth-b", 62100);
+ dict.Add("fa fa-codiepie", 62084);
+ dict.Add("fa fa-credit-card-alt", 62083);
+ dict.Add("fa fa-edge", 62082);
+ dict.Add("fa fa-fort-awesome", 62086);
+ dict.Add("fa fa-hashtag", 62098);
+ dict.Add("fa fa-mixcloud", 62089);
+ dict.Add("fa fa-modx", 62085);
+ dict.Add("fa fa-pause-circle", 62091);
+ dict.Add("fa fa-pause-circle-o", 62092);
+ dict.Add("fa fa-percent", 62101);
+ dict.Add("fa fa-product-hunt", 62088);
+ dict.Add("fa fa-reddit-alien", 62081);
+ dict.Add("fa fa-scribd", 62090);
+ dict.Add("fa fa-shopping-bag", 62096);
+ dict.Add("fa fa-shopping-basket", 62097);
+ dict.Add("fa fa-stop-circle", 62093);
+ dict.Add("fa fa-stop-circle-o", 62094);
+ dict.Add("fa fa-usb", 62087);
+ dict.Add("fa fa-adjust", 61506);
+ dict.Add("fa fa-anchor", 61757);
+ dict.Add("fa fa-archive", 61831);
+ dict.Add("fa fa-area-chart", 61950);
+ dict.Add("fa fa-arrows", 61511);
+ dict.Add("fa fa-arrows-h", 61566);
+ dict.Add("fa fa-arrows-v", 61565);
+ dict.Add("fa fa-asterisk", 61545);
+ dict.Add("fa fa-at", 61946);
+ dict.Add("fa fa-automobile", 61881);
+ dict.Add("fa fa-balance-scale", 62030);
+ dict.Add("fa fa-ban", 61534);
+ dict.Add("fa fa-bank", 61852);
+ dict.Add("fa fa-bar-chart", 61568);
+ dict.Add("fa fa-bar-chart-o", 61568);
+ dict.Add("fa fa-barcode", 61482);
+ dict.Add("fa fa-bars", 61641);
+ dict.Add("fa fa-battery-0", 62020);
+ dict.Add("fa fa-battery-1", 62019);
+ dict.Add("fa fa-battery-2", 62018);
+ dict.Add("fa fa-battery-3", 62017);
+ dict.Add("fa fa-battery-4", 62016);
+ dict.Add("fa fa-battery-empty", 62020);
+ dict.Add("fa fa-battery-full", 62016);
+ dict.Add("fa fa-battery-half", 62018);
+ dict.Add("fa fa-battery-quarter", 62019);
+ dict.Add("fa fa-battery-three-quarters", 62017);
+ dict.Add("fa fa-bed", 62006);
+ dict.Add("fa fa-beer", 61692);
+ dict.Add("fa fa-bell", 61683);
+ dict.Add("fa fa-bell-o", 61602);
+ dict.Add("fa fa-bell-slash", 61942);
+ dict.Add("fa fa-bell-slash-o", 61943);
+ dict.Add("fa fa-bicycle", 61958);
+ dict.Add("fa fa-binoculars", 61925);
+ dict.Add("fa fa-birthday-cake", 61949);
+ dict.Add("fa fa-bolt", 61671);
+ dict.Add("fa fa-bomb", 61922);
+ dict.Add("fa fa-book", 61485);
+ dict.Add("fa fa-bookmark", 61486);
+ dict.Add("fa fa-bookmark-o", 61591);
+ dict.Add("fa fa-briefcase", 61617);
+ dict.Add("fa fa-bug", 61832);
+ dict.Add("fa fa-building", 61869);
+ dict.Add("fa fa-building-o", 61687);
+ dict.Add("fa fa-bullhorn", 61601);
+ dict.Add("fa fa-bullseye", 61760);
+ dict.Add("fa fa-bus", 61959);
+ dict.Add("fa fa-cab", 61882);
+ dict.Add("fa fa-calculator", 61932);
+ dict.Add("fa fa-calendar", 61555);
+ dict.Add("fa fa-calendar-check-o", 62068);
+ dict.Add("fa fa-calendar-minus-o", 62066);
+ dict.Add("fa fa-calendar-o", 61747);
+ dict.Add("fa fa-calendar-plus-o", 62065);
+ dict.Add("fa fa-calendar-times-o", 62067);
+ dict.Add("fa fa-camera", 61488);
+ dict.Add("fa fa-camera-retro", 61571);
+ dict.Add("fa fa-car", 61881);
+ dict.Add("fa fa-caret-square-o-down", 61776);
+ dict.Add("fa fa-caret-square-o-left", 61841);
+ dict.Add("fa fa-caret-square-o-right", 61778);
+ dict.Add("fa fa-caret-square-o-up", 61777);
+ dict.Add("fa fa-cart-arrow-down", 61976);
+ dict.Add("fa fa-cart-plus", 61975);
+ dict.Add("fa fa-cc", 61962);
+ dict.Add("fa fa-certificate", 61603);
+ dict.Add("fa fa-check", 61452);
+ dict.Add("fa fa-check-circle", 61528);
+ dict.Add("fa fa-check-circle-o", 61533);
+ dict.Add("fa fa-check-square", 61770);
+ dict.Add("fa fa-check-square-o", 61510);
+ dict.Add("fa fa-child", 61870);
+ dict.Add("fa fa-circle", 61713);
+ dict.Add("fa fa-circle-o", 61708);
+ dict.Add("fa fa-circle-o-notch", 61902);
+ dict.Add("fa fa-circle-thin", 61915);
+ dict.Add("fa fa-clock-o", 61463);
+ dict.Add("fa fa-clone", 62029);
+ dict.Add("fa fa-close", 61453);
+ dict.Add("fa fa-cloud", 61634);
+ dict.Add("fa fa-cloud-download", 61677);
+ dict.Add("fa fa-cloud-upload", 61678);
+ dict.Add("fa fa-code", 61729);
+ dict.Add("fa fa-code-fork", 61734);
+ dict.Add("fa fa-coffee", 61684);
+ dict.Add("fa fa-cog", 61459);
+ dict.Add("fa fa-cogs", 61573);
+ dict.Add("fa fa-comment", 61557);
+ dict.Add("fa fa-comment-o", 61669);
+ dict.Add("fa fa-commenting", 62074);
+ dict.Add("fa fa-commenting-o", 62075);
+ dict.Add("fa fa-comments", 61574);
+ dict.Add("fa fa-comments-o", 61670);
+ dict.Add("fa fa-compass", 61774);
+ dict.Add("fa fa-copyright", 61945);
+ dict.Add("fa fa-creative-commons", 62046);
+ dict.Add("fa fa-credit-card", 61597);
+ dict.Add("fa fa-crop", 61733);
+ dict.Add("fa fa-crosshairs", 61531);
+ dict.Add("fa fa-cube", 61874);
+ dict.Add("fa fa-cubes", 61875);
+ dict.Add("fa fa-cutlery", 61685);
+ dict.Add("fa fa-dashboard", 61668);
+ dict.Add("fa fa-database", 61888);
+ dict.Add("fa fa-desktop", 61704);
+ dict.Add("fa fa-diamond", 61977);
+ dict.Add("fa fa-dot-circle-o", 61842);
+ dict.Add("fa fa-download", 61465);
+ dict.Add("fa fa-edit", 61508);
+ dict.Add("fa fa-ellipsis-h", 61761);
+ dict.Add("fa fa-ellipsis-v", 61762);
+ dict.Add("fa fa-envelope", 61664);
+ dict.Add("fa fa-envelope-o", 61443);
+ dict.Add("fa fa-envelope-square", 61849);
+ dict.Add("fa fa-eraser", 61741);
+ dict.Add("fa fa-exchange", 61676);
+ dict.Add("fa fa-exclamation", 61738);
+ dict.Add("fa fa-exclamation-circle", 61546);
+ dict.Add("fa fa-exclamation-triangle", 61553);
+ dict.Add("fa fa-external-link", 61582);
+ dict.Add("fa fa-external-link-square", 61772);
+ dict.Add("fa fa-eye", 61550);
+ dict.Add("fa fa-eye-slash", 61552);
+ dict.Add("fa fa-eyedropper", 61947);
+ dict.Add("fa fa-fax", 61868);
+ dict.Add("fa fa-feed", 61598);
+ dict.Add("fa fa-female", 61826);
+ dict.Add("fa fa-fighter-jet", 61691);
+ dict.Add("fa fa-file-archive-o", 61894);
+ dict.Add("fa fa-file-audio-o", 61895);
+ dict.Add("fa fa-file-code-o", 61897);
+ dict.Add("fa fa-file-excel-o", 61891);
+ dict.Add("fa fa-file-image-o", 61893);
+ dict.Add("fa fa-file-movie-o", 61896);
+ dict.Add("fa fa-file-pdf-o", 61889);
+ dict.Add("fa fa-file-photo-o", 61893);
+ dict.Add("fa fa-file-picture-o", 61893);
+ dict.Add("fa fa-file-powerpoint-o", 61892);
+ dict.Add("fa fa-file-sound-o", 61895);
+ dict.Add("fa fa-file-video-o", 61896);
+ dict.Add("fa fa-file-word-o", 61890);
+ dict.Add("fa fa-file-zip-o", 61894);
+ dict.Add("fa fa-film", 61448);
+ dict.Add("fa fa-filter", 61616);
+ dict.Add("fa fa-fire", 61549);
+ dict.Add("fa fa-fire-extinguisher", 61748);
+ dict.Add("fa fa-flag", 61476);
+ dict.Add("fa fa-flag-checkered", 61726);
+ dict.Add("fa fa-flag-o", 61725);
+ dict.Add("fa fa-flash", 61671);
+ dict.Add("fa fa-flask", 61635);
+ dict.Add("fa fa-folder", 61563);
+ dict.Add("fa fa-folder-o", 61716);
+ dict.Add("fa fa-folder-open", 61564);
+ dict.Add("fa fa-folder-open-o", 61717);
+ dict.Add("fa fa-frown-o", 61721);
+ dict.Add("fa fa-futbol-o", 61923);
+ dict.Add("fa fa-gamepad", 61723);
+ dict.Add("fa fa-gavel", 61667);
+ dict.Add("fa fa-gear", 61459);
+ dict.Add("fa fa-gears", 61573);
+ dict.Add("fa fa-gift", 61547);
+ dict.Add("fa fa-glass", 61440);
+ dict.Add("fa fa-globe", 61612);
+ dict.Add("fa fa-graduation-cap", 61853);
+ dict.Add("fa fa-group", 61632);
+ dict.Add("fa fa-hand-grab-o", 62037);
+ dict.Add("fa fa-hand-lizard-o", 62040);
+ dict.Add("fa fa-hand-paper-o", 62038);
+ dict.Add("fa fa-hand-peace-o", 62043);
+ dict.Add("fa fa-hand-pointer-o", 62042);
+ dict.Add("fa fa-hand-rock-o", 62037);
+ dict.Add("fa fa-hand-scissors-o", 62039);
+ dict.Add("fa fa-hand-spock-o", 62041);
+ dict.Add("fa fa-hand-stop-o", 62038);
+ dict.Add("fa fa-hdd-o", 61600);
+ dict.Add("fa fa-headphones", 61477);
+ dict.Add("fa fa-heart", 61444);
+ dict.Add("fa fa-heart-o", 61578);
+ dict.Add("fa fa-heartbeat", 61982);
+ dict.Add("fa fa-history", 61914);
+ dict.Add("fa fa-home", 61461);
+ dict.Add("fa fa-hotel", 62006);
+ dict.Add("fa fa-hourglass", 62036);
+ dict.Add("fa fa-hourglass-1", 62033);
+ dict.Add("fa fa-hourglass-2", 62034);
+ dict.Add("fa fa-hourglass-3", 62035);
+ dict.Add("fa fa-hourglass-end", 62035);
+ dict.Add("fa fa-hourglass-half", 62034);
+ dict.Add("fa fa-hourglass-o", 62032);
+ dict.Add("fa fa-hourglass-start", 62033);
+ dict.Add("fa fa-i-cursor", 62022);
+ dict.Add("fa fa-image", 61502);
+ dict.Add("fa fa-inbox", 61468);
+ dict.Add("fa fa-industry", 62069);
+ dict.Add("fa fa-info", 61737);
+ dict.Add("fa fa-info-circle", 61530);
+ dict.Add("fa fa-institution", 61852);
+ dict.Add("fa fa-key", 61572);
+ dict.Add("fa fa-keyboard-o", 61724);
+ dict.Add("fa fa-language", 61867);
+ dict.Add("fa fa-laptop", 61705);
+ dict.Add("fa fa-leaf", 61548);
+ dict.Add("fa fa-legal", 61667);
+ dict.Add("fa fa-lemon-o", 61588);
+ dict.Add("fa fa-level-down", 61769);
+ dict.Add("fa fa-level-up", 61768);
+ dict.Add("fa fa-life-bouy", 61901);
+ dict.Add("fa fa-life-buoy", 61901);
+ dict.Add("fa fa-life-ring", 61901);
+ dict.Add("fa fa-life-saver", 61901);
+ dict.Add("fa fa-lightbulb-o", 61675);
+ dict.Add("fa fa-line-chart", 61953);
+ dict.Add("fa fa-location-arrow", 61732);
+ dict.Add("fa fa-lock", 61475);
+ dict.Add("fa fa-magic", 61648);
+ dict.Add("fa fa-magnet", 61558);
+ dict.Add("fa fa-mail-forward", 61540);
+ dict.Add("fa fa-mail-reply", 61714);
+ dict.Add("fa fa-mail-reply-all", 61730);
+ dict.Add("fa fa-male", 61827);
+ dict.Add("fa fa-map", 62073);
+ dict.Add("fa fa-map-marker", 61505);
+ dict.Add("fa fa-map-o", 62072);
+ dict.Add("fa fa-map-pin", 62070);
+ dict.Add("fa fa-map-signs", 62071);
+ dict.Add("fa fa-meh-o", 61722);
+ dict.Add("fa fa-microphone", 61744);
+ dict.Add("fa fa-microphone-slash", 61745);
+ dict.Add("fa fa-minus", 61544);
+ dict.Add("fa fa-minus-circle", 61526);
+ dict.Add("fa fa-minus-square", 61766);
+ dict.Add("fa fa-minus-square-o", 61767);
+ dict.Add("fa fa-mobile", 61707);
+ dict.Add("fa fa-mobile-phone", 61707);
+ dict.Add("fa fa-money", 61654);
+ dict.Add("fa fa-moon-o", 61830);
+ dict.Add("fa fa-mortar-board", 61853);
+ dict.Add("fa fa-motorcycle", 61980);
+ dict.Add("fa fa-mouse-pointer", 62021);
+ dict.Add("fa fa-music", 61441);
+ dict.Add("fa fa-navicon", 61641);
+ dict.Add("fa fa-newspaper-o", 61930);
+ dict.Add("fa fa-object-group", 62023);
+ dict.Add("fa fa-object-ungroup", 62024);
+ dict.Add("fa fa-paint-brush", 61948);
+ dict.Add("fa fa-paper-plane", 61912);
+ dict.Add("fa fa-paper-plane-o", 61913);
+ dict.Add("fa fa-paw", 61872);
+ dict.Add("fa fa-pencil", 61504);
+ dict.Add("fa fa-pencil-square", 61771);
+ dict.Add("fa fa-pencil-square-o", 61508);
+ dict.Add("fa fa-phone", 61589);
+ dict.Add("fa fa-phone-square", 61592);
+ dict.Add("fa fa-photo", 61502);
+ dict.Add("fa fa-picture-o", 61502);
+ dict.Add("fa fa-pie-chart", 61952);
+ dict.Add("fa fa-plane", 61554);
+ dict.Add("fa fa-plug", 61926);
+ dict.Add("fa fa-plus", 61543);
+ dict.Add("fa fa-plus-circle", 61525);
+ dict.Add("fa fa-plus-square", 61694);
+ dict.Add("fa fa-plus-square-o", 61846);
+ dict.Add("fa fa-power-off", 61457);
+ dict.Add("fa fa-print", 61487);
+ dict.Add("fa fa-puzzle-piece", 61742);
+ dict.Add("fa fa-qrcode", 61481);
+ dict.Add("fa fa-question", 61736);
+ dict.Add("fa fa-question-circle", 61529);
+ dict.Add("fa fa-quote-left", 61709);
+ dict.Add("fa fa-quote-right", 61710);
+ dict.Add("fa fa-random", 61556);
+ dict.Add("fa fa-recycle", 61880);
+ dict.Add("fa fa-refresh", 61473);
+ dict.Add("fa fa-registered", 62045);
+ dict.Add("fa fa-remove", 61453);
+ dict.Add("fa fa-reorder", 61641);
+ dict.Add("fa fa-reply", 61714);
+ dict.Add("fa fa-reply-all", 61730);
+ dict.Add("fa fa-retweet", 61561);
+ dict.Add("fa fa-road", 61464);
+ dict.Add("fa fa-rocket", 61749);
+ dict.Add("fa fa-rss", 61598);
+ dict.Add("fa fa-rss-square", 61763);
+ dict.Add("fa fa-search", 61442);
+ dict.Add("fa fa-search-minus", 61456);
+ dict.Add("fa fa-search-plus", 61454);
+ dict.Add("fa fa-send", 61912);
+ dict.Add("fa fa-send-o", 61913);
+ dict.Add("fa fa-server", 62003);
+ dict.Add("fa fa-share", 61540);
+ dict.Add("fa fa-share-alt", 61920);
+ dict.Add("fa fa-share-alt-square", 61921);
+ dict.Add("fa fa-share-square", 61773);
+ dict.Add("fa fa-share-square-o", 61509);
+ dict.Add("fa fa-shield", 61746);
+ dict.Add("fa fa-ship", 61978);
+ dict.Add("fa fa-shopping-cart", 61562);
+ dict.Add("fa fa-sign-in", 61584);
+ dict.Add("fa fa-sign-out", 61579);
+ dict.Add("fa fa-signal", 61458);
+ dict.Add("fa fa-sitemap", 61672);
+ dict.Add("fa fa-sliders", 61918);
+ dict.Add("fa fa-smile-o", 61720);
+ dict.Add("fa fa-soccer-ball-o", 61923);
+ dict.Add("fa fa-sort", 61660);
+ dict.Add("fa fa-sort-alpha-asc", 61789);
+ dict.Add("fa fa-sort-alpha-desc", 61790);
+ dict.Add("fa fa-sort-amount-asc", 61792);
+ dict.Add("fa fa-sort-amount-desc", 61793);
+ dict.Add("fa fa-sort-asc", 61662);
+ dict.Add("fa fa-sort-desc", 61661);
+ dict.Add("fa fa-sort-down", 61661);
+ dict.Add("fa fa-sort-numeric-asc", 61794);
+ dict.Add("fa fa-sort-numeric-desc", 61795);
+ dict.Add("fa fa-sort-up", 61662);
+ dict.Add("fa fa-space-shuttle", 61847);
+ dict.Add("fa fa-spoon", 61873);
+ dict.Add("fa fa-square", 61640);
+ dict.Add("fa fa-square-o", 61590);
+ dict.Add("fa fa-star", 61445);
+ dict.Add("fa fa-star-half", 61577);
+ dict.Add("fa fa-star-half-empty", 61731);
+ dict.Add("fa fa-star-half-full", 61731);
+ dict.Add("fa fa-star-half-o", 61731);
+ dict.Add("fa fa-star-o", 61446);
+ dict.Add("fa fa-sticky-note", 62025);
+ dict.Add("fa fa-sticky-note-o", 62026);
+ dict.Add("fa fa-street-view", 61981);
+ dict.Add("fa fa-suitcase", 61682);
+ dict.Add("fa fa-sun-o", 61829);
+ dict.Add("fa fa-support", 61901);
+ dict.Add("fa fa-tablet", 61706);
+ dict.Add("fa fa-tachometer", 61668);
+ dict.Add("fa fa-tag", 61483);
+ dict.Add("fa fa-tags", 61484);
+ dict.Add("fa fa-tasks", 61614);
+ dict.Add("fa fa-taxi", 61882);
+ dict.Add("fa fa-television", 62060);
+ dict.Add("fa fa-terminal", 61728);
+ dict.Add("fa fa-thumb-tack", 61581);
+ dict.Add("fa fa-thumbs-down", 61797);
+ dict.Add("fa fa-thumbs-o-down", 61576);
+ dict.Add("fa fa-thumbs-o-up", 61575);
+ dict.Add("fa fa-thumbs-up", 61796);
+ dict.Add("fa fa-ticket", 61765);
+ dict.Add("fa fa-times", 61453);
+ dict.Add("fa fa-times-circle", 61527);
+ dict.Add("fa fa-times-circle-o", 61532);
+ dict.Add("fa fa-tint", 61507);
+ dict.Add("fa fa-toggle-down", 61776);
+ dict.Add("fa fa-toggle-left", 61841);
+ dict.Add("fa fa-toggle-off", 61956);
+ dict.Add("fa fa-toggle-on", 61957);
+ dict.Add("fa fa-toggle-right", 61778);
+ dict.Add("fa fa-toggle-up", 61777);
+ dict.Add("fa fa-trademark", 62044);
+ dict.Add("fa fa-trash", 61944);
+ dict.Add("fa fa-trash-o", 61460);
+ dict.Add("fa fa-tree", 61883);
+ dict.Add("fa fa-trophy", 61585);
+ dict.Add("fa fa-truck", 61649);
+ dict.Add("fa fa-tty", 61924);
+ dict.Add("fa fa-tv", 62060);
+ dict.Add("fa fa-umbrella", 61673);
+ dict.Add("fa fa-university", 61852);
+ dict.Add("fa fa-unlock", 61596);
+ dict.Add("fa fa-unlock-alt", 61758);
+ dict.Add("fa fa-unsorted", 61660);
+ dict.Add("fa fa-upload", 61587);
+ dict.Add("fa fa-user", 61447);
+ dict.Add("fa fa-user-plus", 62004);
+ dict.Add("fa fa-user-secret", 61979);
+ dict.Add("fa fa-user-times", 62005);
+ dict.Add("fa fa-users", 61632);
+ dict.Add("fa fa-video-camera", 61501);
+ dict.Add("fa fa-volume-down", 61479);
+ dict.Add("fa fa-volume-off", 61478);
+ dict.Add("fa fa-volume-up", 61480);
+ dict.Add("fa fa-warning", 61553);
+ dict.Add("fa fa-wheelchair", 61843);
+ dict.Add("fa fa-wifi", 61931);
+ dict.Add("fa fa-wrench", 61613);
+ dict.Add("fa fa-hand-o-down", 61607);
+ dict.Add("fa fa-hand-o-left", 61605);
+ dict.Add("fa fa-hand-o-right", 61604);
+ dict.Add("fa fa-hand-o-up", 61606);
+ dict.Add("fa fa-ambulance", 61689);
+ dict.Add("fa fa-subway", 62009);
+ dict.Add("fa fa-train", 62008);
+ dict.Add("fa fa-genderless", 61997);
+ dict.Add("fa fa-intersex", 61988);
+ dict.Add("fa fa-mars", 61986);
+ dict.Add("fa fa-mars-double", 61991);
+ dict.Add("fa fa-mars-stroke", 61993);
+ dict.Add("fa fa-mars-stroke-h", 61995);
+ dict.Add("fa fa-mars-stroke-v", 61994);
+ dict.Add("fa fa-mercury", 61987);
+ dict.Add("fa fa-neuter", 61996);
+ dict.Add("fa fa-transgender", 61988);
+ dict.Add("fa fa-transgender-alt", 61989);
+ dict.Add("fa fa-venus", 61985);
+ dict.Add("fa fa-venus-double", 61990);
+ dict.Add("fa fa-venus-mars", 61992);
+ dict.Add("fa fa-file", 61787);
+ dict.Add("fa fa-file-o", 61462);
+ dict.Add("fa fa-file-text", 61788);
+ dict.Add("fa fa-file-text-o", 61686);
+ dict.Add("fa fa-cc-amex", 61939);
+ dict.Add("fa fa-cc-diners-club", 62028);
+ dict.Add("fa fa-cc-discover", 61938);
+ dict.Add("fa fa-cc-jcb", 62027);
+ dict.Add("fa fa-cc-mastercard", 61937);
+ dict.Add("fa fa-cc-paypal", 61940);
+ dict.Add("fa fa-cc-stripe", 61941);
+ dict.Add("fa fa-cc-visa", 61936);
+ dict.Add("fa fa-google-wallet", 61934);
+ dict.Add("fa fa-paypal", 61933);
+ dict.Add("fa fa-bitcoin", 61786);
+ dict.Add("fa fa-btc", 61786);
+ dict.Add("fa fa-cny", 61783);
+ dict.Add("fa fa-dollar", 61781);
+ dict.Add("fa fa-eur", 61779);
+ dict.Add("fa fa-euro", 61779);
+ dict.Add("fa fa-gbp", 61780);
+ dict.Add("fa fa-gg", 62048);
+ dict.Add("fa fa-gg-circle", 62049);
+ dict.Add("fa fa-ils", 61963);
+ dict.Add("fa fa-inr", 61782);
+ dict.Add("fa fa-jpy", 61783);
+ dict.Add("fa fa-krw", 61785);
+ dict.Add("fa fa-rmb", 61783);
+ dict.Add("fa fa-rouble", 61784);
+ dict.Add("fa fa-rub", 61784);
+ dict.Add("fa fa-ruble", 61784);
+ dict.Add("fa fa-rupee", 61782);
+ dict.Add("fa fa-shekel", 61963);
+ dict.Add("fa fa-sheqel", 61963);
+ dict.Add("fa fa-try", 61845);
+ dict.Add("fa fa-turkish-lira", 61845);
+ dict.Add("fa fa-usd", 61781);
+ dict.Add("fa fa-won", 61785);
+ dict.Add("fa fa-yen", 61783);
+ dict.Add("fa fa-align-center", 61495);
+ dict.Add("fa fa-align-justify", 61497);
+ dict.Add("fa fa-align-left", 61494);
+ dict.Add("fa fa-align-right", 61496);
+ dict.Add("fa fa-bold", 61490);
+ dict.Add("fa fa-chain", 61633);
+ dict.Add("fa fa-chain-broken", 61735);
+ dict.Add("fa fa-clipboard", 61674);
+ dict.Add("fa fa-columns", 61659);
+ dict.Add("fa fa-copy", 61637);
+ dict.Add("fa fa-cut", 61636);
+ dict.Add("fa fa-dedent", 61499);
+ dict.Add("fa fa-files-o", 61637);
+ dict.Add("fa fa-floppy-o", 61639);
+ dict.Add("fa fa-font", 61489);
+ dict.Add("fa fa-header", 61916);
+ dict.Add("fa fa-indent", 61500);
+ dict.Add("fa fa-italic", 61491);
+ dict.Add("fa fa-link", 61633);
+ dict.Add("fa fa-list", 61498);
+ dict.Add("fa fa-list-alt", 61474);
+ dict.Add("fa fa-list-ol", 61643);
+ dict.Add("fa fa-list-ul", 61642);
+ dict.Add("fa fa-outdent", 61499);
+ dict.Add("fa fa-paperclip", 61638);
+ dict.Add("fa fa-paragraph", 61917);
+ dict.Add("fa fa-paste", 61674);
+ dict.Add("fa fa-repeat", 61470);
+ dict.Add("fa fa-rotate-left", 61666);
+ dict.Add("fa fa-rotate-right", 61470);
+ dict.Add("fa fa-save", 61639);
+ dict.Add("fa fa-scissors", 61636);
+ dict.Add("fa fa-strikethrough", 61644);
+ dict.Add("fa fa-subscript", 61740);
+ dict.Add("fa fa-superscript", 61739);
+ dict.Add("fa fa-table", 61646);
+ dict.Add("fa fa-text-height", 61492);
+ dict.Add("fa fa-text-width", 61493);
+ dict.Add("fa fa-th", 61450);
+ dict.Add("fa fa-th-large", 61449);
+ dict.Add("fa fa-th-list", 61451);
+ dict.Add("fa fa-underline", 61645);
+ dict.Add("fa fa-undo", 61666);
+ dict.Add("fa fa-unlink", 61735);
+ dict.Add("fa fa-angle-double-down", 61699);
+ dict.Add("fa fa-angle-double-left", 61696);
+ dict.Add("fa fa-angle-double-right", 61697);
+ dict.Add("fa fa-angle-double-up", 61698);
+ dict.Add("fa fa-angle-down", 61703);
+ dict.Add("fa fa-angle-left", 61700);
+ dict.Add("fa fa-angle-right", 61701);
+ dict.Add("fa fa-angle-up", 61702);
+ dict.Add("fa fa-arrow-circle-down", 61611);
+ dict.Add("fa fa-arrow-circle-left", 61608);
+ dict.Add("fa fa-arrow-circle-o-down", 61466);
+ dict.Add("fa fa-arrow-circle-o-left", 61840);
+ dict.Add("fa fa-arrow-circle-o-right", 61838);
+ dict.Add("fa fa-arrow-circle-o-up", 61467);
+ dict.Add("fa fa-arrow-circle-right", 61609);
+ dict.Add("fa fa-arrow-circle-up", 61610);
+ dict.Add("fa fa-arrow-down", 61539);
+ dict.Add("fa fa-arrow-left", 61536);
+ dict.Add("fa fa-arrow-right", 61537);
+ dict.Add("fa fa-arrow-up", 61538);
+ dict.Add("fa fa-arrows-alt", 61618);
+ dict.Add("fa fa-caret-down", 61655);
+ dict.Add("fa fa-caret-left", 61657);
+ dict.Add("fa fa-caret-right", 61658);
+ dict.Add("fa fa-caret-up", 61656);
+ dict.Add("fa fa-chevron-circle-down", 61754);
+ dict.Add("fa fa-chevron-circle-left", 61751);
+ dict.Add("fa fa-chevron-circle-right", 61752);
+ dict.Add("fa fa-chevron-circle-up", 61753);
+ dict.Add("fa fa-chevron-down", 61560);
+ dict.Add("fa fa-chevron-left", 61523);
+ dict.Add("fa fa-chevron-right", 61524);
+ dict.Add("fa fa-chevron-up", 61559);
+ dict.Add("fa fa-long-arrow-down", 61813);
+ dict.Add("fa fa-long-arrow-left", 61815);
+ dict.Add("fa fa-long-arrow-right", 61816);
+ dict.Add("fa fa-long-arrow-up", 61814);
+ dict.Add("fa fa-backward", 61514);
+ dict.Add("fa fa-compress", 61542);
+ dict.Add("fa fa-eject", 61522);
+ dict.Add("fa fa-expand", 61541);
+ dict.Add("fa fa-fast-backward", 61513);
+ dict.Add("fa fa-fast-forward", 61520);
+ dict.Add("fa fa-forward", 61518);
+ dict.Add("fa fa-pause", 61516);
+ dict.Add("fa fa-play", 61515);
+ dict.Add("fa fa-play-circle", 61764);
+ dict.Add("fa fa-play-circle-o", 61469);
+ dict.Add("fa fa-step-backward", 61512);
+ dict.Add("fa fa-step-forward", 61521);
+ dict.Add("fa fa-stop", 61517);
+ dict.Add("fa fa-youtube-play", 61802);
+ dict.Add("fa fa-500px", 62062);
+ dict.Add("fa fa-adn", 61808);
+ dict.Add("fa fa-amazon", 62064);
+ dict.Add("fa fa-android", 61819);
+ dict.Add("fa fa-angellist", 61961);
+ dict.Add("fa fa-apple", 61817);
+ dict.Add("fa fa-behance", 61876);
+ dict.Add("fa fa-behance-square", 61877);
+ dict.Add("fa fa-bitbucket", 61809);
+ dict.Add("fa fa-bitbucket-square", 61810);
+ dict.Add("fa fa-black-tie", 62078);
+ dict.Add("fa fa-buysellads", 61965);
+ dict.Add("fa fa-chrome", 62056);
+ dict.Add("fa fa-codepen", 61899);
+ dict.Add("fa fa-connectdevelop", 61966);
+ dict.Add("fa fa-contao", 62061);
+ dict.Add("fa fa-css3", 61756);
+ dict.Add("fa fa-dashcube", 61968);
+ dict.Add("fa fa-delicious", 61861);
+ dict.Add("fa fa-deviantart", 61885);
+ dict.Add("fa fa-digg", 61862);
+ dict.Add("fa fa-dribbble", 61821);
+ dict.Add("fa fa-dropbox", 61803);
+ dict.Add("fa fa-drupal", 61865);
+ dict.Add("fa fa-empire", 61905);
+ dict.Add("fa fa-expeditedssl", 62014);
+ dict.Add("fa fa-facebook", 61594);
+ dict.Add("fa fa-facebook-f", 61594);
+ dict.Add("fa fa-facebook-official", 62000);
+ dict.Add("fa fa-facebook-square", 61570);
+ dict.Add("fa fa-firefox", 62057);
+ dict.Add("fa fa-flickr", 61806);
+ dict.Add("fa fa-fonticons", 62080);
+ dict.Add("fa fa-forumbee", 61969);
+ dict.Add("fa fa-foursquare", 61824);
+ dict.Add("fa fa-ge", 61905);
+ dict.Add("fa fa-get-pocket", 62053);
+ dict.Add("fa fa-git", 61907);
+ dict.Add("fa fa-git-square", 61906);
+ dict.Add("fa fa-github", 61595);
+ dict.Add("fa fa-github-alt", 61715);
+ dict.Add("fa fa-github-square", 61586);
+ dict.Add("fa fa-gittip", 61828);
+ dict.Add("fa fa-google", 61856);
+ dict.Add("fa fa-google-plus", 61653);
+ dict.Add("fa fa-google-plus-square", 61652);
+ dict.Add("fa fa-gratipay", 61828);
+ dict.Add("fa fa-hacker-news", 61908);
+ dict.Add("fa fa-houzz", 62076);
+ dict.Add("fa fa-html5", 61755);
+ dict.Add("fa fa-instagram", 61805);
+ dict.Add("fa fa-internet-explorer", 62059);
+ dict.Add("fa fa-ioxhost", 61960);
+ dict.Add("fa fa-joomla", 61866);
+ dict.Add("fa fa-jsfiddle", 61900);
+ dict.Add("fa fa-lastfm", 61954);
+ dict.Add("fa fa-lastfm-square", 61955);
+ dict.Add("fa fa-leanpub", 61970);
+ dict.Add("fa fa-linkedin", 61665);
+ dict.Add("fa fa-linkedin-square", 61580);
+ dict.Add("fa fa-linux", 61820);
+ dict.Add("fa fa-maxcdn", 61750);
+ dict.Add("fa fa-meanpath", 61964);
+ dict.Add("fa fa-medium", 62010);
+ dict.Add("fa fa-odnoklassniki", 62051);
+ dict.Add("fa fa-odnoklassniki-square", 62052);
+ dict.Add("fa fa-opencart", 62013);
+ dict.Add("fa fa-openid", 61851);
+ dict.Add("fa fa-opera", 62058);
+ dict.Add("fa fa-optin-monster", 62012);
+ dict.Add("fa fa-pagelines", 61836);
+ dict.Add("fa fa-pied-piper", 62126);
+ dict.Add("fa fa-pied-piper-alt", 61864);
+ dict.Add("fa fa-pinterest", 61650);
+ dict.Add("fa fa-pinterest-p", 62001);
+ dict.Add("fa fa-pinterest-square", 61651);
+ dict.Add("fa fa-qq", 61910);
+ dict.Add("fa fa-ra", 61904);
+ dict.Add("fa fa-rebel", 61904);
+ dict.Add("fa fa-reddit", 61857);
+ dict.Add("fa fa-reddit-square", 61858);
+ dict.Add("fa fa-renren", 61835);
+ dict.Add("fa fa-safari", 62055);
+ dict.Add("fa fa-sellsy", 61971);
+ dict.Add("fa fa-shirtsinbulk", 61972);
+ dict.Add("fa fa-simplybuilt", 61973);
+ dict.Add("fa fa-skyatlas", 61974);
+ dict.Add("fa fa-skype", 61822);
+ dict.Add("fa fa-slack", 61848);
+ dict.Add("fa fa-slideshare", 61927);
+ dict.Add("fa fa-soundcloud", 61886);
+ dict.Add("fa fa-spotify", 61884);
+ dict.Add("fa fa-stack-exchange", 61837);
+ dict.Add("fa fa-stack-overflow", 61804);
+ dict.Add("fa fa-steam", 61878);
+ dict.Add("fa fa-steam-square", 61879);
+ dict.Add("fa fa-stumbleupon", 61860);
+ dict.Add("fa fa-stumbleupon-circle", 61859);
+ dict.Add("fa fa-tencent-weibo", 61909);
+ dict.Add("fa fa-trello", 61825);
+ dict.Add("fa fa-tripadvisor", 62050);
+ dict.Add("fa fa-tumblr", 61811);
+ dict.Add("fa fa-tumblr-square", 61812);
+ dict.Add("fa fa-twitch", 61928);
+ dict.Add("fa fa-twitter", 61593);
+ dict.Add("fa fa-twitter-square", 61569);
+ dict.Add("fa fa-viacoin", 62007);
+ dict.Add("fa fa-vimeo", 62077);
+ dict.Add("fa fa-vimeo-square", 61844);
+ dict.Add("fa fa-vine", 61898);
+ dict.Add("fa fa-vk", 61833);
+ dict.Add("fa fa-wechat", 61911);
+ dict.Add("fa fa-weibo", 61834);
+ dict.Add("fa fa-weixin", 61911);
+ dict.Add("fa fa-whatsapp", 62002);
+ dict.Add("fa fa-wikipedia-w", 62054);
+ dict.Add("fa fa-windows", 61818);
+ dict.Add("fa fa-wordpress", 61850);
+ dict.Add("fa fa-xing", 61800);
+ dict.Add("fa fa-xing-square", 61801);
+ dict.Add("fa fa-y-combinator", 62011);
+ dict.Add("fa fa-y-combinator-square", 61908);
+ dict.Add("fa fa-yahoo", 61854);
+ dict.Add("fa fa-yc", 62011);
+ dict.Add("fa fa-yc-square", 61908);
+ dict.Add("fa fa-yelp", 61929);
+ dict.Add("fa fa-youtube", 61799);
+ dict.Add("fa fa-youtube-square", 61798);
+ dict.Add("fa fa-h-square", 61693);
+ dict.Add("fa fa-hospital-o", 61688);
+ dict.Add("fa fa-medkit", 61690);
+ dict.Add("fa fa-stethoscope", 61681);
+ dict.Add("fa fa-user-md", 61680);
+ return dict;
+ }
+ }
+}
diff --git a/DH.RBAC/Common/MyConfig.cs b/DH.RBAC/Common/MyConfig.cs
new file mode 100644
index 0000000..8b5cac4
--- /dev/null
+++ b/DH.RBAC/Common/MyConfig.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Common
+{
+ public class MyConfig
+ {
+ public int EveryPageDataCount { get; set; }
+ ///
+ /// 数据库类型
+ ///
+ public string DbType { get; set; }
+ ///
+ /// 数据库主机IP
+ ///
+ public string DbHost { get; set; }
+
+ ///
+ /// 数据库名
+ ///
+ public string DbName { get; set; }
+
+ ///
+ /// 数据库用户名
+ ///
+ public string DbUserName { get; set; }
+
+ ///
+ /// 数据库密码
+ ///
+ public string DbPassword { get; set; }
+
+
+ private bool _debug = false;
+ ///
+ /// 是否调试模式,调试模式将会输出日志
+ ///
+ public bool Debug { get { return _debug; } set { _debug = value; } }
+
+
+ }
+}
diff --git a/DH.RBAC/DH.RBAC.csproj b/DH.RBAC/DH.RBAC.csproj
new file mode 100644
index 0000000..86c566a
--- /dev/null
+++ b/DH.RBAC/DH.RBAC.csproj
@@ -0,0 +1,143 @@
+
+
+
+ net8.0-windows
+ false
+ enable
+ enable
+ ..\
+ output
+ true
+ true
+ AnyCPU;x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DH.RBAC/Logic/BaseLogic.cs b/DH.RBAC/Logic/BaseLogic.cs
new file mode 100644
index 0000000..0df6556
--- /dev/null
+++ b/DH.RBAC/Logic/BaseLogic.cs
@@ -0,0 +1,303 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.Data;
+
+using DH.RBAC.Model.Base;
+using JinianNet.JNTemplate;
+using DH.RBAC.Utility.Other;
+using DH.RBAC.Utility.Extension;
+
+
+
+namespace DH.RBAC.Logic.Base
+{
+ public class BaseLogic
+ {
+ private static string ConnectionString;
+ private static SqlSugar.DbType DbType;
+ private static string DbName;
+ private static bool DebugMode;
+
+ public static bool InitDB(string dbType, string host, string dbName, string userName, string pasword, ref string message, bool debug = false)
+ {
+ DebugMode = debug;
+ DbName = dbName;
+ if (dbType.ToLower() == "SqlServer".ToLower())
+ {
+ DbType = SqlSugar.DbType.SqlServer;
+ ConnectionString = $"Data Source={host};Initial Catalog={dbName};User ID={userName};Password={pasword};";
+ return true;
+ }
+ else if (dbType.ToLower() == "MySql".ToLower())
+ {
+ DbType = SqlSugar.DbType.MySql;
+ ConnectionString = $"server={host};Database={dbName};Uid={userName};Pwd={pasword};";
+ return true;
+ }
+ else if (dbType.ToLower() == "Oracle".ToLower())
+ {
+ DbType = SqlSugar.DbType.Oracle;
+ ConnectionString = $"Data Source={host}/{dbName};User ID={userName};Password={pasword};";
+ return true;
+ }
+ else if (dbType.ToLower() == "PostgreSql".ToLower())
+ {
+ DbType = SqlSugar.DbType.PostgreSQL;
+ ConnectionString = $"Server={host};Port=5432;Database={dbName};User Id={userName};Password={pasword};";
+ return true;
+ }
+ else if (dbType.ToLower() == "Sqlite".ToLower())
+ {
+ DbType = SqlSugar.DbType.Sqlite;
+
+ var template = Engine.CreateTemplate(dbName);
+ template.Set("BaseDirectory", MyEnvironment.RootPath(""));
+ var result = template.Render();
+
+ ConnectionString = $"DataSource={result};";
+ return true;
+ }
+ else
+ {
+ message = "不支持的数据库";
+ return false;
+ }
+ }
+
+ public static SqlSugarClient GetInstance()
+ {
+#if !NETFRAMEWORK && !WINDOWS
+ SqlSugarScope client = (SqlSugar.SqlSugarScope)Utility.MiddleWare.AutofacContainerModule.GetService();
+ if (client != null)
+ return client.ScopedContext;
+#endif
+
+ SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
+ {
+ ConnectionString = ConnectionString,
+ DbType = DbType,
+ IsAutoCloseConnection = true,
+ ConfigureExternalServices = new ConfigureExternalServices()
+ {
+ SqlFuncServices = ExtMethods.GetExpMethods
+
+ }
+ });
+ //用来打印Sql方便你调式
+ db.Aop.OnLogExecuting = (sql, pars) =>
+ {
+ if (DebugMode)
+ {
+ Console.WriteLine(sql + "\r\n" +
+ db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
+ Console.WriteLine();
+ }
+ };
+ return db;
+ }
+
+ public DataTable GetTableColumnInfo(string tableName)
+ {
+ if (DbType == SqlSugar.DbType.SqlServer)
+ {
+ using (var db = GetInstance())
+ {
+ StringBuilder strSql = new StringBuilder();
+ strSql.Append(" SELECT ").AppendLine();
+ strSql.Append(" A.Name AS TableName, ").AppendLine();
+ strSql.Append(" B.Name AS ColumnName, ").AppendLine();
+ strSql.Append(" D.Name AS TypeName, ").AppendLine();
+ strSql.Append(" B.Max_Length AS TypeLength, ").AppendLine();
+ strSql.Append(" CASE WHEN ").AppendLine();
+ strSql.Append(" ( ").AppendLine();
+ strSql.Append(" SELECT ").AppendLine();
+ strSql.Append(" F.Name ").AppendLine();
+ strSql.Append(" FROM ").AppendLine();
+ strSql.Append(" information_schema.key_column_usage E,sys.indexes F ").AppendLine();
+ strSql.Append(" WHERE ").AppendLine();
+ strSql.Append(" F.object_id=B.object_id ").AppendLine();
+ strSql.Append(" AND F.name=E.constraint_name ").AppendLine();
+ strSql.Append(" AND F.is_primary_key=1 ").AppendLine();
+ strSql.Append(" AND E.table_name=A.Name ").AppendLine();
+ strSql.Append(" AND E.column_name =B.Name ").AppendLine();
+ strSql.Append(" ) IS NULL THEN 0 ELSE 1 END AS IsPrimaryKey, ").AppendLine();
+ strSql.Append(" '' AS ClassName, ").AppendLine();
+ strSql.Append(" '' AS PropertyName, ").AppendLine();
+ strSql.Append(" '' AS CSType, ").AppendLine();
+ strSql.Append(" C.VALUE AS Other ").AppendLine();
+ strSql.Append(" FROM sys.tables A ").AppendLine();
+ strSql.Append(" LEFT JOIN sys.columns B ").AppendLine();
+ strSql.Append(" ON B.object_id = A.object_id ").AppendLine();
+ strSql.Append(" LEFT JOIN sys.extended_properties C ").AppendLine();
+ strSql.Append(" ON C.major_id = B.object_id AND C.minor_id = B.column_id ").AppendLine();
+ strSql.Append(" LEFT JOIN sys.types D ON D.system_type_id=B.system_type_id ").AppendLine();
+ strSql.Append(" WHERE A.Name = '" + tableName + "' ").AppendLine();
+ DataTable dt = db.Ado.GetDataTable(strSql.ToString());
+ return dt;
+ }
+ }
+ else if (DbType == SqlSugar.DbType.MySql)
+ {
+ using (var db = GetInstance())
+ {
+ StringBuilder strSql = new StringBuilder();
+ strSql.Append(" SELECT ").AppendLine();
+ strSql.Append(" '" + tableName + "' AS TableName, ").AppendLine();
+ strSql.Append(" COLUMN_NAME AS ColumnName, ").AppendLine();
+ strSql.Append(" DATA_TYPE AS TypeName, ").AppendLine();
+ strSql.Append(" CHARACTER_MAXIMUM_LENGTH AS TypeLength, ").AppendLine();
+ strSql.Append(" case when COLUMN_KEY = 'PRI' THEN 1 ELSE 0 END AS IsPrimaryKey, ").AppendLine();
+ strSql.Append(" '' AS ClassName, ").AppendLine();
+ strSql.Append(" '' PropertyName, ").AppendLine();
+ strSql.Append(" '' CSType , ").AppendLine();
+ strSql.Append(" COLUMN_COMMENT AS Other ").AppendLine();
+ strSql.Append(" FROM ").AppendLine();
+ strSql.Append(" INFORMATION_SCHEMA.COLUMNS ").AppendLine();
+ strSql.Append(" WHERE ").AppendLine();
+ strSql.Append(" table_schema ='" + DbName + "' AND table_name = '" + tableName + "' ").AppendLine();
+ strSql.Append(" ORDER BY ORDINAL_POSITION ").AppendLine();
+ DataTable dt = db.Ado.GetDataTable(strSql.ToString());
+ return dt;
+ }
+ }
+ else if (DbType == SqlSugar.DbType.Sqlite)
+ {
+ using (var db = GetInstance())
+ {
+
+ string sql = "SELECT * from sqlite_master where type = 'table' AND tbl_name='" + tableName + "'";
+ DataTable dt = db.Ado.GetDataTable(sql);
+ //创建个新的DataTable,把dt中的数据放进去
+ DataTable newDt = new DataTable();
+ newDt.Columns.Add("TableName");
+ newDt.Columns.Add("ColumnName");
+ newDt.Columns.Add("TypeName");
+ newDt.Columns.Add("TypeLength");
+ newDt.Columns.Add("IsPrimaryKey");
+ newDt.Columns.Add("ClassName");
+ newDt.Columns.Add("PropertyName");
+ newDt.Columns.Add("CSType");
+ newDt.Columns.Add("Other");
+ if (dt == null || dt.Rows.Count == 0)
+ return newDt;
+ string sql1 = dt.Rows[0]["sql"].ToString().Replace("\"", "");
+
+ List list = new List();
+ //第一个(
+ int index1 = sql1.IndexOf("(");
+ int index2 = sql1.LastIndexOf(")");
+ string content = sql1.Substring(index1 + 1, index2 - index1 - 1);
+ List array = content.Split('\n').Select(it => it.Trim()).ToList();
+ List primaryKey = new List();
+ foreach (string item in array)
+ {
+ if (item.Trim() == "")
+ continue;
+ if (item.ToUpper().StartsWith("PRIMARY KEY"))
+ {
+ int index3 = item.IndexOf("(");
+ int index4 = item.IndexOf(")");
+ string[] keyArray = item.Substring(index3 + 1, index4 - index3 - 1).Split(',');
+ foreach (string key in keyArray)
+ primaryKey.Add(key.Trim());
+ continue;
+ }
+ string[] itemText = item.Trim().Split(' ');
+ CodeGenerator codeGenerator = new CodeGenerator();
+ codeGenerator.TableName = tableName;
+ codeGenerator.ColumnName = itemText[0];
+ string type = itemText[1];
+ int index5 = type.IndexOf("(");
+ int index6 = type.IndexOf(")");
+ codeGenerator.TypeName = index5 == -1 ? type : type.Substring(0, index5);
+ codeGenerator.TypeLength = index5 == -1 ? "0" : type.Substring(index5 + 1, index6 - index5 - 1);
+ codeGenerator.IsPrimaryKey = "0";
+ codeGenerator.ClassName = "";
+ codeGenerator.PropertyName = "";
+ codeGenerator.CSType = "";
+ codeGenerator.Other = "";
+ list.Add(codeGenerator);
+ }
+ foreach (CodeGenerator code in list)
+ {
+ if (primaryKey.Contains(code.ColumnName))
+ code.IsPrimaryKey = "1";
+ }
+ return list.ToJson().ToDataTable();
+ }
+ }
+
+
+ return null;
+ }
+
+ public List GetTableList()
+ {
+ if (DbType == SqlSugar.DbType.SqlServer)
+ {
+ using (var db = GetInstance())
+ {
+ StringBuilder strSql = new StringBuilder();
+ strSql.Append(" SELECT ").AppendLine();
+ strSql.Append(" A.Name ").AppendLine();
+ strSql.Append(" FROM ").AppendLine();
+ strSql.Append(" sysobjects A ").AppendLine();
+ strSql.Append(" WHERE ").AppendLine();
+ strSql.Append(" A.xtype = 'U' ").AppendLine();
+ DataTable dt = db.Ado.GetDataTable(strSql.ToString());
+ if (dt == null)
+ return new List();
+ List list = new List();
+ foreach (DataRow row in dt.Rows)
+ {
+ list.Add(row["Name"].ToString());
+ }
+ return list;
+ }
+ }
+ else if (DbType == SqlSugar.DbType.MySql)
+ {
+ using (var db = GetInstance())
+ {
+ StringBuilder strSql = new StringBuilder();
+ strSql.Append(" SELECT ").AppendLine();
+ strSql.Append(" TABLE_NAME AS Name ").AppendLine();
+ strSql.Append(" FROM ").AppendLine();
+ strSql.Append(" information_schema.TABLES ").AppendLine();
+ strSql.Append(" WHERE ").AppendLine();
+ strSql.Append(" TABLE_SCHEMA = '" + DbName + "' ").AppendLine();
+ DataTable dt = db.Ado.GetDataTable(strSql.ToString());
+ if (dt == null)
+ return new List();
+ List list = new List();
+ foreach (DataRow row in dt.Rows)
+ {
+ list.Add(row["Name"].ToString());
+ }
+ return list;
+ }
+ }
+ else if (DbType == SqlSugar.DbType.Sqlite)
+ {
+ using (var db = GetInstance())
+ {
+ string sql = "SELECT name from sqlite_master where type='table'";
+ DataTable dt = db.Ado.GetDataTable(sql);
+ if (dt == null)
+ return new List();
+ List list = new List();
+ foreach (DataRow row in dt.Rows)
+ {
+ list.Add(row["name"].ToString());
+ }
+ return list;
+ }
+ }
+ return new List();
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Logger.cs b/DH.RBAC/Logic/Logger.cs
new file mode 100644
index 0000000..b0e1862
--- /dev/null
+++ b/DH.RBAC/Logic/Logger.cs
@@ -0,0 +1,80 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+namespace DH.RBAC.Logic
+{
+ ///
+ /// 日志
+ ///
+ public class Logger
+ {
+ private static object _lock = new object();
+ private static void Log(string type, string message)
+ {
+ lock (_lock)
+ {
+ SimpleClient client = new SimpleClient(BaseLogic.GetInstance());
+
+
+
+ SysLog log = new SysLog();
+ log.Id = UUID.SnowId;
+ log.Type = type;
+#if !NETFRAMEWORK
+ log.ThreadId = Thread.GetCurrentProcessorId();
+#else
+ log.ThreadId = Thread.CurrentThread.ManagedThreadId;
+#endif
+ log.Message = message;
+ log.EnableFlag = "Y";
+ log.DeleteFlag = "N";
+ log.CreateTime = DateTime.Now;
+ log.CreateUserId = "1";
+ log.ModifyUserId = "1";
+ log.ModifyTime = log.CreateTime;
+ client.Insert(log);
+ }
+ }
+
+
+
+ ///
+ /// 操作日志写入
+ ///
+ ///
+ public static void OperateInfo(string message)
+ {
+ Log("Operate", message);
+
+ }
+
+ ///
+ /// 运行日志写入
+ ///
+ ///
+ public static void RunningInfo(string message)
+ {
+ Log("Running", message);
+
+ }
+
+
+ ///
+ /// 错误日志写入
+ ///
+ ///
+ public static void ErrorInfo(string message)
+ {
+ Log("Error", message);
+
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysItemLogic.cs b/DH.RBAC/Logic/Sys/SysItemLogic.cs
new file mode 100644
index 0000000..2ce6730
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysItemLogic.cs
@@ -0,0 +1,167 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysItemLogic : BaseLogic
+ {
+
+ public List GetList()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N")
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToList();
+ }
+ }
+
+ public List GetAppList(int pageIndex, int pageSize, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.ParentId != "0" && it.DeleteFlag == "N")
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+ public List GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ ISugarQueryable queryable = db.Queryable().Where(it => it.DeleteFlag == "N");
+
+ if (!string.IsNullOrWhiteSpace(keyWord))
+ {
+ queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
+ }
+ return queryable
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+
+ public int GetChildCount(string parentId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable()
+ .Where(it => it.ParentId == parentId && it.DeleteFlag == "N")
+ .ToList().Count();
+ }
+ }
+
+
+ public SysItem Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N")
+ .Where(it => it.Id == primaryKey)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .First();
+ }
+ }
+
+
+ public int AppInsert(SysItem model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ SysItem s = db.Queryable().Where(it => it.ParentId == "0").First();
+ model.Id = UUID.StrSnowId;
+ model.Layer = s.Layer + 1;
+ model.ParentId = s.Id;
+ model.DeleteFlag = "N";
+ model.CreateUserId = operateUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUser.Id;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int Insert(SysItem model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.Layer = Get(model.ParentId).Layer += 1;
+ model.DeleteFlag = "N";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int Delete(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ SysItem item = db.Queryable().Where(it => it.Id == primaryKey).First();
+ if (item == null)
+ return 0;
+ item.DeleteFlag = "Y";
+ return db.Updateable(item).ExecuteCommand();
+ }
+ }
+ public int Update(SysItem model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Layer = Get(model.ParentId).Layer += 1;
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.ParentId,
+ it.Layer,
+ it.EnCode,
+ it.Name,
+ it.SortCode,
+ it.EnableFlag,
+ it.Remark,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+
+ public int AppUpdate(SysItem model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = operateUser;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.EnCode,
+ it.Name,
+ it.SortCode,
+ it.Remark,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs b/DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs
new file mode 100644
index 0000000..d9be401
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs
@@ -0,0 +1,182 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysItemsDetailLogic : BaseLogic
+ {
+ public List GetItemDetailList(string strItemCode)
+ {
+ using (var db = GetInstance())
+ {
+
+ SysItem item = db.Queryable().Where(it => it.EnCode == strItemCode && it.DeleteFlag == "N").First();
+ if (null == item)
+ return null;
+ return db.Queryable().Where(it => it.ItemId == item.Id && it.DeleteFlag == "N")
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToList();
+ }
+ }
+
+ public List GetList(int pageIndex, int pageSize, string itemId, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ ISugarQueryable queryable = db.Queryable().Where(it => it.DeleteFlag == "N" && it.ItemId == itemId);
+ if (!keyWord.IsNullOrEmpty())
+ {
+ queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
+ }
+ return queryable
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+ public List GetListByItemId(string itemId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable()
+ .Where(it => it.ItemId == itemId && it.DeleteFlag == "N")
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .ToList();
+ }
+ }
+
+ public void InsertItemDetail(string itemId, List list)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ List list2 = db.Queryable().Where(it => it.ItemId == itemId && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+ db.Insertable(list).ExecuteCommand();
+ db.CommitTran();
+ }
+ catch
+ {
+ db.RollbackTran();
+ }
+ }
+ }
+
+ public SysItemDetail Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable()
+ .Where(it => it.DeleteFlag == "N" && it.Id == primaryKey)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .First();
+ }
+ }
+
+ public int Insert(SysItemDetail model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.IsDefault = model.IsDefault == null ? "0" : "1";
+ model.DeleteFlag = "N";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int AppInsert(SysItemDetail model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.IsDefault = "0";
+ model.DeleteFlag = "N";
+ model.CreateUserId = operateUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+
+ public int AppUpdate(SysItemDetail model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = operateUser;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.EnCode,
+ it.Name,
+ it.SortCode,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int Delete(string itemId)
+ {
+ using (var db = GetInstance())
+ {
+ SysItemDetail itemDetail = db.Queryable().Where(it => it.Id == itemId).First();
+ if (itemDetail == null)
+ return 0;
+ itemDetail.DeleteFlag = "Y";
+ return db.Updateable(itemDetail).ExecuteCommand();
+ }
+ }
+
+ public int Update(SysItemDetail model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.IsDefault = model.IsDefault == null ? "0" : "1";
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.ItemId,
+ it.EnCode,
+ it.Name,
+ it.IsDefault,
+ it.SortCode,
+ it.EnableFlag,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public SysItemDetail GetSoftwareName()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.EnCode == "SoftwareName").First();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysLogLogic.cs b/DH.RBAC/Logic/Sys/SysLogLogic.cs
new file mode 100644
index 0000000..5790d96
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysLogLogic.cs
@@ -0,0 +1,123 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ ///
+ /// 系统日志表数据访问
+ ///
+ public class SysLogLogic : BaseLogic
+ {
+
+ ///
+ /// 根据日志类型获得日志
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public List GetList(int pageIndex, int pageSize, string type, string index, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ ISugarQueryable query = db.Queryable().Where(it => it.Type == type);
+ if (!keyWord.IsNullOrEmpty())
+ {
+ query = query.Where(it => it.Message.Contains(keyWord));
+ }
+ //查询当日
+ if (index == "1")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today;
+ DateTime endTime = today.AddDays(1);
+ query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
+ }
+ //近7天
+ else if (index == "2")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today.AddDays(-6);
+ DateTime endTime = today.AddDays(1);
+ query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
+ }
+ //近1月
+ else if (index == "3")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today.AddDays(-29);
+ DateTime endTime = today.AddDays(1);
+ query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
+ }
+ //近3月
+ else if (index == "4")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today.AddDays(-91);
+ DateTime endTime = today.AddDays(1);
+ query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
+ }
+ return query.OrderBy(it => it.Id, OrderByType.Desc).ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+
+
+ ///
+ /// 删除日志
+ ///
+ ///
+ ///
+ ///
+ public int Delete(string type, string index)
+ {
+ using (var db = GetInstance())
+ {
+ IDeleteable query = db.Deleteable().Where(it => it.Type == type);
+ //保留一个月
+ if (index == "1")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today;
+ DateTime endTime = today.AddDays(-29);
+ query = query.Where(it => it.CreateTime < endTime);
+ return query.ExecuteCommand();
+ }
+ //保留7天
+ else if (index == "2")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today.AddDays(-6);
+ query = query.Where(it => it.CreateTime < startTime);
+ return query.ExecuteCommand();
+ }
+ //保留近3个月
+ else if (index == "3")
+ {
+ DateTime today = DateTime.Today;
+ DateTime startTime = today.AddDays(-92);
+ query = query.Where(it => it.CreateTime < startTime);
+ return query.ExecuteCommand();
+ }
+ //全部
+ else if (index == "4")
+ {
+ return query.ExecuteCommand();
+ }
+ else
+ {
+ return 0;
+ }
+
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysOrganizeLogic.cs b/DH.RBAC/Logic/Sys/SysOrganizeLogic.cs
new file mode 100644
index 0000000..fa9a018
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysOrganizeLogic.cs
@@ -0,0 +1,157 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysOrganizeLogic : BaseLogic
+ {
+ public List GetList()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N").ToList();
+ }
+ }
+
+ public List GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ ISugarQueryable queryable = db.Queryable().Where(it => it.ParentId != "0" && it.DeleteFlag == "N");
+
+ if (!keyWord.IsNullOrEmpty())
+ {
+ queryable = queryable.Where(it => (it.FullName.Contains(keyWord) || it.EnCode.Contains(keyWord)));
+ }
+ return queryable
+ .OrderBy(it => it.SortCode)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+
+
+ public int GetChildCount(string parentId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").Count();
+ }
+ }
+
+
+ public int AppUpdate(SysOrganize model, string opreaterUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = opreaterUser;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.EnCode,
+ it.FullName,
+ it.Type,
+ it.ManagerId,
+ it.TelePhone,
+ it.WeChat,
+ it.Fax,
+ it.Email,
+ it.Address,
+ it.SortCode,
+ it.Remark,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int AppInsert(SysOrganize model, string opreaterUser)
+ {
+ using (var db = GetInstance())
+ {
+ SysOrganize s = db.Queryable().Where(it => it.ParentId == "0").First();
+ model.Id = UUID.StrSnowId;
+ model.Layer = s.Layer + 1;
+ model.ParentId = s.Id;
+
+ model.EnableFlag = "Y";
+ model.DeleteFlag = "N";
+ model.CreateUserId = opreaterUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+ public int Insert(SysOrganize model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.Layer = Get(model.ParentId).Layer += 1;
+ model.EnableFlag = "Y";
+ model.DeleteFlag = "N";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int Delete(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ SysOrganize organize = db.Queryable().Where(it => it.Id == primaryKey).First();
+ if (organize == null)
+ return 0;
+ organize.DeleteFlag = "Y";
+ return db.Updateable(organize).ExecuteCommand();
+ }
+ }
+ public SysOrganize Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.Id == primaryKey).Includes(it => it.CreateUser).Includes(it => it.ModifyUser).First();
+ }
+ }
+ public int Update(SysOrganize model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.ParentId,
+ it.Layer,
+ it.EnCode,
+ it.FullName,
+ it.Type,
+ it.ManagerId,
+ it.TelePhone,
+ it.WeChat,
+ it.Fax,
+ it.Email,
+ it.Address,
+ it.SortCode,
+ it.EnableFlag,
+ it.Remark,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysPermissionLogic.cs b/DH.RBAC/Logic/Sys/SysPermissionLogic.cs
new file mode 100644
index 0000000..6c9fb78
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysPermissionLogic.cs
@@ -0,0 +1,238 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysPermissionLogic : BaseLogic
+ {
+ public bool ActionValidate(string userId, string action)
+ {
+ List authorizeModules;
+ if (new SysUserLogic().ContainsUser("admin", userId))
+ {
+ authorizeModules = GetList();
+ }
+ else
+ {
+ authorizeModules = GetList(userId);
+ }
+ foreach (var item in authorizeModules)
+ {
+ if (!string.IsNullOrEmpty(item.Url))
+ {
+ string[] url = item.Url.Split('?');
+ if (url[0].ToLower() == action.ToLower())
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ public List GetList(string userId)
+ {
+ using (var db = GetInstance())
+ {
+ List permissionIdList = db.Queryable((A, B, C) => new object[] {
+ JoinType.Left,A.RoleId == B.RoleId,
+ JoinType.Left,C.Id == B.ModuleId,
+ })
+ .Where((A, B, C) => A.UserId == userId && C.EnableFlag == "Y" && B.DeleteFlag == "N")
+ .Select((A, B, C) => C.Id).ToList();
+ return db.Queryable().Where(it => permissionIdList.Contains(it.Id)).OrderBy(it => it.SortCode).ToList();
+ }
+ }
+
+
+ public List GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ if (keyWord.IsNullOrEmpty())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N").OrderBy(it => it.SortCode).ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ return db.Queryable().Where(it => it.DeleteFlag == "N" && (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord))).OrderBy(it => it.SortCode).ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+ public int Delete(params string[] primaryKeys)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ //删除权限与角色的对应关系。
+ List list = db.Queryable().Where(it => primaryKeys.Contains(it.Id) && it.DeleteFlag == "N").ToList();
+ List ids = list.Select(it => it.Id).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list).ExecuteCommand();
+ List list2 = db.Queryable().Where(it => ids.Contains(it.ModuleId) && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+ db.CommitTran();
+ return 1;
+ }
+ catch (Exception ex)
+ {
+ db.RollbackTran();
+ return 0;
+ }
+ }
+
+ }
+ public int GetMaxChildMenuOrderCode(string parentId)
+ {
+ using (var db = GetInstance())
+ {
+ //得到当前节点
+ SysPermission permission = db.Queryable().Where(it => it.Id == parentId && it.DeleteFlag == "N").First();
+ if (permission == null)
+ return 0;
+ //得到子的
+ SysPermission child = db.Queryable().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").OrderBy(it => it.SortCode, OrderByType.Desc).First();
+ if (child == null)
+ return permission.SortCode.Value + 100;
+ else
+ return child.SortCode.Value + 100;
+ }
+ }
+ public int GetChildCount(string parentId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").ToList().Count();
+ }
+ }
+
+ public List GetList()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N").OrderBy(it => it.SortCode).ToList();
+ }
+ }
+
+ public SysPermission Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.Id == primaryKey).Includes(it => it.CreateUser).Includes(it => it.ModifyUser).First();
+ }
+ }
+
+
+ public int Insert(SysPermission model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
+ model.IsEdit = model.IsEdit == null ? "0" : "1";
+ model.IsPublic = model.IsPublic == null ? "0" : "1";
+
+ model.DeleteFlag = "N";
+ model.EnableFlag = "Y";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+ public int AppInsert(SysPermission model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
+ model.IsEdit = "1";
+ model.IsPublic = "0";
+
+ model.DeleteFlag = "N";
+ model.EnableFlag = "Y";
+ model.CreateUserId = operateUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int AppUpdate(SysPermission model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
+ model.ModifyUserId = operateUser;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.ParentId,
+ it.Layer,
+ it.EnCode,
+ it.Name,
+ it.JsEvent,
+ it.Icon,
+ it.SymbolIndex,
+ it.Url,
+ it.Remark,
+ it.Type,
+ it.SortCode,
+ it.ModifyUserId,
+ it.ModifyTime,
+ }).ExecuteCommand();
+ }
+ }
+
+
+ public int Update(SysPermission model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
+ model.IsEdit = model.IsEdit == null ? "0" : "1";
+ model.IsPublic = model.IsPublic == null ? "0" : "1";
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.ParentId,
+ it.Layer,
+ it.EnCode,
+ it.Name,
+ it.JsEvent,
+ it.Icon,
+ it.SymbolIndex,
+ it.Url,
+ it.Remark,
+ it.Type,
+ it.SortCode,
+ it.IsPublic,
+ it.EnableFlag,
+ it.IsEdit,
+ it.ModifyUserId,
+ it.ModifyTime,
+ }).ExecuteCommand();
+ }
+ }
+ public int InsertList(List permissionList)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Insertable(permissionList).ExecuteCommand();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs b/DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs
new file mode 100644
index 0000000..a1c689d
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs
@@ -0,0 +1,170 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysRoleAuthorizeLogic : BaseLogic
+ {
+ ///
+ /// 获得角色权限关系
+ ///
+ ///
+ public List GetList()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().ToList();
+ }
+ }
+
+ ///
+ /// 根据角色ID获得角色权限关系
+ ///
+ ///
+ ///
+ public List GetList(string roleId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
+ }
+ }
+
+
+ ///
+ /// 给某个角色授权
+ ///
+ ///
+ ///
+ public void AppAuthorize(string operate, string roleId, params string[] perIds)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ //获得所有权限
+ List permissionList = db.Queryable().Where(it => it.DeleteFlag == "N").ToList();
+ List perList = new List();
+ foreach (string perId in perIds)
+ {
+ string id = perId;
+ while (!id.IsNullOrEmpty() && id != "0")
+ {
+ if (!perList.Contains(id))
+ {
+ perList.Add(id);
+ }
+ id = permissionList.Where(it => it.Id == id).Select(it => it.ParentId).FirstOrDefault();
+ }
+ }
+ //删除旧的
+ List list2 = db.Queryable().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+
+
+ List newRoleAuthorizeList = perList.Select(it => new SysRoleAuthorize
+ {
+ Id = UUID.StrSnowId,
+ RoleId = roleId,
+ ModuleId = it,
+ DeleteFlag = "N",
+ EnableFlag = "Y",
+ CreateUserId = operate,
+ CreateTime = DateTime.Now,
+ ModifyUserId = operate,
+ ModifyTime = DateTime.Now
+
+ }).ToList();
+ db.Insertable(newRoleAuthorizeList).ExecuteCommand();
+ db.CommitTran();
+ }
+ catch
+ {
+ db.RollbackTran();
+ }
+ }
+ }
+
+
+ ///
+ /// 给某个角色授权
+ ///
+ ///
+ ///
+ public void Authorize(string roleId, string account, params string[] perIds)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ //获得所有权限
+ List permissionList = db.Queryable().ToList();
+ List perList = new List();
+ foreach (string perId in perIds)
+ {
+ string id = perId;
+ while (!id.IsNullOrEmpty() && id != "0")
+ {
+ if (!perList.Contains(id))
+ {
+ perList.Add(id);
+ }
+ id = permissionList.Where(it => it.Id == id).Select(it => it.ParentId).FirstOrDefault();
+ }
+ }
+ //删除旧的
+ List list2 = db.Queryable().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+
+
+ List newRoleAuthorizeList = perList.Select(it => new SysRoleAuthorize
+ {
+ Id = UUID.StrSnowId,
+ RoleId = roleId,
+ ModuleId = it,
+ DeleteFlag = "N",
+ EnableFlag = "Y",
+ CreateUserId = account,
+ CreateTime = DateTime.Now,
+ ModifyUserId = account,
+ ModifyTime = DateTime.Now
+ }).ToList();
+ db.Insertable(newRoleAuthorizeList).ExecuteCommand();
+ db.CommitTran();
+ }
+ catch
+ {
+ db.RollbackTran();
+ }
+ }
+ }
+
+ ///
+ /// 从角色权限关系中删除某个模块
+ ///
+ ///
+ ///
+ public int Delete(params string[] moduleIds)
+ {
+ using (var db = GetInstance())
+ {
+ List list = db.Queryable().Where(it => moduleIds.Contains(it.ModuleId)).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ return db.Updateable(list).ExecuteCommand();
+ }
+ }
+
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysRoleLogic.cs b/DH.RBAC/Logic/Sys/SysRoleLogic.cs
new file mode 100644
index 0000000..fd1122d
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysRoleLogic.cs
@@ -0,0 +1,176 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysRoleLogic : BaseLogic
+ {
+ ///
+ /// 得到角色列表
+ ///
+ ///
+ public List GetList()
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.DeleteFlag == "N")
+ .Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .ToList();
+ }
+ }
+
+ ///
+ /// 获得角色列表分页
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public List GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+
+ ISugarQueryable queryable = db.Queryable().Where(it => it.DeleteFlag == "N");
+
+ if (!keyWord.IsNullOrEmpty())
+ {
+ queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
+ }
+
+ return queryable.Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .OrderBy(it => it.SortCode)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+ ///
+ /// 新增角色
+ ///
+ ///
+ ///
+ public int Insert(SysRole model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.AllowEdit = model.AllowEdit == null ? "0" : "1";
+ model.DeleteFlag = "N";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int AppInsert(SysRole model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.AllowEdit = "1";
+ model.DeleteFlag = "N";
+ model.CreateUserId = operateUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ public int AppUpdate(SysRole model, string operateUser)
+ {
+ using (var db = GetInstance())
+ {
+ model.AllowEdit = model.AllowEdit == null ? "0" : "1";
+ model.ModifyUserId = operateUser;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.OrganizeId,
+ it.EnCode,
+ it.Type,
+ it.Name,
+ it.Remark,
+ it.SortCode,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+
+ ///
+ /// 更新角色信息
+ ///
+ ///
+ ///
+ public int Update(SysRole model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.AllowEdit = model.AllowEdit == null ? "0" : "1";
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.OrganizeId,
+ it.EnCode,
+ it.Type,
+ it.Name,
+ it.AllowEdit,
+ it.EnableFlag,
+ it.Remark,
+ it.SortCode,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 根据主键得到角色信息
+ ///
+ ///
+ ///
+ public SysRole Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.Id == primaryKey)
+ .Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .First();
+ }
+ }
+ ///
+ /// 删除角色信息
+ ///
+ ///
+ ///
+ public int Delete(List primaryKeys)
+ {
+ using (var db = GetInstance())
+ {
+ List list = db.Queryable().Where(it => primaryKeys.Contains(it.Id)).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ return db.Updateable(list).ExecuteCommand();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs b/DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs
new file mode 100644
index 0000000..6f74af1
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs
@@ -0,0 +1,175 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DH.RBAC.Utility.Other;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysUserLogOnLogic : BaseLogic
+ {
+
+ ///
+ /// 根据用户Id得到登录账号信息
+ ///
+ ///
+ ///
+ public SysUserLogOn GetByAccount(string userId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.UserId == userId).First();
+ }
+ }
+
+ ///
+ /// 更新用户登录账号信息
+ ///
+ ///
+ ///
+ public int UpdateLogin(SysUserLogOn model)
+ {
+ using (var db = GetInstance())
+ {
+ model.IsOnLine = "1";
+ model.LastVisitTime = DateTime.Now;
+ model.PrevVisitTime = model.LastVisitTime;
+ model.LoginCount += 1;
+ model.ModifyTime = DateTime.Now;
+ model.ModifyUserId = model.UserId;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.IsOnLine,
+ it.PrevVisitTime,
+ it.LastVisitTime,
+ it.LoginCount,
+ it.ModifyTime,
+ it.ModifyUserId
+ }).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 修改密码
+ ///
+ ///
+ ///
+ public int ModifyPwd(SysUserLogOn userLoginEntity)
+ {
+ using (var db = GetInstance())
+ {
+ userLoginEntity.ChangePwdTime = DateTime.Now;
+ userLoginEntity.ModifyUserId = userLoginEntity.UserId;
+ userLoginEntity.ModifyTime = DateTime.Now;
+
+ return db.Updateable(userLoginEntity).UpdateColumns(it => new
+ {
+ it.Password,
+ it.ChangePwdTime,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 删除用户登录信息
+ ///
+ ///
+ ///
+ public int Delete(List userIds)
+ {
+ using (var db = GetInstance())
+ {
+ List list = db.Queryable().Where(it => userIds.Contains(it.UserId)).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ return db.Updateable(list).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 新增用户登录账号
+ ///
+ ///
+ ///
+ public int Insert(SysUserLogOn model)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.SecretKey = model.Id.DESEncrypt().Substring(0, 8);
+ model.Password = model.Password.MD5Encrypt().DESEncrypt(model.SecretKey).MD5Encrypt();
+ model.LoginCount = 0;
+ model.IsOnLine = "0";
+ model.EnableFlag = "Y";
+ model.DeleteFlag = "N";
+ model.CreateTime = DateTime.Now;
+ model.ModifyTime = DateTime.Now;
+ model.ModifyUserId = model.UserId;
+ model.CreateUserId = model.UserId;
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 更新用户登录账号信息
+ ///
+ ///
+ ///
+ public int UpdateInfo(SysUserLogOn model)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyTime = DateTime.Now;
+ model.ModifyUserId = model.UserId;
+
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.AllowMultiUserOnline,
+ it.Question,
+ it.AnswerQuestion,
+ it.CheckIPAddress,
+ it.Language,
+ it.Theme,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int UpdateTheme(SysUserLogOn model)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyTime = DateTime.Now;
+ model.ModifyUserId = model.UserId;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.Theme,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int UpdatePassword(SysUserLogOn model)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyTime = DateTime.Now;
+ model.ModifyUserId = model.UserId;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.Password,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysUserLogic.cs b/DH.RBAC/Logic/Sys/SysUserLogic.cs
new file mode 100644
index 0000000..c96cddd
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysUserLogic.cs
@@ -0,0 +1,509 @@
+
+using DH.RBAC.Logic.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Security.Principal;
+using DH.RBAC.Model.Sys;
+
+using DH.RBAC.Utility.Other;
+using SqlSugar;
+using System.ComponentModel;
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysUserLogic : BaseLogic
+ {
+ ///
+ /// 根据账号得到用户信息
+ ///
+ ///
+ ///
+ public SysUser GetByUserName(string account)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.Account == account && it.DeleteFlag == "N")
+ .Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser)
+ .First();
+ }
+ }
+
+ ///
+ /// 修改用户基础信息
+ ///
+ ///
+ ///
+ public int UpdateBasicInfo(SysUser model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.RealName,
+ it.NickName,
+ it.Gender,
+ it.Birthday,
+ it.MobilePhone,
+ it.Avatar,
+ it.Email,
+ it.Signature,
+ it.Address,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int AppUpdateBasicInfo(SysUser model)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = model.Id;
+ model.ModifyTime = DateTime.Now;
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.RealName,
+ it.NickName,
+ it.Gender,
+ it.Birthday,
+ it.MobilePhone,
+ it.Avatar,
+ it.Email,
+ it.Signature,
+ it.Address,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+ public int Insert(SysUser model, string password, string account, string[] roleIds)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ ////新增用户基本信息。
+ model.Id = UUID.StrSnowId;
+ model.EnableFlag = "Y";
+ model.DeleteFlag = "N";
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ model.Avatar = "/Content/framework/images/avatar.png";
+ int row = db.Insertable(model).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+
+ //新增新的角色
+ List list = new List();
+ foreach (string roleId in roleIds)
+ {
+ SysUserRoleRelation roleRelation = new SysUserRoleRelation
+ {
+ Id = UUID.StrSnowId,
+ UserId = model.Id,
+ RoleId = roleId,
+ EnableFlag = "Y",
+ DeleteFlag = "N",
+ CreateUserId = account,
+ CreateTime = DateTime.Now,
+ ModifyUserId = account,
+ ModifyTime = DateTime.Now
+ };
+ list.Add(roleRelation);
+ }
+ row = db.Insertable(list).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ //新增用户登陆信息。
+ SysUserLogOn userLogOnEntity = new SysUserLogOn();
+ userLogOnEntity.Id = UUID.StrSnowId;
+ userLogOnEntity.UserId = model.Id;
+ userLogOnEntity.SecretKey = userLogOnEntity.Id.DESEncrypt().Substring(0, 8);
+ userLogOnEntity.Password = password.MD5Encrypt().DESEncrypt(userLogOnEntity.SecretKey).MD5Encrypt();
+ userLogOnEntity.LoginCount = 0;
+ userLogOnEntity.IsOnLine = "0";
+ userLogOnEntity.EnableFlag = "Y";
+ userLogOnEntity.DeleteFlag = "N";
+ userLogOnEntity.CreateUserId = account;
+ userLogOnEntity.CreateTime = DateTime.Now;
+ userLogOnEntity.ModifyUserId = account;
+ userLogOnEntity.ModifyTime = DateTime.Now;
+ row = db.Insertable(userLogOnEntity).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ db.CommitTran();
+ return row;
+ }
+ catch
+ {
+ db.RollbackTran();
+ return 0;
+ }
+ }
+ }
+
+ public bool ContainsUser(string userAccount, params string[] userIdList)
+ {
+ using (var db = GetInstance())
+ {
+ List accountList = db.Queryable().Where(it => userIdList.Contains(it.Id)).Select(it => it.Account).ToList();
+ if (accountList.IsNullOrEmpty())
+ return false;
+ if (accountList.Contains(userAccount))
+ return true;
+ return false;
+ }
+ }
+ public int AppInsert(SysUser model, string password, string[] roleIds, string opearateUser)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ ////新增用户基本信息。
+ model.Id = UUID.StrSnowId;
+ model.EnableFlag = "Y";
+ model.DeleteFlag = "N";
+ model.CreateUserId = opearateUser;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ model.Avatar = "/Content/framework/images/avatar.png";
+ int row = db.Insertable(model).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+
+ //新增新的角色
+ List list = new List();
+ foreach (string roleId in roleIds)
+ {
+ SysUserRoleRelation roleRelation = new SysUserRoleRelation
+ {
+ Id = UUID.StrSnowId,
+ UserId = model.Id,
+ RoleId = roleId,
+ EnableFlag = "Y",
+ DeleteFlag = "N",
+ CreateUserId = opearateUser,
+ CreateTime = DateTime.Now,
+ ModifyUserId = opearateUser,
+ ModifyTime = DateTime.Now
+ };
+ list.Add(roleRelation);
+ }
+ row = db.Insertable(list).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ //新增用户登陆信息。
+ SysUserLogOn userLogOnEntity = new SysUserLogOn();
+ userLogOnEntity.Id = UUID.StrSnowId;
+ userLogOnEntity.UserId = model.Id;
+ userLogOnEntity.SecretKey = userLogOnEntity.Id.DESEncrypt().Substring(0, 8);
+ userLogOnEntity.Password = password.DESEncrypt(userLogOnEntity.SecretKey).MD5Encrypt();
+ userLogOnEntity.LoginCount = 0;
+ userLogOnEntity.IsOnLine = "0";
+ userLogOnEntity.EnableFlag = "Y";
+ userLogOnEntity.DeleteFlag = "N";
+ userLogOnEntity.CreateUserId = opearateUser;
+ userLogOnEntity.CreateTime = DateTime.Now;
+ userLogOnEntity.ModifyUserId = userLogOnEntity.CreateUserId;
+ userLogOnEntity.ModifyTime = userLogOnEntity.CreateTime;
+ row = db.Insertable(userLogOnEntity).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ db.CommitTran();
+ return row;
+ }
+ catch
+ {
+ db.RollbackTran();
+ return 0;
+ }
+ }
+ }
+
+
+ ///
+ /// 根据主键得到用户信息
+ ///
+ ///
+ ///
+ public SysUser Get(string primaryKey)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.Id == primaryKey)
+ .Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser).First();
+ }
+ }
+
+ ///
+ /// 获得用户列表分页
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public List GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
+ {
+ using (var db = GetInstance())
+ {
+ ISugarQueryable queryable = db.Queryable().Where(it => it.DeleteFlag == "N");
+ if (!keyWord.IsNullOrEmpty())
+ {
+ queryable = queryable.Where(it => it.Account.Contains(keyWord) || it.RealName.Contains(keyWord));
+ }
+ return queryable.OrderBy(it => it.SortCode)
+ .Includes(it => it.Organize)
+ .Includes(it => it.CreateUser)
+ .Includes(it => it.ModifyUser).ToPageList(pageIndex, pageSize, ref totalCount);
+ }
+ }
+
+
+
+ ///
+ /// 删除用户信息
+ ///
+ ///
+ ///
+ public int Delete(List primaryKeys)
+ {
+ using (var db = GetInstance())
+ {
+ List list = db.Queryable().Where(it => primaryKeys.Contains(it.Id)).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ return db.Updateable(list).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 新增用户基础信息
+ ///
+ ///
+ ///
+ public int Insert(SysUser model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.Id = UUID.StrSnowId;
+ model.DeleteFlag = "N";
+ model.EnableFlag = "Y";
+
+
+ model.CreateUserId = account;
+ model.CreateTime = DateTime.Now;
+ model.ModifyUserId = model.CreateUserId;
+ model.ModifyTime = model.CreateTime;
+ model.Avatar = "/Content/framework/images/avatar.png";
+ return db.Insertable(model).ExecuteCommand();
+ }
+ }
+ ///
+ /// 更新用户基础信息
+ ///
+ ///
+ ///
+ public int Update(SysUser model, string account)
+ {
+ using (var db = GetInstance())
+ {
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+
+ return db.Updateable(model).UpdateColumns(it => new
+ {
+ it.NickName,
+ it.RealName,
+ it.Birthday,
+ it.Gender,
+ it.Email,
+ it.DepartmentId,
+ it.RoleId,
+ it.MobilePhone,
+ it.Address,
+ it.Signature,
+ it.SortCode,
+ it.IsEnabled,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ }
+ }
+
+
+
+ public int AppUpdateAndSetRole(SysUser model, string[] roleIds, string opereateUser)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ model.ModifyUserId = opereateUser;
+ model.ModifyTime = DateTime.Now;
+ int row = db.Updateable(model).UpdateColumns(it => new
+ {
+ it.NickName,
+ it.RealName,
+ it.Birthday,
+ it.Gender,
+ it.Email,
+ it.DepartmentId,
+ it.RoleId,
+ it.MobilePhone,
+ it.Address,
+ it.Signature,
+ it.SortCode,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ //删除原来的角色
+ List list2 = db.Queryable().Where(it => it.UserId == model.Id && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+ //新增新的角色
+ List list = new List();
+ foreach (string roleId in roleIds)
+ {
+ SysUserRoleRelation roleRelation = new SysUserRoleRelation
+ {
+ Id = UUID.StrSnowId,
+ UserId = model.Id,
+ RoleId = roleId,
+ DeleteFlag = "N",
+ EnableFlag = "Y",
+ CreateUserId = opereateUser,
+ CreateTime = DateTime.Now,
+ ModifyUserId = opereateUser,
+ ModifyTime = DateTime.Now
+ };
+ list.Add(roleRelation);
+ }
+ row = db.Insertable(list).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ db.CommitTran();
+ return row;
+ }
+ catch
+ {
+ db.RollbackTran();
+ return 0;
+ }
+ }
+ }
+
+
+ public int UpdateAndSetRole(SysUser model, string account, string[] roleIds)
+ {
+ using (var db = GetInstance())
+ {
+ try
+ {
+ db.BeginTran();
+ model.ModifyUserId = account;
+ model.ModifyTime = DateTime.Now;
+ int row = db.Updateable(model).UpdateColumns(it => new
+ {
+ it.NickName,
+ it.RealName,
+ it.Birthday,
+ it.Gender,
+ it.Email,
+ it.DepartmentId,
+ it.RoleId,
+ it.MobilePhone,
+ it.Address,
+ it.Signature,
+ it.SortCode,
+ it.EnableFlag,
+ it.ModifyUserId,
+ it.ModifyTime
+ }).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ //删除原来的角色
+ List list2 = db.Queryable().Where(it => it.UserId == model.Id && it.DeleteFlag == "N").ToList();
+ list2.ForEach(it => { it.DeleteFlag = "Y"; });
+ db.Updateable(list2).ExecuteCommand();
+ //新增新的角色
+ List list = new List();
+ foreach (string roleId in roleIds)
+ {
+ SysUserRoleRelation roleRelation = new SysUserRoleRelation
+ {
+ Id = UUID.StrSnowId,
+ UserId = model.Id,
+ RoleId = roleId,
+ EnableFlag = "Y",
+ DeleteFlag = "N",
+ CreateUserId = account,
+ CreateTime = DateTime.Now,
+ ModifyTime = DateTime.Now,
+ ModifyUserId = account
+ };
+ list.Add(roleRelation);
+ }
+ row = db.Insertable(list).ExecuteCommand();
+ if (row == 0)
+ {
+ db.RollbackTran();
+ return row;
+ }
+ db.CommitTran();
+ return row;
+ }
+ catch
+ {
+ db.RollbackTran();
+ return 0;
+ }
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs b/DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs
new file mode 100644
index 0000000..d796984
--- /dev/null
+++ b/DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs
@@ -0,0 +1,57 @@
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Logic.Base;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+
+namespace DH.RBAC.Logic.Sys
+{
+ public class SysUserRoleRelationLogic : BaseLogic
+ {
+ ///
+ /// 删除用户角色关系
+ ///
+ ///
+ ///
+ public int Delete(List userIds)
+ {
+ using (var db = GetInstance())
+ {
+ List list = db.Queryable().Where(it => userIds.Contains(it.UserId)).ToList();
+ list.ForEach(it => { it.DeleteFlag = "Y"; });
+ return db.Updateable(list).ExecuteCommand();
+ }
+ }
+
+ ///
+ /// 根据ID得到用户角色关系
+ ///
+ ///
+ ///
+ public List GetList(string userId)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => it.UserId == userId && it.DeleteFlag=="N").ToList();
+ }
+ }
+
+ ///
+ /// 从用户角色关系表中得到所有角色绑定信息
+ ///
+ ///
+ ///
+ public List GetByRoles(List ids)
+ {
+ using (var db = GetInstance())
+ {
+ return db.Queryable().Where(it => ids.Contains(it.RoleId) && it.DeleteFlag == "N").ToList();
+ }
+ }
+
+ }
+}
diff --git a/DH.RBAC/Models/Base/BaseModelEntity.cs b/DH.RBAC/Models/Base/BaseModelEntity.cs
new file mode 100644
index 0000000..057c417
--- /dev/null
+++ b/DH.RBAC/Models/Base/BaseModelEntity.cs
@@ -0,0 +1,91 @@
+using AntdUI;
+using DH.RBAC.Model.Sys;
+using SqlSugar;
+using System;
+using System.Text.Json.Serialization;
+
+namespace DH.RBAC.Model
+{
+ public class BaseModelEntity: NotifyProperty
+ {
+ ///
+ /// 是否启用
+ ///
+ [SugarColumn(ColumnName = "EnableFlag", ColumnDescription = "是否启用", IsNullable = true, Length = 1)]
+ public virtual string EnableFlag { get; set; }
+ ///
+ /// 是否删除
+ ///
+ [SugarColumn(ColumnName = "DeleteFlag", ColumnDescription = "是否删除", IsNullable = true, Length = 1)]
+ public virtual string DeleteFlag { get; set; }
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "CreateUserId", ColumnDescription = "创建人", IsNullable = true, Length = 255)]
+ public virtual string CreateUserId { get; set; }
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "CreateTime", ColumnDescription = "创建时间", IsNullable = true, Length = 3)]
+ public virtual DateTime? CreateTime { get; set; }
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "ModifyUserId", ColumnDescription = "更新人", IsNullable = true, Length = 255)]
+ public virtual string ModifyUserId { get; set; }
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "ModifyTime", ColumnDescription = "更新时间", IsNullable = true, Length = 3)]
+ public virtual DateTime? ModifyTime { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [JsonIgnore]
+ [Navigate(NavigateType.OneToOne, nameof(CreateUserId), nameof(SysUser.Id))]//一对一 SchoolId是StudentA类里面的
+ public SysUser CreateUser { get; set; } //不能赋值只能是null
+ ///
+ /// 更新人
+ ///
+ [JsonIgnore]
+ [Navigate(NavigateType.OneToOne, nameof(ModifyUserId), nameof(SysUser.Id))]//一对一 SchoolId是StudentA类里面的
+ public SysUser ModifyUser { get; set; } //不能赋值只能是null
+
+
+ [SugarColumn(IsIgnore = true)]
+ public string CreateUserName
+ {
+ get
+ {
+ return CreateUser == null ? "" : CreateUser.RealName;
+ }
+ }
+ [SugarColumn(IsIgnore = true)]
+ public string ModifyUserName
+ {
+ get
+ {
+ return ModifyUser == null ? "" : ModifyUser.RealName;
+ }
+ }
+
+ [SugarColumn(IsIgnore = true)]
+ public bool IsDeleted
+ {
+ get
+ {
+ return DeleteFlag == "Y" ? true : false;
+ }
+ }
+
+ [SugarColumn(IsIgnore = true)]
+ public bool IsEnabled
+ {
+ get
+ {
+ return EnableFlag == "Y" ? true : false;
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Models/Base/CodeGenerator.cs b/DH.RBAC/Models/Base/CodeGenerator.cs
new file mode 100644
index 0000000..bb08898
--- /dev/null
+++ b/DH.RBAC/Models/Base/CodeGenerator.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Base
+{
+ public class CodeGenerator
+ {
+ public string TableName { get; set; }
+ public string ColumnName { get; set; }
+ public string TypeName { get; set; }
+ public string TypeLength { get; set; }
+ public string IsPrimaryKey { get; set; }
+ public string ClassName { get; set; }
+ public string PropertyName { get; set; }
+ public string CSType { get; set; }
+
+ public string Other { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/Base/MenuControlAttribute.cs b/DH.RBAC/Models/Base/MenuControlAttribute.cs
new file mode 100644
index 0000000..ae2c16b
--- /dev/null
+++ b/DH.RBAC/Models/Base/MenuControlAttribute.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Models.Base
+{
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
+ public class MenuControlAttribute : Attribute
+ {
+ public string ParentMenu { get; } // 父菜单名称(如 "相机设置")
+ public Type ConfigType { get; } // 配置类型(如 CameraBase)
+
+ public MenuControlAttribute(string parentMenu)
+ {
+ ParentMenu = parentMenu;
+ }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/AuthorParms.cs b/DH.RBAC/Models/DTO/Parms/AuthorParms.cs
new file mode 100644
index 0000000..ce213a2
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/AuthorParms.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class AuthorParms
+ {
+ public string roleId { get; set; }
+ public List perIds { get; set; }
+
+ public string operater { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/FileUploadParms.cs b/DH.RBAC/Models/DTO/Parms/FileUploadParms.cs
new file mode 100644
index 0000000..068518a
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/FileUploadParms.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class FileUploadParms
+ {
+ public byte[] file { get; set; }
+ public string fileName { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/ItemDetailIndexParms.cs b/DH.RBAC/Models/DTO/Parms/ItemDetailIndexParms.cs
new file mode 100644
index 0000000..e160571
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/ItemDetailIndexParms.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class ItemDetailIndexParms
+ {
+ public int pageIndex { get; set; }
+ public int pageSize { get; set; }
+
+ public string keyWord { get; set; }
+ public string itemId { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/KeyValue.cs b/DH.RBAC/Models/DTO/Parms/KeyValue.cs
new file mode 100644
index 0000000..eead2c8
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/KeyValue.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class KeyValue
+ {
+ public string Name { get; set; }
+ public string Value { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs b/DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs
new file mode 100644
index 0000000..87fe420
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class LogDeleteParms
+ {
+ public string type { get; set; }
+ public string index { get; set; }
+ public string operateUser { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/LogIndexParms.cs b/DH.RBAC/Models/DTO/Parms/LogIndexParms.cs
new file mode 100644
index 0000000..d5dcce6
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/LogIndexParms.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class LogIndexParms
+ {
+ public int pageIndex { get; set; }
+ public int pageSize { get; set; }
+ public string type { get; set; }
+ public string index { get; set; }
+ public string keyWord { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/LongPrimaryKeyParms.cs b/DH.RBAC/Models/DTO/Parms/LongPrimaryKeyParms.cs
new file mode 100644
index 0000000..a9916dd
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/LongPrimaryKeyParms.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class LongPrimaryKeyParms
+ {
+ public string operaterId { get; set; }
+ public long primaryKey { get; set; }
+
+ public string operateUser { get; set; }
+ public string userIds { get; set; }
+ public string roleId { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/ModifyPasswordParms.cs b/DH.RBAC/Models/DTO/Parms/ModifyPasswordParms.cs
new file mode 100644
index 0000000..4e19f90
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/ModifyPasswordParms.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class ModifyPasswordParms
+ {
+ public string userId { get; set; }
+ public string oldPassword { get; set; }
+ public string newPassword { get; set; }
+ public string confirmPassword { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs b/DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs
new file mode 100644
index 0000000..ec68f42
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class RoleDeleteParms
+ {
+ public List roleIdList { get; set; }
+ public string operateUser { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/SearchParms.cs b/DH.RBAC/Models/DTO/Parms/SearchParms.cs
new file mode 100644
index 0000000..030af0b
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/SearchParms.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class SearchParms
+ {
+ public int pageIndex { get; set; }
+ public int pageSize { get; set; }
+ public string keyWord { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/StrPrimaryKeyParms.cs b/DH.RBAC/Models/DTO/Parms/StrPrimaryKeyParms.cs
new file mode 100644
index 0000000..247fc10
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/StrPrimaryKeyParms.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class StrPrimaryKeyParms
+ {
+ public string operaterId { get; set; }
+ public string primaryKey { get; set; }
+
+ public string operateUser { get; set; }
+ public string userIds { get; set; }
+ public string roleId { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs b/DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs
new file mode 100644
index 0000000..210562d
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class UserDeleteParms
+ {
+ public List userIdList { get; set; }
+
+ public string currentUserId { get; set; }
+ public string operateUser { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/DTO/Parms/UserLoginParms.cs b/DH.RBAC/Models/DTO/Parms/UserLoginParms.cs
new file mode 100644
index 0000000..05ad817
--- /dev/null
+++ b/DH.RBAC/Models/DTO/Parms/UserLoginParms.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.DTO.Parms
+{
+ public class UserLoginParms
+ {
+ public string verifyCode { get; set; }
+ public string userName { get; set; }
+ public string password { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/Enum/ModuleType.cs b/DH.RBAC/Models/Enum/ModuleType.cs
new file mode 100644
index 0000000..a8e065b
--- /dev/null
+++ b/DH.RBAC/Models/Enum/ModuleType.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+namespace DH.RBAC.Model.Enum
+{
+ ///
+ /// 权限类型。
+ ///
+ public class ModuleType
+ {
+ ///
+ /// 主菜单。
+ ///
+ public const int Menu = 2;
+ ///
+ /// 子菜单
+ ///
+ public const int SubMenu = 0;
+ ///
+ /// 按钮。
+ ///
+ public const int Button = 1;
+
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysItem.cs b/DH.RBAC/Models/Sys/SysItem.cs
new file mode 100644
index 0000000..a37625f
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysItem.cs
@@ -0,0 +1,37 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_Item")]
+ public partial class SysItem : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "EnCode")]
+ public string EnCode { get; set; }
+
+ [SugarColumn(ColumnName = "ParentId")]
+ public string ParentId { get; set; }
+
+ [SugarColumn(ColumnName = "Name")]
+ public string Name { get; set; }
+
+ [SugarColumn(ColumnName = "Layer")]
+ public int? Layer { get; set; }
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+ [SugarColumn(ColumnName = "IsTree")]
+ public string IsTree { get; set; }
+
+ [SugarColumn(ColumnName = "Remark")]
+ public string Remark { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysItemDetail.cs b/DH.RBAC/Models/Sys/SysItemDetail.cs
new file mode 100644
index 0000000..4198932
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysItemDetail.cs
@@ -0,0 +1,35 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_ItemsDetail")]
+ public partial class SysItemDetail : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "ItemId")]
+ public string ItemId { get; set; }
+
+ [SugarColumn(ColumnName = "EnCode")]
+ public string EnCode { get; set; }
+
+ [SugarColumn(ColumnName = "Name")]
+ public string Name { get; set; }
+
+
+ [SugarColumn(ColumnName = "IsDefault")]
+ public string IsDefault { get; set; }
+
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+ }
+
+}
diff --git a/DH.RBAC/Models/Sys/SysLog.cs b/DH.RBAC/Models/Sys/SysLog.cs
new file mode 100644
index 0000000..8ea9007
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysLog.cs
@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+
+ [SugarTable("Sys_Log")]
+ public class SysLog : BaseModelEntity
+ {
+ [SugarColumn(IsPrimaryKey = true)]
+ public long Id { get; set; }
+
+ [SugarColumn]
+ public string Type { get; set; }
+
+ [SugarColumn]
+ public int ThreadId { get; set; }
+
+ [SugarColumn]
+ public string Message { get; set; }
+
+ [SugarColumn]
+ public DateTime CreateTime { get; set; }
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysOrganize.cs b/DH.RBAC/Models/Sys/SysOrganize.cs
new file mode 100644
index 0000000..4a69d82
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysOrganize.cs
@@ -0,0 +1,58 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_Organize")]
+ public partial class SysOrganize : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+
+ [SugarColumn(ColumnName = "ParentId")]
+ public string ParentId { get; set; }
+
+ [SugarColumn(ColumnName = "Layer")]
+ public int? Layer { get; set; }
+
+ [SugarColumn(ColumnName = "EnCode")]
+ public string EnCode { get; set; }
+
+ [SugarColumn(ColumnName = "FullName")]
+ public string FullName { get; set; }
+
+ [SugarColumn(ColumnName = "Type")]
+ public int? Type { get; set; }
+
+ [SugarColumn(ColumnName = "ManagerId")]
+ public string ManagerId { get; set; }
+
+ [SugarColumn(ColumnName = "TelePhone")]
+ public string TelePhone { get; set; }
+
+ [SugarColumn(ColumnName = "WeChat")]
+ public string WeChat { get; set; }
+
+ [SugarColumn(ColumnName = "Fax")]
+ public string Fax { get; set; }
+
+ [SugarColumn(ColumnName = "Email")]
+ public string Email { get; set; }
+
+ [SugarColumn(ColumnName = "Address")]
+ public string Address { get; set; }
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+
+ [SugarColumn(ColumnName = "Remark")]
+ public string Remark { get; set; }
+
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysPermission.cs b/DH.RBAC/Models/Sys/SysPermission.cs
new file mode 100644
index 0000000..421334c
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysPermission.cs
@@ -0,0 +1,61 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+
+ [SugarTable("Sys_Permission")]
+ public partial class SysPermission : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+
+ [SugarColumn(ColumnName = "ParentId")]
+ public string ParentId { get; set; }
+
+ [SugarColumn(ColumnName = "Layer")]
+ public int? Layer { get; set; }
+
+ [SugarColumn(ColumnName = "EnCode")]
+ public string EnCode { get; set; }
+
+ [SugarColumn(ColumnName = "Name")]
+ public string Name { get; set; }
+
+
+ [SugarColumn(ColumnName = "JsEvent")]
+ public string JsEvent { get; set; }
+
+ [SugarColumn(ColumnName = "Icon")]
+ public string Icon { get; set; }
+
+ [SugarColumn(ColumnName = "SymbolIndex")]
+ public int SymbolIndex { get; set; }
+
+
+ [SugarColumn(ColumnName = "Url")]
+ public string Url { get; set; }
+
+
+ [SugarColumn(ColumnName = "Remark")]
+ public string Remark { get; set; }
+
+ [SugarColumn(ColumnName = "Type")]
+ public int? Type { get; set; }
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+ [SugarColumn(ColumnName = "IsPublic")]
+ public string IsPublic { get; set; }
+
+ [SugarColumn(ColumnName = "IsEdit")]
+ public string IsEdit { get; set; }
+
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysRole.cs b/DH.RBAC/Models/Sys/SysRole.cs
new file mode 100644
index 0000000..2d00341
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysRole.cs
@@ -0,0 +1,55 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_Role")]
+ public partial class SysRole : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "OrganizeId")]
+ public string OrganizeId { get; set; }
+
+ [SugarColumn(ColumnName = "EnCode")]
+ public string EnCode { get; set; }
+
+ [SugarColumn(ColumnName = "Type")]
+ public int? Type { get; set; }
+
+ [SugarColumn(ColumnName = "Name")]
+ public string Name { get; set; }
+
+
+ [SugarColumn(ColumnName = "AllowEdit")]
+ public string AllowEdit { get; set; }
+
+
+ [SugarColumn(ColumnName = "Remark")]
+ public string Remark { get; set; }
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+
+ [Navigate(NavigateType.OneToOne, nameof(OrganizeId), nameof(SysOrganize.Id))]
+ public SysOrganize Organize { get; set; }
+
+
+ [SugarColumn(IsIgnore = true)]
+ public string DeptName
+ {
+ get
+ {
+ if (Organize == null)
+ return "";
+ return Organize.FullName;
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysRoleAuthorize.cs b/DH.RBAC/Models/Sys/SysRoleAuthorize.cs
new file mode 100644
index 0000000..a04b31d
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysRoleAuthorize.cs
@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_RoleAuthorize")]
+ public partial class SysRoleAuthorize : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+
+ public string Id { get; set; }
+
+
+ [SugarColumn(ColumnName = "RoleId")]
+ public string RoleId { get; set; }
+
+
+ [SugarColumn(ColumnName = "ModuleId")]
+ public string ModuleId { get; set; }
+
+
+
+ }
+
+}
diff --git a/DH.RBAC/Models/Sys/SysUser.cs b/DH.RBAC/Models/Sys/SysUser.cs
new file mode 100644
index 0000000..4ef36cf
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysUser.cs
@@ -0,0 +1,115 @@
+
+using DH.RBAC.Utility.Extension;
+using DH.RBAC.Utility.Other;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.IO;
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_User")]
+ public partial class SysUser : BaseModelEntity
+ {
+ private SysOrganize organize;
+
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "Account")]
+ public string Account { get; set; }
+
+ [SugarColumn(ColumnName = "RealName")]
+ public string RealName { get; set; }
+
+ [SugarColumn(ColumnName = "NickName")]
+ public string NickName { get; set; }
+
+ [SugarColumn(ColumnName = "Avatar")]
+ public string Avatar { get; set; }
+
+ [SugarColumn(IsIgnore = true)]
+ public string AvatarBase64
+ {
+ get
+ {
+ if (Avatar.IsNullOrEmpty())
+ return "";
+ string filePath = MyEnvironment.RootPath("wwwroot" + Avatar);
+ if (!File.Exists(filePath))
+ {
+ return "";
+ }
+ return filePath;
+ }
+ }
+
+
+ [SugarColumn(ColumnName = "Gender")]
+ public string Gender { get; set; }
+
+ [SugarColumn(IsIgnore = true)]
+ public string GenderStr
+ {
+ get
+ {
+ return Gender == "1" ? "男" : "女";
+ }
+ }
+
+ [SugarColumn(ColumnName = "Birthday")]
+ public DateTime? Birthday { get; set; }
+
+ [SugarColumn(ColumnName = "MobilePhone")]
+ public string MobilePhone { get; set; }
+
+
+ [SugarColumn(ColumnName = "Email")]
+ public string Email { get; set; }
+
+ [SugarColumn(ColumnName = "Signature")]
+ public string Signature { get; set; }
+
+
+ [SugarColumn(ColumnName = "Address")]
+ public string Address { get; set; }
+
+
+ [SugarColumn(ColumnName = "CompanyId")]
+ public string CompanyId { get; set; }
+
+
+ [SugarColumn(ColumnName = "SortCode")]
+ public int? SortCode { get; set; }
+
+ [SugarColumn(ColumnName = "DepartmentId")]
+ public string DepartmentId { get; set; }
+
+
+ [Navigate(NavigateType.OneToOne, nameof(DepartmentId), nameof(SysOrganize.Id))]
+ public SysOrganize Organize { get; set; }
+
+ [SugarColumn(IsIgnore = true)]
+ public string DeptName
+ {
+ get
+ {
+ if (Organize == null)
+ return "";
+ return Organize.FullName;
+ }
+ }
+
+ [SugarColumn(IsIgnore = true)]
+ public string StrBirthday { get; set; }
+
+ [SugarColumn(IsIgnore = true)]
+ public List RoleId { set; get; }
+
+
+ [SugarColumn(IsIgnore = true)]
+ public string password { set; get; }
+ [SugarColumn(IsIgnore = true)]
+ public string roleIds { set; get; }
+
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysUserLogOn.cs b/DH.RBAC/Models/Sys/SysUserLogOn.cs
new file mode 100644
index 0000000..92a9eb9
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysUserLogOn.cs
@@ -0,0 +1,60 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+ [SugarTable("Sys_UserLogOn")]
+ public partial class SysUserLogOn : BaseModelEntity
+ {
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "UserId")]
+ public string UserId { get; set; }
+
+ [SugarColumn(ColumnName = "Password")]
+ public string Password { get; set; }
+
+ [SugarColumn(ColumnName = "SecretKey")]
+ public string SecretKey { get; set; }
+
+ [SugarColumn(ColumnName = "PrevVisitTime")]
+ public DateTime? PrevVisitTime { get; set; }
+
+ [SugarColumn(ColumnName = "LastVisitTime")]
+ public DateTime? LastVisitTime { get; set; }
+
+ [SugarColumn(ColumnName = "ChangePwdTime")]
+ public DateTime? ChangePwdTime { get; set; }
+
+ [SugarColumn(ColumnName = "LoginCount")]
+ public int LoginCount { get; set; }
+
+ [SugarColumn(ColumnName = "AllowMultiUserOnline")]
+ public string AllowMultiUserOnline { get; set; }
+
+
+ [SugarColumn(ColumnName = "IsOnLine")]
+ public string IsOnLine { get; set; }
+
+ [SugarColumn(ColumnName = "Question")]
+ public string Question { get; set; }
+
+ [SugarColumn(ColumnName = "AnswerQuestion")]
+ public string AnswerQuestion { get; set; }
+
+ [SugarColumn(ColumnName = "CheckIPAddress")]
+ public string CheckIPAddress { get; set; }
+
+ [SugarColumn(ColumnName = "Language")]
+ public string Language { get; set; }
+
+ [SugarColumn(ColumnName = "Theme")]
+ public string Theme { get; set; }
+
+ }
+}
diff --git a/DH.RBAC/Models/Sys/SysUserRoleRelation.cs b/DH.RBAC/Models/Sys/SysUserRoleRelation.cs
new file mode 100644
index 0000000..de19a77
--- /dev/null
+++ b/DH.RBAC/Models/Sys/SysUserRoleRelation.cs
@@ -0,0 +1,26 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DH.RBAC.Model.Sys
+{
+
+ [SugarTable("Sys_UserRoleRelation")]
+ public partial class SysUserRoleRelation : BaseModelEntity
+ {
+
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ [SugarColumn(ColumnName = "UserId")]
+ public string UserId { get; set; }
+
+
+ [SugarColumn(ColumnName = "RoleId")]
+ public string RoleId { get; set; }
+
+ }
+}
diff --git a/DH.RBAC/Properties/Resources.Designer.cs b/DH.RBAC/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..1dd8dfc
--- /dev/null
+++ b/DH.RBAC/Properties/Resources.Designer.cs
@@ -0,0 +1,153 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace DH.RBAC.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(" DH.RBAC.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap avatar {
+ get {
+ object obj = ResourceManager.GetObject("avatar", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap back {
+ get {
+ object obj = ResourceManager.GetObject("back", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap background {
+ get {
+ object obj = ResourceManager.GetObject("background", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap login_back {
+ get {
+ object obj = ResourceManager.GetObject("login_back", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap logo {
+ get {
+ object obj = ResourceManager.GetObject("logo", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap logo2 {
+ get {
+ object obj = ResourceManager.GetObject("logo2", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap menu01 {
+ get {
+ object obj = ResourceManager.GetObject("menu01", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap menu02 {
+ get {
+ object obj = ResourceManager.GetObject("menu02", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap menu03 {
+ get {
+ object obj = ResourceManager.GetObject("menu03", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/DH.RBAC/Properties/Resources.resx b/DH.RBAC/Properties/Resources.resx
new file mode 100644
index 0000000..8bd1b69
--- /dev/null
+++ b/DH.RBAC/Properties/Resources.resx
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ ..\Resources\login_back.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\logo2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\background.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\menu02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\avatar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\menu01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\menu03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/DH.RBAC/RBACWindow.Designer.cs b/DH.RBAC/RBACWindow.Designer.cs
new file mode 100644
index 0000000..f628285
--- /dev/null
+++ b/DH.RBAC/RBACWindow.Designer.cs
@@ -0,0 +1,114 @@
+namespace DH.RBAC
+{
+ partial class RBACWindow
+ {
+ ///
+ /// 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()
+ {
+ AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
+ titlebar = new AntdUI.PageHeader();
+ lbName = new AntdUI.Label();
+ menu1 = new AntdUI.Menu();
+ tabs1 = new AntdUI.Tabs();
+ titlebar.SuspendLayout();
+ SuspendLayout();
+ //
+ // titlebar
+ //
+ titlebar.BackColor = System.Drawing.Color.FromArgb(46, 108, 227);
+ titlebar.Controls.Add(lbName);
+ titlebar.DividerShow = true;
+ titlebar.DividerThickness = 0F;
+ titlebar.Dock = System.Windows.Forms.DockStyle.Top;
+ titlebar.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
+ titlebar.ForeColor = System.Drawing.Color.White;
+ titlebar.Location = new System.Drawing.Point(0, 0);
+ titlebar.Mode = AntdUI.TAMode.Dark;
+ titlebar.Name = "titlebar";
+ titlebar.ShowButton = true;
+ titlebar.ShowIcon = true;
+ titlebar.Size = new System.Drawing.Size(923, 40);
+ titlebar.SubText = "CCD光学筛选系统后台";
+ titlebar.TabIndex = 1;
+ titlebar.Text = "山东迭慧智能科技有限公司";
+ //
+ // lbName
+ //
+ lbName.Dock = System.Windows.Forms.DockStyle.Right;
+ lbName.ForeColor = System.Drawing.SystemColors.Window;
+ lbName.Location = new System.Drawing.Point(645, 0);
+ lbName.Name = "lbName";
+ lbName.Size = new System.Drawing.Size(134, 40);
+ lbName.TabIndex = 0;
+ lbName.Text = "";
+ lbName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // menu1
+ //
+ menu1.Dock = System.Windows.Forms.DockStyle.Left;
+ menu1.Location = new System.Drawing.Point(0, 40);
+ menu1.Name = "menu1";
+ menu1.Size = new System.Drawing.Size(169, 504);
+ menu1.TabIndex = 2;
+ menu1.Text = "menu1";
+ //
+ // tabs1
+ //
+ tabs1.BackColor = System.Drawing.SystemColors.Window;
+ tabs1.Dock = System.Windows.Forms.DockStyle.Fill;
+ tabs1.Location = new System.Drawing.Point(169, 40);
+ tabs1.Name = "tabs1";
+ tabs1.Size = new System.Drawing.Size(754, 504);
+ styleCard1.Closable = true;
+ tabs1.Style = styleCard1;
+ tabs1.TabIndex = 6;
+ tabs1.Text = "tabs1";
+ tabs1.Type = AntdUI.TabType.Card;
+ //
+ // RBACWindow
+ //
+ AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ ClientSize = new System.Drawing.Size(923, 544);
+ Controls.Add(tabs1);
+ Controls.Add(menu1);
+ Controls.Add(titlebar);
+ Name = "RBACWindow";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ Text = "RBACWindow";
+ WindowState = System.Windows.Forms.FormWindowState.Maximized;
+ titlebar.ResumeLayout(false);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private AntdUI.PageHeader titlebar;
+ private AntdUI.Label lbName;
+ private AntdUI.Menu menu1;
+ private AntdUI.Tabs tabs1;
+ }
+}
\ No newline at end of file
diff --git a/DH.RBAC/RBACWindow.cs b/DH.RBAC/RBACWindow.cs
new file mode 100644
index 0000000..3aeaa33
--- /dev/null
+++ b/DH.RBAC/RBACWindow.cs
@@ -0,0 +1,204 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AntdUI;
+using DH.RBAC.Common;
+using DH.RBAC.Logic.Sys;
+using DH.RBAC.Model.Sys;
+using DH.RBAC.Models.Base;
+using DH.RBAC.Page;
+using Sunny.UI;
+
+
+
+namespace DH.RBAC
+{
+ public partial class RBACWindow : Window
+ {
+ private SysUserLogic userLogic;
+ private SysPermissionLogic permissionLogic;
+ private List