Эх сурвалжийг харах

供应商端增加f12功能,帝显条码同步程序提交

caosy 4 жил өмнө
parent
commit
cf1209cc06

BIN
UAS_AutoPass/U_Icon.ico


+ 99 - 0
UAS_DXFORM/DBHandler.cs

@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Text;
+
+namespace UAS_DXFORM
+{
+    class DBHandler
+    {
+
+        //SqlConnection数据库连接对象
+        public SqlConnection localConnection = null;
+
+        //构造函数中初始化连接对象,传入数据库服务名,数据库实例名,用户名和密码
+        public DBHandler(string server, string dataBase, string id, string pwd)
+        {
+            String connectionString = "Data Source=" + server + ";Initial Catalog=" + dataBase
+                                    + ";User ID=" + id + ";Password=" + pwd;
+            this.localConnection = new SqlConnection(connectionString);
+        }
+
+        //创建对象后调用该方法判断是否能够成功连接
+        public int checkValidate(ref string errMsg)
+        {
+            try
+            {
+                this.localConnection.Open();
+            }
+            catch (Exception ex)
+            {
+                errMsg = "[Connecting failed]" + ex.Message;
+                return -1;
+            }
+            return 0;
+        }
+
+        //操作数据库前调用
+        private void prepareConnect()
+        {
+            switch (this.localConnection.State)
+            {
+                case ConnectionState.Broken:
+                    this.localConnection.Close(); //先正常关闭,释放资源
+                    this.localConnection.Open();
+                    break;
+                case ConnectionState.Closed:
+                    this.localConnection.Open();
+                    break;
+                case ConnectionState.Connecting:
+                    break;
+                case ConnectionState.Executing:
+                    break;
+                case ConnectionState.Fetching:
+                    break;
+                case ConnectionState.Open:
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        //执行Update语句,返回更新的行数
+        public int doUpdate(string sql, ref string errMsg)
+        {
+            prepareConnect();
+            SqlCommand localCommand = new SqlCommand();
+            localCommand.CommandText = sql;
+            localCommand.Connection = this.localConnection;
+            try
+            {
+                return localCommand.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                errMsg = "[update error]" + ex.Message;
+                return -1;
+            }
+        }
+
+        //执行Select语句,返回DataTable结果集
+        public void doSelect(string sql, ref DataTable dataTable, ref string errMsg)
+        {
+            prepareConnect();
+            try
+            {
+                SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, this.localConnection);
+                dataTable.Clear();
+                dataAdapter.Fill(dataTable);
+            }
+            catch (Exception ex)
+            {
+                errMsg = "[select error]" + ex.Message;
+            }
+        }
+
+    }
+}

+ 1131 - 0
UAS_DXFORM/DataHelper.cs

@@ -0,0 +1,1131 @@
+
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Text;
+
+
+namespace UAS_DXFORM
+{
+    class DataHelper
+    {
+        //系统默认的的连接字符串
+        private string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=N_DIXIAN_GD;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=uas.dixian.net)(PORT=1520)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))";
+        //用户选择的数据库的连接字符串
+        public static string DBConnectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=N_DIXIAN_GD;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=uas.dixian.net)(PORT=1520)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))";
+        public static OracleConnection connection = null;
+        OracleCommand command = null;
+        int ReconnectTime = 0;
+        /// <summary>
+        /// 执行构造函数的时候打开数据库的链接
+        /// </summary>
+        public DataHelper()
+        {
+      
+                //如果选择的是默认数据则直接用配置文件的信息连接,否则选择数据库的账套信息
+                if (DBConnectionString == null || DBConnectionString == ConnectionStrings)
+                    connection = new OracleConnection(ConnectionStrings);
+                else
+                    connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+       
+        }
+
+        /// <summary>
+        /// 根据表名获取该表字段数据类型
+        /// </summary>
+        public DataTable GetColumnDataType(string TableName)
+        {
+            DataTable dt = new DataTable();
+            command = new OracleCommand("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 获取第一行第一列的信息
+        /// </summary>
+        public object getFieldDataByCondition(string TableName, string Field, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select " + Field + " from " + TableName + " where " + Condition;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter();
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            if (dt.Rows.Count > 0)
+            {
+                return dt.Rows[0][0];
+            }
+            else
+            {
+                return "";
+            }
+        }
+
+        /// <summary>
+        /// 执行打印的SQL
+        /// </summary>
+        /// <param name="SQL">SQL语句</param>
+        /// <param name="Parameters">动态添加的参数,主要根据条码枪扫描获取</param>
+        /// <returns></returns>
+        public object ExecutePrintSQL(string SQL, params string[] Parameters)
+        {
+            //按照?拆分数据,然后以:Param替换问号,同时添加参数
+            string[] Param = SQL.Split('?');
+            int ParamNum = Param.Length - 1;
+            //条码打印必然存在需要维护的参数
+            if (ParamNum > 0)
+            {
+                StringBuilder sb = new StringBuilder();
+                for (int i = 0; i < ParamNum; i++)
+                {
+                    sb.Append(Param[i] + ":Param" + i);
+                }
+                command = new OracleCommand(sb.ToString(), connection);
+
+                for (int i = 0; i < ParamNum; i++)
+                {
+                    command.Parameters.Add("Param" + i, OracleDbType.Varchar2, Parameters[i], ParameterDirection.Input);
+                }
+                OracleDataAdapter ad = new OracleDataAdapter(command);
+                DataTable dt = new DataTable();
+                ad.Fill(dt);
+                ad.Dispose();
+                command.Dispose();
+                return dt;
+            }
+            return "参数错误,请检查SQL语句";
+        }
+
+        /// <summary>
+        /// 获取指定表的记录的条数 ,带条件
+        /// </summary>
+        /// <returns></returns>
+        public int getRowCount(string TableName, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select count(1) from " + TableName + " where " + Condition;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 获取指定表的记录的条数 ,不带条件
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <returns></returns>
+        public int getRowCount(string TableName)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select count(1) from " + TableName;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 通过表名和获取单行的记录
+        /// </summary>
+        public DataTable getFieldsDataByCondition(string TableName, string[] Fields, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += AddField(Fields);
+            sql += " from " + TableName + " where " + Condition + " and rownum=1";
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 将DataTable导入到指定的表中
+        /// </summary>
+        /// <param name="DataTable"></param>
+        /// <param name="TableName"></param>
+        public void InsertDataTable(DataTable DataTable, string TableName)
+        {
+            for (int i = 0; i < DataTable.Rows.Count; i++)
+            {
+                for (int j = 0; j < DataTable.Columns.Count; j++)
+                {
+
+                }
+            }
+        }
+
+        /// <summary>
+        /// 按分页获取数据
+        /// </summary>
+        /// <param name="TableName">表名</param>
+        /// <param name="Fields">查询字段</param>
+        /// <param name="CurrentPage">当前页面</param>
+        /// <param name="PageSize">页面展示条数</param>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        // SELECT * FROM (SELECT   A.*  FROM (SELECT* FROM datalist) A WHERE ROWNUM <= 50) WHERE ROWNUM >= 21
+        public DataTable getFieldsDatasByPageing(string TableName, string Fields, int CurrentPage, int PageSize, string Caller, params string[] condition)
+        {
+            DataTable dt = new DataTable();
+            StringBuilder sql = new StringBuilder();
+            //先查询出配置出去的列
+            //获取查询的列
+            string[] caption = GetCaptionFromField(Fields);
+            //获取对应列的描述
+            string[] field = GetField(Fields);
+            sql.Append(" select * from (select RowNum RN, A.* from (select ");
+            sql.Append(AddField(caption));
+            if (condition.Length > 0)
+            {
+                if (condition[0] != null && condition[0].Trim() != "")
+                    sql.Append(" from " + TableName + " where " + condition[0] + " ) A where ROWNUM <=" + CurrentPage * PageSize + ") where RN>" + (CurrentPage - 1) * PageSize);
+                else
+                    sql.Append(" from " + TableName + ") A where ROWNUM <= " + CurrentPage * PageSize + ") where RN> " + (CurrentPage - 1) * PageSize);
+            }
+            command = new OracleCommand(sql.ToString(), connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            dt.Columns.RemoveAt(0);
+            foreach (DataColumn dc in dt.Columns)
+            {
+                dc.ColumnName = field[dt.Columns.IndexOf(dc)];
+                dc.Caption = caption[dt.Columns.IndexOf(dc)];
+            }
+            return dt;
+        }
+
+        /// <summary>
+        /// 通过表名,字段和条件获取DataTable类型的数据
+        /// </summary>
+        public DataTable getFieldsDatasByCondition(string TableName, string[] Fields, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += AddField(Fields);
+            sql += " from " + TableName + " where " + Condition;
+            
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 通过表名,字段获取DataTable类型的数据
+        /// </summary>
+        public DataTable getFieldsDatas(string TableName, string Fields)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += Fields;
+            sql += " from " + TableName;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 根据DataTable和指定的表名更新数据,如果需要保存新增的数据则需要传递一条Insert的SQL
+        /// </summary>
+        /// <param name="DataTable"></param>
+        /// <param name="TableName"></param>
+        /// <param name="Condition"></param>
+        public void UpDateTableByCondition(DataTable DataTable, string TableName, string PrimaryKey, params string[] sql)
+        {
+            if (DataTable == null)
+            {
+                return;
+            }
+            StringBuilder sb = new StringBuilder();
+            //预防插入的DataTable中存在不属于该表的列,在进行下一步操作之前全部剔除
+            DataTable data = (DataTable)ExecuteSql("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", "select");
+            //将所有的字段拼接起来
+            for (int i = 0; i < data.Rows.Count; i++)
+            {
+                sb.Append("#" + data.Rows[i]["Column_Name"].ToString());
+            }
+            //移除掉所有不属于该表的列
+            for (int i = DataTable.Columns.Count - 1; i >= 0; i--)
+            {
+                if (!sb.ToString().Contains(DataTable.Columns[i].ColumnName.ToUpper()))
+                {
+                    DataTable.Columns.RemoveAt(i);
+                }
+            }
+            sb.Clear();
+            //计算有多少个是新加的行,根据主键为空来进行判断
+            int NewRowCount = 0;
+            for (int i = 0; i < DataTable.Rows.Count; i++)
+            {
+                if (DataTable.Rows[i][PrimaryKey] == null || DataTable.Rows[i][PrimaryKey].ToString() == "")
+                {
+                    NewRowCount = NewRowCount + 1;
+                }
+            }
+            if (sql.Length > 0)
+            {
+                if (NewRowCount > 0)
+                {
+                    //获取参数的个数
+                    int paramsNum = sql[0].Split(':').Length - 1;
+                    //解析参数的数据
+                    string[] param = GetParamFromSQL(sql[0]);
+                    //新建一个二维数组去
+                    string[][] param_array = new string[paramsNum][];
+                    //实例化每个一维数组
+                    for (int i = 0; i < paramsNum; i++)
+                    {
+                        param_array[i] = new string[NewRowCount];
+                    }
+                    //设置每列参数的索引
+                    int num = 0;
+                    //变量所有的行,如果有主键为空的则移除,不为空的进行参数的拼接
+                    for (int i = DataTable.Rows.Count - 1; i >= 0; i--)
+                    {
+                        if (DataTable.Rows[i][PrimaryKey] == null || DataTable.Rows[i][PrimaryKey].ToString() == "")
+                        {
+                            //当为新添加行的时候才去设置参数,设置过后索引+1
+                            for (int j = 0; j < paramsNum; j++)
+                            {
+                                param_array[j][num] = DataTable.Rows[i][param[j]].ToString();
+                            }
+                            DataTable.Rows.RemoveAt(i);
+                            num++;
+                        }
+                    }
+                    BatchInsertDataTable(sql[0], param, param_array);
+                }
+            }
+            //不是新增行的启用更新的方法
+            sb.Append("update " + TableName + " set ");
+            //拼接语句,特殊处理日期
+
+            foreach (DataColumn dc in DataTable.Columns)
+            {
+                if (!dc.DataType.ToString().Equals("System.DateTime"))
+                {
+                    sb.Append(dc.Caption + "=:" + dc.Caption + ",");
+                }
+                else
+                {
+                    sb.Append(dc.Caption + "=:" + dc.Caption + ",");
+                }
+            }
+            sb.Remove(sb.Length - 1, 1);
+            sb.Append(" where " + PrimaryKey + "=:" + PrimaryKey);
+            command = new OracleCommand(sb.ToString(), connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            // 参数的长度是DataTable的行数决定的
+            command.ArrayBindCount = DataTable.Rows.Count;
+            //默认全部是Varchar2类型的
+            OracleDbType ob = OracleDbType.Varchar2;
+            for (int i = 0; i < DataTable.Columns.Count; i++)
+            {
+                object[] param = new object[DataTable.Rows.Count];
+                for (int j = 0; j < DataTable.Rows.Count; j++)
+                {
+                    DateTime dt = DateTime.Now;
+                    if (DateTime.TryParse(DataTable.Rows[j][i].ToString(), out dt))
+                    {
+                        param[j] = dt;
+                        ob = OracleDbType.Date;
+                    }
+                    else
+                    {
+                        ob = OracleDbType.Varchar2;
+                        param[j] = DataTable.Rows[j][i];
+                    }
+                }
+                //添加批量更新的参数
+                command.Parameters.Add(new OracleParameter(DataTable.Columns[i].Caption, ob, param, ParameterDirection.Input));
+            }
+            ad.UpdateCommand = command;
+            ad.Update(DataTable);
+            ad.Dispose();
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 获取DbFind的数据的DataTable的结构
+        /// </summary>
+        /// <param name="field"></param>
+        /// <param name="caller"></param>
+        /// <returns></returns>
+        public DataTable GetDbFindDataTable(string field, string caller)
+        {
+            string sql = "select * from dbfindsetui where ds_caller='" + caller + "' and ds_whichui='" + field + "'";
+            DataTable dt = (DataTable)ExecuteSql(sql, "select");
+            if (dt.Rows.Count != 0)
+            {
+                //通过#号分割字段
+                string[] dbfield = dt.Rows[0]["ds_findtoui"].ToString().Split('#');
+                string[] cnfield = dt.Rows[0]["ds_dbcaption"].ToString().Split('#');
+                //获取查询要查询的Table
+                string dbtable = dt.Rows[0]["ds_tables"].ToString();
+                //拼接查询的字段
+                for (int i = 0; i < dbfield.Length; i++)
+                {
+                    dbfield[i] = dbfield[i].Split(',')[0];
+                }
+                //新建一个空的DataTable
+                DataTable dt1 = new DataTable();
+                //往空的DataTable添加结构,ColumnName是中文,Caption是实际的字段名称
+                for (int i = 0; i < cnfield.Length; i++)
+                {
+                    dt1.Columns.Add(cnfield[i]);
+                    dt1.Columns[i].Caption = dbfield[i];
+                }
+                //返回一个带有结构的空的DataTable
+                //DbFind.BindTable1 = dbtable;
+                return dt1;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// 检测内容是否存在
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <param name="Condition"></param>
+        /// <returns></returns>
+        public bool CheckExist(string TableName, string Condition)
+        {
+            string sql = "select count(1) from " + TableName + " where " + Condition;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            DataTable dt = new DataTable();
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString()) > 0;
+        }
+
+        /// <summary>
+        /// 直接执行SQL,同时传入SQL的类型
+        /// </summary>
+        /// <param name="SQL"></param>
+        /// <param name="Type"></param>
+        /// <returns></returns>
+        public object ExecuteSql(string SQL, string Type, params object[] names)
+        {
+            object result = null;
+            command = new OracleCommand(SQL, connection);
+            Reconnect(command);
+            //用来拼接参数的
+            if (names.Length > 0)
+            {
+                string[] par = SQL.Split(':');
+                //用来存参数的数组
+                StringBuilder[] addpar = new StringBuilder[par.Length - 1];
+                for (int i = 0; i < par.Length - 1; i++)
+                {
+                    //新建一个char类型的数组用来存储每个字节的变量
+                    char[] c = par[i + 1].ToCharArray();
+                    addpar[i] = new StringBuilder();
+                    for (int j = 0; j < c.Length; j++)
+                    {
+                        if (c[j] != ' ' && c[j] != ',' && c[j] != ')')
+                        {
+                            addpar[i].Append(c[j]);
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                }
+                for (int i = 0; i < addpar.Length; i++)
+                    command.Parameters.Add(new OracleParameter(addpar[i].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
+            }
+            
+            switch (Type.ToUpper())
+            {
+                case "SELECT":
+                    OracleDataAdapter ad = new OracleDataAdapter(command);
+                    result = new DataTable();
+                    try
+                    {
+                        ad.Fill((DataTable)result);
+                    }
+                    catch (Exception)
+                    {
+                        connection = new OracleConnection(DBConnectionString);
+                        connection.Open();
+                        command = new OracleCommand(SQL, connection);
+                        ad = new OracleDataAdapter();
+                        ad.SelectCommand = command;
+                        ad.Fill((DataTable)result);
+                    }
+                    break;
+                case "DELETE":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+                case "UPDATE":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+                case "INSERT":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+            }
+            command.Dispose();
+            return result;
+        }
+
+        /// <summary>
+        /// 为了同步BS端的条码维护,检测时允许问号的存在,在检测时默认将问号换成:Param参数
+        /// </summary>
+        /// <param name="SQL"></param>
+        public void CheckSQL(string SQL)
+        {
+            SQL = SQL.Replace("?", ":Param");
+            command = new OracleCommand(SQL, connection);
+            command.ExecuteNonQuery();
+            command.Dispose();
+        }
+
+        public int GetDistinctRowCount(string TableName, string Field)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select distinct count('" + Field + "') from " + TableName;
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 根据Caller获取流水号
+        /// </summary>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        public string GetSerialNumberByCaller(string Caller)
+        {
+            string SerialNumber = getFieldDataByCondition("MaxNumbers", "mn_number", "mn_tablename='" + Caller + "'").ToString();
+            UpdateByCondition("MaxNumbers", "mn_number=mn_number+1", "mn_tablename='" + Caller + "'");
+            return SerialNumber;
+        }
+
+        /// <summary>
+        /// 根据主键ID删除表的数据
+        /// </summary>
+        /// <param name="TableName">表名</param>
+        /// <param name="ID">主键</param>
+        /// <param name="DeleteID">需要删除主键ID的数组</param>
+        public void DeleteDataByID(string TableName, string ID, string[] DeleteID)
+        {
+            string sql = "delete from " + TableName + " where " + ID + " =:DeleteID";
+
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            command.ArrayBindCount = DeleteID.Length;
+            command.Parameters.Add(new OracleParameter("DeleteID", OracleDbType.Long, DeleteID, ParameterDirection.Input));
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 通过序列的名称获取序列
+        /// </summary>
+        /// <param name="SeqName"></param>
+        /// <returns></returns>
+        public string GetSEQ(string SeqName)
+        {
+            DataTable dt = new DataTable();
+            dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".NEXTVAL FROM DUAL", "select");
+            return dt.Rows[0][0].ToString();
+        }
+
+        /// <summary>
+        /// 通过序列的名称获取序列
+        /// </summary>
+        /// <param name="SeqName"></param>
+        /// <returns></returns>
+        public string[] GetSEQ(string SeqName, int Num)
+        {
+            DataTable dt = new DataTable();
+            dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".nextval  FROM DUAL CONNECT BY LEVEL<=" + Num, "select");
+            string[] SerialNum = new string[dt.Rows.Count];
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                SerialNum[i] = dt.Rows[i][0].ToString();
+            }
+            return SerialNum;
+        }
+
+        public void SaveDataTable(DataTable dt, string TableName, string ID, params string[] sql)
+        {
+            if (dt == null)
+            {
+                return;
+            }
+            StringBuilder sb = new StringBuilder();
+            //预防插入的DataTable中存在不属于该表的列,在进行下一步操作之前全部剔除
+            DataTable data = (DataTable)ExecuteSql("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", "select");
+            //将所有的字段拼接起来
+            for (int i = 0; i < data.Rows.Count; i++)
+            {
+                sb.Append("#" + data.Rows[i]["Column_Name"].ToString());
+            }
+            //移除掉所有不属于该表的列
+            for (int i = dt.Columns.Count - 1; i >= 0; i--)
+            {
+                if (!sb.ToString().Contains(dt.Columns[i].ColumnName.ToUpper()))
+                {
+                    dt.Columns.RemoveAt(i);
+                }
+            }
+            sb.Clear();
+            //计算有多少个是新加的行,根据主键为空来进行判断
+            int NewRowCount = 0;
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                if (dt.Rows[i][ID] == null || dt.Rows[i][ID].ToString() == "")
+                {
+                    NewRowCount = NewRowCount + 1;
+                }
+            }
+            if (sql.Length > 0)
+            {
+                if (NewRowCount > 0)
+                {
+                    //获取参数的个数
+                    int paramsNum = sql[0].Split(':').Length - 1;
+                    //解析参数的数据
+                    string[] param = GetParamFromSQL(sql[0]);
+                    //新建一个二维数组去
+                    string[][] param_array = new string[paramsNum][];
+                    //实例化每个一维数组
+                    for (int i = 0; i < paramsNum; i++)
+                    {
+                        param_array[i] = new string[NewRowCount];
+                    }
+                    //设置每列参数的索引
+                    int num = 0;
+                    //变量所有的行,如果有主键为空的则移除,不为空的进行参数的拼接
+                    for (int i = dt.Rows.Count - 1; i >= 0; i--)
+                    {
+                        if (dt.Rows[i][ID] == null || dt.Rows[i][ID].ToString() == "")
+                        {
+                            //当为新添加行的时候才去设置参数,设置过后索引+1
+                            for (int j = 0; j < paramsNum; j++)
+                            {
+                                param_array[j][num] = dt.Rows[i][param[j]].ToString();
+                            }
+                            dt.Rows.RemoveAt(i);
+                            num++;
+                        }
+                    }
+                    BatchInsertDataTable(sql[0], param, param_array);
+                }
+            }
+            sb.Clear();
+            sb.Append("update " + TableName + " set ");
+            int ColumnCount = dt.Columns.Count;
+            int RowCount = dt.Rows.Count;
+            //存数据的参数
+            List<string[]> Parameter = new List<string[]>();
+            //存参数名的参数
+            string[] ParName = new string[ColumnCount];
+            for (int i = 0; i < ColumnCount; i++)
+            {
+                ParName[i] = dt.Columns[i].ColumnName;
+                if (i == dt.Columns.Count - 1)
+                    sb.Append(dt.Columns[i].ColumnName + "=:" + dt.Columns[i].ColumnName);
+                else
+                    sb.Append(dt.Columns[i].ColumnName + "=:" + dt.Columns[i].ColumnName + ",");
+            }
+            sb.Append(" where " + ID + " =:" + ID);
+            //先添加参数
+            Parameter.Add(ParName);
+            //添加参数的具体内容
+            for (int i = 0; i < ColumnCount; i++)
+            {
+                string[] par = new string[RowCount];
+                for (int j = 0; j < RowCount; j++)
+                {
+                    par[j] = dt.Rows[j][i].ToString();
+                }
+                Parameter.Add(par);
+            }
+            BatchInsert(sb.ToString(), Parameter.ToArray());
+        }
+
+        /// <summary>
+        /// 批量通过SQL来执行插入操作 ,参数的第一个数一个string[]数组,用来传递需要添加的参数的名称
+        /// 之后的是名称参数数组对应的 ,所有的插入参数数据长度必须是一致的
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="names"></param>
+        public void BatchInsert(string sql, params object[][] names)
+        {
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            command.ArrayBindCount = names[1].Length;
+
+            //因为第一个数组保存的是参数的名称,所以循环从1而不是0开始
+            //将第一个数组的下标固定为0作为循环添加的参数的名称
+            for (int i = 1; i <= names[0].Length; i++)
+            {
+                command.Parameters.Add(new OracleParameter(names[0][i - 1].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
+            }
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        public void BatchInsertDataTable(string sql, string[] param, params object[][] param1)
+        {
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            command.ArrayBindCount = param1[0].Length;
+            //因为第一个数组保存的是参数的名称,所以循环从1而不是0开始
+            //将第一个数组的下标固定为0作为循环添加的参数的名称
+            for (int i = 0; i < param.Length; i++)
+            {
+                command.Parameters.Add(new OracleParameter(param[i].ToString(), OracleDbType.Varchar2, param1[i], ParameterDirection.Input));
+            }
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 取Configs表中的配置,进行该客户是否执行某个操作
+        /// </summary>
+        /// <param name="Code"></param>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        public object GetConfig(string Code, string Caller)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select Data from configs where code='" + Code + "' and caller='" + Caller + "'";
+            dt = (DataTable)ExecuteSql(sql, "select");
+            if (dt.Rows.Count == 0)
+            {
+                return "";
+            }
+            else
+            {
+                return dt.Rows[0]["Data"];
+            }
+        }
+
+
+        //将数据类型的列类型转换为DataTable
+        public DataTable DataTypeColumnToDataTable(DataTable dt)
+        {
+            DataTable dt1 = new DataTable();
+            dt1.Rows.Add();
+            foreach (DataRow dr in dt.Rows)
+            {
+                dt1.Columns.Add(dr[0].ToString());
+                int index = dt.Rows.IndexOf(dr);
+                if (dr[1].ToString() == "NUMBER")
+                {
+                    dt1.Rows[0][index] = 0;
+                }
+                if (dr[1].ToString() == "VARCHAR2")
+                {
+                    dt1.Rows[0][index] = "这是一段文字";
+                }
+                if (dr[1].ToString() == "DATE")
+                {
+                    dt1.Rows[0][index] = DateTime.Now.ToString("yyyy-MM-dd");
+                }
+                if (dr[1].ToString() == "FLOAT")
+                {
+                    dt1.Rows[0][index] = 1.0;
+                }
+                if (dr[1].ToString() == "CLOB")
+                {
+                    dt1.Rows[0][index] = "一段长文字";
+                }
+            }
+            return dt1;
+        }
+
+
+        /// <summary>
+        /// 通过条件更新
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <param name="update"></param>
+        /// <param name="condition"></param>
+        public string UpdateByCondition(string TableName, string update, string condition)
+        {
+            string sql = "update " + TableName + " set " + update + " where " + condition;
+            command = new OracleCommand(sql, connection);
+            
+            Reconnect(command);
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+            return sql;
+        }
+
+        /// <summary>
+        /// 调用存储过程
+        /// </summary>
+        /// <param name="ProcedureName"></param>    
+        /// <param name="param"></param>
+        public void CallProcedure(string ProcedureName, ref string[] param)
+        {
+            command = new OracleCommand(ProcedureName);
+            command.Connection = connection;
+            Reconnect(command);
+            command.CommandText = ProcedureName;
+            command.CommandType = CommandType.StoredProcedure;
+            for (int i = 0; i < param.Length; i++)
+                command.Parameters.Add(new OracleParameter(param[i].ToString(), OracleDbType.Varchar2, 200, param[i], ParameterDirection.InputOutput));
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            for (int i = 0; i < command.Parameters.Count; i++)
+                param[i] = command.Parameters[i].Value.ToString();
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 出现异常进行回滚的执行方法
+        /// </summary>
+        /// <param name="SQL"></param>
+        public void ExecuteSQLTran(params string[] SQL)
+        {
+            OracleTransaction tx = connection.BeginTransaction();
+            command = new OracleCommand();
+            command.Connection = connection;
+            command.Transaction = tx;
+            try
+            {
+                foreach (string sql in SQL)
+                {
+
+                    if (!String.IsNullOrEmpty(sql))
+                    {
+                        command.CommandText = sql;
+                        try
+                        {
+                            command.ExecuteNonQuery();
+                        }
+                        catch (Exception)
+                        {
+                            command.Connection = new OracleConnection(DBConnectionString);
+                            command.Connection.Open();
+                            command.ExecuteNonQuery();
+                        }
+                    }
+                }
+                tx.Commit();
+            }
+            catch (Exception E)
+            {
+                tx.Rollback();
+                throw new Exception(E.Message);
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 用于将string 的数组转换成SQL的查询内容
+        /// </summary>
+        /// <param name="Fields"></param>
+        /// <returns></returns>
+        private string AddField(string[] Fields)
+        {
+            string sql = " ";
+            foreach (string field in Fields)
+            {
+                sql += field + ",";
+            }
+            return sql.Substring(0, sql.Length - 1);
+        }
+        /// <summary>
+        /// 通过查询的内容获取到字段的描述
+        /// </summary>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        private static string[] GetCaptionFromField(string field)
+        {
+            string[] caption = field.Split(',');
+            for (int i = 0; i < caption.Length; i++)
+            {
+                caption[i] = caption[i].Substring(0, caption[i].LastIndexOf("as")).Trim();
+            }
+            return caption;
+        }
+
+        /// <summary>
+        /// 通过查询的语句获取查询的字段
+        /// </summary>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        private static string[] GetField(string field)
+        {
+            string[] fields = field.Split(',');
+            for (int i = 0; i < fields.Length; i++)
+            {
+                fields[i] = fields[i].Substring(fields[i].LastIndexOf("as") + 2, fields[i].Length - fields[i].LastIndexOf("as") - 2).Trim();
+            }
+            return fields;
+        }
+
+        public object GetLabelParam(string sql)
+        {
+            DataTable dt = new DataTable();
+            command = new OracleCommand(sql, connection);
+            Reconnect(command);
+            OracleDataAdapter ad = new OracleDataAdapter();
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            if (dt.Rows.Count > 0)
+            {
+                ad.Dispose();
+                command.Dispose();
+                return dt.Rows[0][0];
+            }
+            else
+            {
+                command.Dispose();
+                return "";
+            }
+        }
+
+        public static string[] GetParamFromSQL(string SQL)
+        {
+            string[] par = SQL.Split(':');
+            //用来存参数的数组
+            StringBuilder[] addpar = new StringBuilder[par.Length - 1];
+            string[] param = new string[par.Length - 1];
+            for (int i = 0; i < par.Length - 1; i++)
+            {
+                //新建一个char类型的数组用来存储每个字节的变量
+                char[] c = par[i + 1].ToCharArray();
+                addpar[i] = new StringBuilder();
+
+                for (int j = 0; j < c.Length; j++)
+                {
+                    if (c[j] != ' ' && c[j] != ',' && c[j] != ')')
+                    {
+                        addpar[i].Append(c[j]);
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+            }
+            for (int i = 0; i < par.Length - 1; i++)
+            {
+                param[i] = addpar[i].ToString();
+            }
+            return param;
+        }
+
+        public void Dispose()
+        {
+           
+        }
+
+        private void Reconnect(OracleCommand cmd)
+        {
+            if (cmd.Connection.State == ConnectionState.Closed)
+            {
+                cmd.Connection.Open();
+             
+            }
+        }
+    }
+}

+ 89 - 0
UAS_DXFORM/Form1.Designer.cs

@@ -0,0 +1,89 @@
+namespace UAS_DXFORM
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+            this.Timer = new System.Windows.Forms.Timer(this.components);
+            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.提示 = new System.Windows.Forms.NotifyIcon(this.components);
+            this.contextMenuStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // Timer
+            // 
+            this.Timer.Interval = 1000;
+            this.Timer.Tick += new System.EventHandler(this.Timer_Tick);
+            // 
+            // contextMenuStrip1
+            // 
+            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.退出ToolStripMenuItem});
+            this.contextMenuStrip1.Name = "contextMenuStrip1";
+            this.contextMenuStrip1.Size = new System.Drawing.Size(101, 26);
+            // 
+            // 退出ToolStripMenuItem
+            // 
+            this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem";
+            this.退出ToolStripMenuItem.Size = new System.Drawing.Size(100, 22);
+            this.退出ToolStripMenuItem.Text = "退出";
+            this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click);
+            // 
+            // 提示
+            // 
+            this.提示.ContextMenuStrip = this.contextMenuStrip1;
+            this.提示.Icon = ((System.Drawing.Icon)(resources.GetObject("提示.Icon")));
+            this.提示.Text = "提示";
+            this.提示.Visible = true;
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(284, 261);
+            this.Name = "Form1";
+            this.ShowInTaskbar = false;
+            this.Text = "Form1";
+            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.contextMenuStrip1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Timer Timer;
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem;
+        private System.Windows.Forms.NotifyIcon 提示;
+    }
+}
+

+ 113 - 0
UAS_DXFORM/Form1.cs

@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace UAS_DXFORM
+{
+    public partial class Form1 : Form
+    {
+        DataHelper dh;
+        DataTable dtoracle;
+        DataTable drsqlserver;
+        DBHandler sql;
+
+        LogStringBuilder sqlmessage = new LogStringBuilder();
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            dh = new DataHelper();
+            sql = new DBHandler("messvr", "vManage", "sa", "Sadxmfg@888");
+            提示.ShowBalloonTip(30, "提示", "程序启动", ToolTipIcon.Info);
+            dtoracle = new DataTable();
+            drsqlserver = new DataTable();
+            Timer.Enabled = true;
+            Timer.Interval = 60000;
+            Timer.Start();
+        }
+
+        private void Timer_Tick(object sender, EventArgs e)
+        {
+            try
+            {
+                sqlmessage.Clear();
+                string sqlinfo = "";            
+                List<string> str = new List<string>();
+                dtoracle = (DataTable)dh.ExecuteSql("select ban_barcode,ban_prodcode,ve_name,substr(pr_spec,0,64) pr_spec,nvl(substr(pr_orispeccode,0,64),substr(pr_custprodcode,0,64)) pr_orispeccode,ban_qty,ban_remark,ban_inman,pr_brand,lotcode from BarAcceptNotify left join vendor on ban_vendcode=ve_code left join product on ban_prodcode=pr_code where nvl(ban_canup,'N')  = 'Y' and nvl(ban_ifup,'N') = 'N'", "select");
+                if (dtoracle.Rows.Count > 0)
+                {
+                    for (int i = 0; i < dtoracle.Rows.Count; i++)
+                    {
+                        string ban_barcode = dtoracle.Rows[i]["ban_barcode"].ToString();
+                        string ban_prodcode = dtoracle.Rows[i]["ban_prodcode"].ToString();
+                        string ve_name = dtoracle.Rows[i]["ve_name"].ToString();
+                        string pr_spec = dtoracle.Rows[i]["pr_spec"].ToString();
+                        string pr_orispeccode = dtoracle.Rows[i]["pr_orispeccode"].ToString();
+                        string ban_qty = dtoracle.Rows[i]["ban_qty"].ToString();
+                        string ban_remark = dtoracle.Rows[i]["ban_remark"].ToString();
+                        string ban_inman = dtoracle.Rows[i]["ban_inman"].ToString();
+                        string pr_brand = dtoracle.Rows[i]["pr_brand"].ToString();
+                        string lotcode = dtoracle.Rows[i]["lotcode"].ToString();
+                        str.Add(ban_barcode);
+                        sqlmessage.Append(" MERGE INTO Complist A using (SELECT '" + ban_barcode + "' CompID,'" + ban_prodcode + "' CompName,'" + ban_qty + "' Amount ) AS B on ");
+                        sqlmessage.Append(" (A.CompID = B.CompID) WHEN MATCHED THEN UPDATE SET A.CompName = B.CompName,A.Amount = B.Amount WHEN NOT MATCHED THEN INSERT (CompID,CompName,Amount)VALUES(B.CompID,B.CompName,B.Amount);");
+                        sql.doUpdate(sqlmessage.GetString(), ref sqlinfo);
+                        sqlmessage.Clear();
+                        sqlmessage.Append("MERGE INTO ComponentTrace A using (SELECT '" + ban_barcode + "' CompID,'" + ban_prodcode + "' CompName,'" + ban_qty + "' Amount,'"+ ban_inman + "' OperatorID,'" + pr_orispeccode + "' MnfPartNo");
+                        sqlmessage.Append(",'" + ban_remark + "' MnfDate,'" + pr_brand + "' Manufacturer,'" + ve_name + "' Supplier,'" + lotcode + "' LotNo,'" + pr_spec + "' Remark ) AS B on");
+                        sqlmessage.Append(" (A.CompID = B.CompID) WHEN MATCHED THEN UPDATE SET A.CompName = B.CompName,A.Amount = B.Amount,A.OperatorID = B.OperatorID ,A.MnfPartNo = B.MnfPartNo ,A.MnfDate = B.MnfDate ,A.Manufacturer = B.Manufacturer ,A.Supplier = B.Supplier ,A.LotNo = B.LotNo ,A.Remark = B.Remark  ");
+                        sqlmessage.Append("WHEN NOT MATCHED THEN INSERT (CompID,CompName,Amount,OperatorID,MnfPartNo,MnfDate,Manufacturer,Supplier,LotNo,Remark,ReceiveDate)VALUES(B.CompID,B.CompName,B.Amount,B.OperatorID,B.MnfPartNo,B.MnfDate,B.Manufacturer,B.Supplier,B.LotNo,B.Remark,getdate());");
+                        sql.doUpdate(sqlmessage.GetString(), ref sqlinfo);
+                        dh.UpdateByCondition("BarAcceptNotify", "ban_ifup = 'Y'", "ban_barcode = '" + ban_barcode + "'");
+                    }
+                }
+                if (str.Count > 0)
+                {
+                    LogManager.DoLog(str, "下列条码已同步");
+                    Console.WriteLine("下列条码已同步");
+                }
+                dh.Dispose();
+                if (sql.localConnection != null)
+                {
+                    sql.localConnection.Close();
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                LogManager.DoLog(ex.Message);
+                if (dh != null)
+                {
+                    dh.Dispose();
+                }
+                if (sql.localConnection != null)
+                {
+                    sql.localConnection.Close();
+                }
+            }
+        }
+
+        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            Timer.Stop();
+            if (dh != null)
+            {
+                dh.Dispose();
+            }
+            if (sql != null)
+            {
+                sql.localConnection.Close();
+            }
+            提示.ShowBalloonTip(30, "提示", "程序关闭", ToolTipIcon.Info);
+            Close();
+        }
+    }
+}

+ 926 - 0
UAS_DXFORM/Form1.resx

@@ -0,0 +1,926 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>314, 17</value>
+  </metadata>
+  <metadata name="提示.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>479, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="提示.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAkAAAAAAAEACABdEAAAlgAAADAwAAABAAgAqA4AAPMQAAAgIAAAAQAIAKgIAACbHwAAEBAAAAEA
+        CABoBQAAQygAAAAAAAABACAA9Q4AAKstAABAQAAAAQAgAChCAACgPAAAMDAAAAEAIACoJQAAyH4AACAg
+        AAABACAAqBAAAHCkAAAQEAAAAQAgAGgEAAAYtQAAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABr
+        rFhUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAPj4+Pb29snJyZycnG5tbllZ
+        WUJCQoaGhk1NTeDg4Hp6er6+vpGRkdTU1Ovr66enp/Dv8bOzswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        /0XRj9wCN/Fl8ckFOPw3Rg73rbHpFTjYN0enF+Ca3x63fDWOCcshZjxcgMnzwNF+QGLmFjjWj8jM3QLn
+        Pgpm3v/6xOMhR5myIdvKlIWY8XgB5m6Bu/+992Ny0/c/f2JHyFGmbMi2MmUhZpwuwNwt8M4PSv66uR+U
+        nL0F7l8Tzr4qvsUflR1dgbvPR/lh6fkPgke/v3x1EX7c8o/Lj26BJ3/O/MGHc0KOMmVDtpUpCzHD+Pcs
+        fJRzQo4yZUO2lSkLMcP0D6x8kHNCjjJlQ7aVKQsxw/CPLH2Mc0KOMmVDtpUpCzHD7CfWPsQ5IUeZsiHb
+        ypSFmGF0LH6Ec0KOMmVDtpUpCzHD5E+sfoBzQo4yZUO2lSkLMcPgYbnPOSFHmbIh28qUhZhh7mfjV0Sz
+        JtudE3KUKRuyrUxZiBnGfskjJdPdzgk5ypQN2VamLMQMQ79Svglu9Jeo3Ctdgtv9NToPzl6C2/5FSo/s
+        mGXLPQvhnJCjTNmQbWXKQswwxsDsffD0Z39iMZwTcpQpG7KtTFmIGcYY+3ToX6dXoE84J+QoUzZkW5my
+        EDOM0adPOCfkKFM2ZFuZshAzjNGnTzgn5ChTNmRbmbIQM4zRp084J+QoUzZkW5myEDOM0adPOCfkKFM2
+        ZFuZshAzjNGnTzgn5ChTNmRbmbIQM4zRp084J+QoUzZkW5myEDOM0adPOCfkKFM2ZFuZshAzjNGnTzgn
+        5FiNGCFmGKNPn3BOyLEaMULMMEafPuGckGM1YoSYYYw+fcI5IcdqxAgxwxh9+oRzQo7ViBFihjH69Ann
+        hByrESPEDGP06RPOCTlWI0aIGcbo0yecE3KsRowQM4zRp084J+RYjRghZhijT59wTsixGjFCzDBGnz7h
+        nJBjNWKEmGGMPn3COSHHasQIMcMYffqEc0KO1YgRYoYx+vQJ54QcqxEjxAxj9OkTzgk5ViNGiBnG6NMn
+        nBNyrEaMEDOM0adPOCf8mr/ViBFihjH69AnnbJaYYYw+fcI5myVmGKNPn3DOZokZxujTJ5yzWWKGMfr0
+        CedslphhjD59wjmbJWYYo0+fcM5miRnG6NMnnLNZYoYx+vQJ52yWmGGMPn3COZslZhijT59wzmaJGcbo
+        0yecs1lihjH69AnnbJaYYYw+fcI5myVmGKNPn3DOZokZxujTZ7eM0afPbhmjT5/dMkafPrtljD59dssY
+        ffrsljH69NktY/Tps1vG6NNnt4zRp89uGaNPn90yRp8+u2WMPn12yxh9+uyWMfr02S1j9OmzU3d3/wco
+        4mLNnunMwgAAAABJRU5ErkJggigAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAA
+        AAAAQkJCAE1NTQB6enoA4ODgAPHv8AD19fUA+fn5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
+        //8AAAAAAAAAAAAAAAAABgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAAAAAAAAAAA
+        AAAABgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAAAAAAAAAAAAAAABgYGBgYGBgYG
+        BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAAAAAAAAAAAAAAABgYGAQEBAQEBAQEBAQEBAQEBAQEB
+        AQEBAQEBAQEBAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+        BgYGAAAAAAAAAAAAAAAABgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBgYGAAAAAAAAAAAA
+        AAAABgYGAQEBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUF
+        BQUFBQUFBQUFBQUFBQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUFBQUFBQUFBQUFBQUF
+        BQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEB
+        BgYGAAAAAAcGBgYGBgcABgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAABgYGBgYG
+        BgYGBgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAGBgYGBgYGBgYGBgYGAQEBBQUF
+        BQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAYGBgQDAQEBAwQGBgYGAQEBBQUFBQUFBQUFAQEBAQEB
+        BQUFBQUFBQUFAQEBBgYGBwYGBAIBAQEBAQIEBgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEB
+        BgYGBgYGAwEBAQEBAQEDBgYGAQEBBQUFAQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEBBgYGBgYGAQEBAQEB
+        AQEBAQEBAQEBBQUFAQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEBBgYGBgYEAQEBAQEBAQEBAQEBAQEBBQUF
+        AQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEBBgYGBgYGAQEBAQEBAQEBAQEBAQEBBQUFAQEBAQEBAQEBAQEB
+        AQEBAQEBBQUFAQEBBgYGBgYGAwEBAQEBAQEDBgYGAQEBBQUFAQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEB
+        BgYGBwYGBAIBAQEBAQIEBgYGAQEBBQUFAQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEBBgYGAAYGBgQDAQEB
+        AwQGBgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAGBgYGBgYGBgYGBgYGAQEBBQUF
+        BQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAABgYGBgYGBgYGBgYGAQEBBQUFBQUFBQUFAQEBAQEB
+        BQUFBQUFBQUFAQEBBgYGAAAAAAcGBgYGBgcABgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEB
+        BgYGAAAAAAAAAAAAAAAABgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAA
+        AAAABgYGAQEBBQUFBQUFBQUFAQEBAQEBBQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUF
+        BQUFBQUFBQUFBQUFBQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUFBQUFBQUFBQUFBQUF
+        BQUFBQUFBQUFAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAQEB
+        BgYGAAAAAAAAAAAAAAAABgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBgYGAAAAAAAAAAAA
+        AAAABgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBgYGAAAAAAAAAAAAAAAABgYGAQEBAQEB
+        AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBgYGAAAAAAAAAAAAAAAABgYGBgYGBgYGBgYGBgYGBgYBAQEG
+        BgYGBgYGBgYGBgYGBgYGAAAAAAAAAAAAAAAABgYGBgYGBgYGBgYGBgYGBgYBAQEGBgYGBgYGBgYGBgYG
+        BgYGAAAAAAAAAAAAAAAABgYGBgYGBgYGBgYGBgYGBgYBAQEGBgYGBgYGBgYGBgYGBgYGAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAABgYGBAMBAQEDBAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAHBgYEAgEBAQEBAgQGBgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYDAQEBAQEB
+        AQMGBgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYBAQEBAQEBAQEGBgYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgQBAQEBAQEBAQEGBgYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAGBgYBAQEBAQEBAQEGBgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAGBgYDAQEBAQEBAQMGBgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBgYEAgEBAQEB
+        AgQGBgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGBAMBAQEDBAYGBgAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgYGBgYGBgYGAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAABwYGBgYGBwAAAAAAAAAAAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/
+        8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAADwEAAAAAAAAOAAAAAA
+        AAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAOAAAAAAAAAA8BAAAAAAAAD/8AAAAAAAAP/wAAAA
+        AAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/
+        8AAAAAAAAP/wAAAAAAAA////AAf/AAD///4AA/8AAP///gAD/wAA///+AAP/AAD///4AA/8AAP///gAD
+        /wAA///+AAP/AAD///4AA/8AAP///wAH/wAA////gA//AAD////AH/8AAP///+A//wAAKAAAACAAAABA
+        AAAAAQAIAAAAAAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAABCQkIAb29vAOvr6wDx7/AA9vb2APn5+QAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAUFBQUFBQUFBQUFBQUFBQUF
+        BQUFBQUFBQAAAAAAAAAABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAAAAAAAAAAAFBQEBAQEBAQEBAQEB
+        AQEBAQEBAQEBBQUAAAAAAAAAAAUFAQEBAQEBAQEBAQEBAQEBAQEBAQEFBQAAAAAAAAAABQUBAQQEBAQE
+        BAQEBAQEBAQEBAQBAQUFAAAAAAAAAAAFBQEBBAQEBAQEBAQEBAQEBAQEBAEBBQUAAAAAAAAAAAUFAQEE
+        BAQEBAQBAQEBBAQEBAQEAQEFBQAABgUFBQUGBQUBAQQEBAQEBAEBAQEEBAQEBAQBAQUFAAUFBQUFBQUF
+        BQEBBAQEBAQEAQEBAQQEBAQEBAEBBQUGBQMCAQECAwUFAQEEBAQEBAQBAQEBBAQEBAQEAQEFBQUFAgEB
+        AQECBQUBAQQEAQEBAQEBAQEBAQEBBAQBAQUFBQUBAQEBAQEBAQEBBAQBAQEBAQEBAQEBAQEEBAEBBQUF
+        BQEBAQEBAQEBAQEEBAEBAQEBAQEBAQEBAQQEAQEFBQUFAgEBAQECBQUBAQQEAQEBAQEBAQEBAQEBBAQB
+        AQUFBgUDAgEBAgMFBQEBBAQEBAQEAQEBAQQEBAQEBAEBBQUABQUFBQUFBQUFAQEEBAQEBAQBAQEBBAQE
+        BAQEAQEFBQAABgUFBQUGBQUBAQQEBAQEBAEBAQEEBAQEBAQBAQUFAAAAAAAAAAAFBQEBBAQEBAQEAQEB
+        AQQEBAQEBAEBBQUAAAAAAAAAAAUFAQEEBAQEBAQEBAQEBAQEBAQEAQEFBQAAAAAAAAAABQUBAQQEBAQE
+        BAQEBAQEBAQEBAQBAQUFAAAAAAAAAAAFBQEBAQEBAQEBAQEBAQEBAQEBAQEBBQUAAAAAAAAAAAUFAQEB
+        AQEBAQEBAQEBAQEBAQEBAQEFBQAAAAAAAAAABQUFBQUFBQUFBQUBAQUFBQUFBQUFBQUFAAAAAAAAAAAF
+        BQUFBQUFBQUFBQEBBQUFBQUFBQUFBQUAAAAAAAAAAAAAAAAAAAAGBQMCAQECAwUGAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAUFAgEBAQECBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUBAQEBAQEFBQAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAFBQEBAQEBAQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFAgEBAQECBQUAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAABgUDAgEBAgMFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUFBQUFBQUA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgUFBQUGAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
+        AAAA/wAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAD/AAAA/wAAAP8AAAD/
+        AAAA/wAAAP8AAAD/AAAA//4Af//+AH///gB///4Af//+AH///gB///8A////gf8oAAAAEAAAACAAAAAB
+        AAgAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgBkZGQA8e/wAPb29gAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAEBAQEBAQEBAQEBAQAAAAABAEBAQEBAQEB
+        AQEEAAAAAAQBAwMDAwMDAwMBBAAEBAQEAQMDAwEBAwMDAQQEAgECBAEDAwMBAQMDAwEEBAEBAQEBAwEB
+        AQEBAQMBBAQCAQIEAQMBAQEBAQEDAQQABAQEBAEDAwMBAQMDAwEEAAAAAAQBAwMDAQEDAwMBBAAAAAAE
+        AQMDAwMDAwMDAQQAAAAABAEBAQEBAQEBAQEEAAAAAAQEBAQEBAEEBAQEBAAAAAAAAAAABAIBAgQAAAAA
+        AAAAAAAAAAQBAQEEAAAAAAAAAAAAAAAEAgECBAAAAAAAAAAAAAAAAAQEBAAAAADwAAAA8AAAAPAAAACA
+        AAAAAAAAAAAAAAAAAAAAgAAAAPAAAADwAAAA8AAAAPAAAAD/BwAA/wcAAP8HAAD/jwAAiVBORw0KGgoA
+        AAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZ
+        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
+        AmDEik+HBivW1CPQOIEKM8fxtz5zVPTq6ut3cq4CsIfsAbCVFeTTUJgagdelyJo90MChuukq4EkKVj+j
+        n9WfGcxA6LPCZ+qz2dsDE5pqAOxkxfqbtWvW1E1XAX9gTcU8aPYjCgjtzTffs6af0c/qz6jgGc0Hamo0
+        APaj4rbG2YZAJq0OAAB5EQCAYwQA4BgBADhGAACOEQCAY/s+F6Dr+v3+u7Bai/fnAiBOCc8FANBRBADg
+        GAEAOEYAAI4RAIBjBADgGAEAOEYAAI4RAIBjBADgGAEAOEYAAI4RAIBjBADgGAEAOMb9ABq+H8CJj06E
+        NXj0/I/nYa2e2PsBEAANBwAQgxuCAKiNAAAcIwAAxwgAwDECAHCMAAAcIwAAxwgAwDECAHCMAAAcIwAA
+        xwgAwDECAHCMAAAc43LgyMuBgZLRAwAcIwAAxwgAwDECAHCMAAAcIwAAxwgAwDECAHCMAAAcIwAAxwgA
+        wDECAHCMAAAcIwAAxwgAwK2q+j/fXtjPOQkOkgAAAABJRU5ErkJggigAAABAAAAAgAAAAAEAIAAAAAAA
+        AEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/bm1u/25tbv9ubW7/
+        bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/
+        bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9ubW7/bm1u/25tbv9CQkL/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2EPb29hAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29o/29vbP9vb2//b29v/29vb/9vb2//b29s/29vaP
+        9vb2IAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2j/b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vaA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAD29vYQ9vb2z/b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA
+        9vb2z/b29v/29vb/9vb2//b29v/29vb/9vb2/+vr6//r6+v/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/
+        9vb2//b29v8AAAAA9vb2j/b29v/29vb/9vb2//b29v/g4OD/hoaG/01NTf9CQkL/QkJC/01NTf+Ghob/
+        4ODg//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/
+        QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2IPb29v/29vb/9vb2//b29v/U1NT/TU1N/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/01NTf/U1NT/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29o/29vb/9vb2//b29v/g4OD/
+        TU1N/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/TU1N/+Dg4P/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vbP
+        9vb2//b29v/29vb/hoaG/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv+Ghob/
+        9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/01NTf9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P9CQkL/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2/01NTf9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/9vb2//b29s/29vb/9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/4aGhv/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/
+        8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vaP9vb2//b29v/29vb/4ODg/01NTf9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/01NTf/g4OD/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2IPb29v/29vb/
+        9vb2//b29v/U1NT/TU1N/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/01NTf/U1NT/9vb2//b29v/29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        9vb2/wAAAAD29vaP9vb2//b29v/29vb/9vb2/+Dg4P+Ghob/TU1N/0JCQv9CQkL/TU1N/4aGhv/g4OD/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAPb29s/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAD29vYQ9vb2z/b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA
+        AAAAAAAAAAD29vaP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29oD29vb/
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/
+        9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAPb29iD29vaP9vb2z/b29v/29vb/9vb2//b29v/29vbP
+        9vb2j/b29iAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/
+        QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        9vb2/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2gPb29v/29vb/9vb2//b29v/g4OD/hoaG/0JCQv9CQkL/QkJC/0JCQv+Ghob/
+        4ODg//b29v/29vb/9vb2//b29v/29vaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29v/29vb/9vb2//b29v/U1NT/TU1N/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/01NTf/U1NT/9vb2//b29v/29vb/9vb2//b29iAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29o/29vb/9vb2//b29v/g4OD/
+        TU1N/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/TU1N/+Dg4P/29vb/9vb2//b29v/29vaP
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vbP
+        9vb2//b29v/29vb/hoaG/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv+Ghob/
+        9vb2//b29v/29vb/9vb2zwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/01NTf9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/TU1N//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/9vb2/01NTf9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        TU1N//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAPb29s/29vb/9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/4aGhv/29vb/9vb2//b29v/29vbPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaP9vb2//b29v/29vb/4ODg/01NTf9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/01NTf/g4OD/9vb2//b29v/29vb/9vb2jwAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29v/29vb/
+        9vb2//b29v/U1NT/TU1N/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/01NTf/U1NT/9vb2//b29v/29vb/
+        9vb2//b29iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAD29vaP9vb2//b29v/29vb/9vb2/+Dg4P+Ghob/TU1N/0JCQv9CQkL/TU1N/4aGhv/g4OD/
+        9vb2//b29v/29vb/9vb2//b29o8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29s/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29s/29vYQAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAD29vaP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29o8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29iD29vaP9vb2z/b29v/29vb/9vb2//b29v/29vbP
+        9vb2j/b29iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+        AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+        //8AAAAAAAD/nwAAAAAAAPgBAAAAAAAA8AAAAAAAAADAAAAAAAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAPAAAAAAAAAA+AEAAAAAAAD//wAA
+        AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+        //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA/////gAAf//////8
+        AAA///////wAAD///////AAAP//////8AAA///////wAAD///////AAAP//////8AAA///////wAAD//
+        /////AAAP//////8AAA///////4AAH///////wAA////////AAD////////AA////////+AH//8oAAAA
+        MAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA7+/vEPb29o/z8/Pf
+        9vb2//b29v/29vb/8/Pz3/X19YDv7+8Q9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAD19fVQ
+        9vb27/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vbv9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        AAAAAPX19VD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/7+/vEPb29u/29vb/9vb2/+Dg4P96enr/QkJC/0JCQv9CQkL/enp6/+Dg4P/29vb/
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2j/b29v/29vb/4ODg/01NTf9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/01NTf/g4OD/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/8/Pz3/b29v/29vb/enp6/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv96enr/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        9vb2//b29v/g4OD/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/8/Pz3/b29v/29vb/enp6/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv96enr/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2j/b29v/29vb/4ODg/01NTf9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/01NTf/g4OD/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/7+/vEPb29u/29vb/
+        9vb2/+Dg4P96enr/QkJC/0JCQv9CQkL/enp6/+Dg4P/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        AAAAAPX19VD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/AAAAAAAAAAD19fVQ9vb27/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vbv
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA7+/vEPb29o/z8/Pf9vb2//b29v/29vb/
+        8/Pz3/b29o/v7+8Q9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q9vb27/b29v/29vb/4ODg/3p6ev9CQkL/QkJC/0JCQv96enr/
+        4ODg//b29v/29vb/9vb27+/v7xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaP9vb2//b29v/g4OD/TU1N/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/TU1N/+Dg4P/29vb/9vb2//X19YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/Pf9vb2//b29v96enr/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/3p6ev/29vb/9vb2//Pz898AAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/
+        9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAD29vb/9vb2/+Dg4P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/
+        9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/Pf9vb2//b29v96enr/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/3p6ev/29vb/9vb2//Pz898AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaP9vb2//b29v/g4OD/
+        TU1N/0JCQv9CQkL/QkJC/0JCQv9CQkL/TU1N/+Dg4P/29vb/9vb2//b29o8AAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q
+        9vb27/b29v/29vb/4ODg/3p6ev9CQkL/QkJC/0JCQv96enr/4ODg//b29v/29vb/9vb27+/v7xAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9fX1UPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9fX1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19VD29vbv9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29u/19fVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q9vb2j/Pz89/29vb/
+        9vb2//b29v/z8/Pf9vb2j+/v7xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA
+        //AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAADgAAAAAAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAACAAAAAAAAAAMAAAAAAAAAA4AAAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAA
+        AAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA
+        ///+AAP/AAD///4AA/8AAP///gAD/wAA///+AAP/AAD///4AA/8AAP///gAD/wAA///+AAP/AAD///4A
+        A/8AAP///gAD/wAA////AAf/AAD///+AD/8AAP///8Af/wAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/9vb2//b29v8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv/29vb/
+        9vb2/wAAAAAAAAAAAAAAAAAAAADv7+8Q7+/vEAAAAAAAAAAA9vb2//b29v9CQkL/QkJC//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/
+        QkJC//b29v/29vb/AAAAAAAAAAD19fWA9vb27/b29v/29vb/9vb27/X19YD29vb/9vb2/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w/0JCQv9CQkL/9vb2//b29v8AAAAA9vb2z/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv/29vb/9vb2//X19YD29vb/6+vr/29vb/9CQkL/QkJC/29vb//r6+v/
+        9vb2//b29v9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC//b29v/29vb/9vb27/b29v9vb2//QkJC/0JCQv9CQkL/
+        QkJC/29vb//29vb/9vb2/0JCQv9CQkL/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P9CQkL/QkJC//b29v/29vb/
+        9vb27/b29v9vb2//QkJC/0JCQv9CQkL/QkJC/29vb//29vb/9vb2/0JCQv9CQkL/8e/w//Hv8P9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w/0JCQv9CQkL/
+        9vb2//b29v/19fWA9vb2/+vr6/9vb2//QkJC/0JCQv9vb2//6+vr//b29v/29vb/QkJC/0JCQv/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        QkJC/0JCQv/29vb/9vb2/wAAAAD29vbP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/
+        QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P9CQkL/QkJC//b29v/29vb/AAAAAAAAAAD19fWA9vb27/b29v/29vb/9vb27/X19YD29vb/
+        9vb2/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv9CQkL/QkJC//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAPb29v/29vb/QkJC/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC/0JCQv9CQkL/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv9CQkL/9vb2//b29v8AAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19YD29vb/6+vr/29vb/9CQkL/QkJC/29vb//r6+v/
+        9vb2//X19YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb27/b29v9vb2//QkJC/0JCQv9CQkL/
+        QkJC/29vb//29vb/9vb27wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        9vb27/b29v9vb2//QkJC/0JCQv9CQkL/QkJC/29vb//29vb/9vb27wAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAD19fWA9vb2/+vr6/9vb2//QkJC/0JCQv9vb2//6+vr//b29v/19fWAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAD29vbP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2zwAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWA9vb27/b29v/29vb/9vb27/X19YAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAA
+        wAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
+        /wAAAP8AAAD//gB///4Af//+AH///gB///4Af//+AH///wD///+B/ygAAAAQAAAAIAAAAAEAIAAAAAAA
+        QAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/
+        9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAD29vb/QkJC//Hv8P/x7/D/
+        8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/QkJC//b29v/39/dA9vb27/b29v/29vbv9vb2/0JCQv/x7/D/
+        8e/w//Hv8P9CQkL/QkJC//Hv8P/x7/D/8e/w/0JCQv/29vb/9vb272RkZP9CQkL/ZGRk//b29v9CQkL/
+        8e/w//Hv8P/x7/D/QkJC/0JCQv/x7/D/8e/w//Hv8P9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/
+        QkJC//Hv8P9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/x7/D/QkJC//b29v/29vbvZGRk/0JCQv9kZGT/
+        9vb2/0JCQv/x7/D/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/8e/w/0JCQv/29vb/9fX1UPb29u/29vb/
+        9vb27/b29v9CQkL/8e/w//Hv8P/x7/D/QkJC/0JCQv/x7/D/8e/w//Hv8P9CQkL/9vb2/wAAAAAAAAAA
+        AAAAAAAAAAD29vb/QkJC//Hv8P/x7/D/8e/w/0JCQv9CQkL/8e/w//Hv8P/x7/D/QkJC//b29v8AAAAA
+        AAAAAAAAAAAAAAAA9vb2/0JCQv/x7/D/8e/w//Hv8P/x7/D/8e/w//Hv8P/x7/D/8e/w/0JCQv/29vb/
+        AAAAAAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/9vb2//b29v/29vb/
+        9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29u9kZGT/QkJC/2RkZP/29vbv
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv9CQkL/
+        9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb272RkZP9CQkL/
+        ZGRk//b29u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19VD29vbv
+        9vb2//b29u/39/dAAAAAAAAAAAAAAAAA8AAAAPAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAA
+        8AAAAPAAAADwAAAA/wcAAP8HAAD/BwAA/wcAAA==
+</value>
+  </data>
+</root>

+ 58 - 0
UAS_DXFORM/LogManager.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace UAS_DXFORM
+{
+    class LogManager
+    {
+        public static string LogAddress = SystemInf.LogFolder;
+        /// <summary>
+        /// 记录操作
+        /// </summary>
+        /// <param name="Message"></param>
+        public static void DoLog(string Message)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + Message + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+
+        /// <summary>
+        /// 记录操作
+        /// </summary>
+        /// <param name="Message"></param>
+        public static void DoLog(List<String> Message,string info)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + info + "\n");
+                foreach (string mes in Message)
+                {
+                    sw.WriteLine(mes + "\n");
+                }
+                //int T = Message.Count;
+                //for (int i = 0; i < T; i++)
+                //{
+                //    sw.WriteLine(Message[i].ToString() + "\n");
+                //}
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+     
+    }
+}

+ 32 - 0
UAS_DXFORM/LogStringBuilder.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_DXFORM
+{
+    class LogStringBuilder
+    {
+        StringBuilder sql;
+
+        public LogStringBuilder()
+        {
+            sql = new StringBuilder();
+        }
+
+        public void Append(string str)
+        {
+            sql.Append(str);
+        }
+
+        public void Clear()
+        {
+            sql.Clear();
+        }
+
+        public string GetString()
+        {
+            return sql.ToString();
+        }
+    }
+}

+ 45 - 0
UAS_DXFORM/Program.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Principal;
+using System.Windows.Forms;
+
+namespace UAS_DXFORM
+{
+    static class Program
+    {
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            WindowsIdentity identity = WindowsIdentity.GetCurrent();
+            WindowsPrincipal principal = new WindowsPrincipal(identity);
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+
+            if (!Directory.Exists(SystemInf.LogFolder))
+                Directory.CreateDirectory(SystemInf.LogFolder);
+            FileStream fs = new FileStream(SystemInf.LogFolder + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
+            fs.Close();
+            if (principal.IsInRole(WindowsBuiltInRole.Administrator))
+                Application.Run(new Form1());
+            else
+            {
+                //创建启动对象
+                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
+                // 设置运行文件
+                startInfo.FileName = Application.ExecutablePath;
+                //设置启动动作,确保以管理员身份运行
+                startInfo.Verb = "runas";
+                //如果不是管理员,则启动UAC
+                System.Diagnostics.Process.Start(startInfo);
+            }
+
+
+         //   Application.Run(new Form1());
+        }
+    }
+}

+ 36 - 0
UAS_DXFORM/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("UAS_DXFORM")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HP Inc.")]
+[assembly: AssemblyProduct("UAS_DXFORM")]
+[assembly: AssemblyCopyright("Copyright © HP Inc. 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+//将 ComVisible 设置为 false 将使此程序集中的类型
+//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("ed5cc2f5-6115-44ce-bb82-116f4bfe7672")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 71 - 0
UAS_DXFORM/Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本: 4.0.30319.42000
+//
+//     对此文件的更改可能导致不正确的行为,如果
+//     重新生成代码,则所做更改将丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace UAS_DXFORM.Properties
+{
+
+
+    /// <summary>
+    ///   强类型资源类,用于查找本地化字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.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()
+        {
+        }
+
+        /// <summary>
+        ///   返回此类使用的缓存 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UAS_DXFORM.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   覆盖当前线程的 CurrentUICulture 属性
+        ///   使用此强类型的资源类的资源查找。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
UAS_DXFORM/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 30 - 0
UAS_DXFORM/Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace UAS_DXFORM.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
UAS_DXFORM/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 71 - 0
UAS_DXFORM/SystemInf.cs

@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_DXFORM
+{
+    class SystemInf
+    {
+        /// <summary>
+        /// 连接字符串,用户登录的时候选择了数据库之后会使用该字符串作为连接字符串
+        /// </summary>
+        public static string ConnectionString;
+        /// <summary>
+        /// 用户登录的时间
+        /// </summary>
+        public static string LoginTime;
+        /// <summary>
+        /// 当前的连接数据库
+        /// </summary>
+        public static string CurrentDB;
+        /// <summary>
+        ///  配置文件默认的数据库
+        /// </summary>
+        public static string DefaultDB;
+        /// <summary>
+        /// 屏幕的宽度
+        /// </summary>
+        public static int ScreenWidth;
+        /// <summary>
+        /// 屏幕的高度
+        /// </summary>
+        public static int ScreenHeight;
+        /// <summary>
+        /// 当前岗位资源对应的Caller
+        /// </summary>
+        public static Dictionary<string, Dictionary<string, bool>> Caller = new Dictionary<string, Dictionary<string, bool>>();
+        /// <summary>
+        /// 打开的串口的名称
+        /// </summary>
+        public static List<string> OpenPort = new List<string>();
+        /// <summary>
+        /// 检测音频是否可用
+        /// </summary>
+        public static bool CheckAudioEnable = true;
+        /// <summary>
+        /// 导航宽度
+        /// </summary>
+        public static int NavWidth = 0;
+        /// <summary>
+        /// HeadBar的高度
+        /// </summary>
+        public static int HeadBarHeight = 0;
+        /// <summary>
+        /// 当前程序进程ID
+        /// </summary>
+        public static int ProcessesID;
+        /// <summary>
+        /// 是否允许打印程序
+        /// </summary>
+        public static bool EnablePrint;
+        /// <summary>
+        /// 日志文件的缓存路径
+        /// </summary>
+        public static string LogFolder = Environment.GetEnvironmentVariable("windir").Substring(0, 1) + @":\UAS_DXMES\Log\";
+
+
+        public static bool UpperCollection = true;
+
+    }
+}

+ 110 - 0
UAS_DXFORM/UAS_DXFORM.csproj

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{ED5CC2F5-6115-44CE-BB82-116F4BFE7672}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>UAS_DXFORM</RootNamespace>
+    <AssemblyName>UAS_DXFORM</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationIcon>object.ico</ApplicationIcon>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Oracle.ManagedDataAccess">
+      <HintPath>..\PLCDataReader\Tool\Oracle.ManagedDataAccess.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.Entity" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Printing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DataHelper.cs" />
+    <Compile Include="DBHandler.cs" />
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LogManager.cs" />
+    <Compile Include="LogStringBuilder.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SystemInf.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="object.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

BIN
UAS_DXFORM/object.ico


+ 0 - 174
UAS_MES_NEW/Form1.cs

@@ -1,174 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Drawing;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading;
-using System.Windows.Forms;
-using UAS_MES_NEW.DataOperate;
-using UAS_MES_NEW.PublicForm;
-using UAS_MES_NEW.PublicMethod;
-
-namespace UAS_MES_NEW
-{
-    public partial class Form1 : Form
-    {
-        DataHelper datahelper;
-        DataTable dt = new DataTable();
-
-
-        public List<string> GetList()
-        {
-            List<string> list = new List<string>()
-            {
-                "Janurary","February", "March" ,"April ","May","June","July","August" ,
-                "September", "October", "November", "December","张三","张三丰","小张","丰田太郎",
-                "三林油田","李四张三","张冠李戴",
-                "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"
-            };
-            return list;
-        }
-        public Form1()
-        {
-            InitializeComponent();
-            datahelper = new DataHelper();
-            dt = (DataTable)datahelper.ExecuteSql("select id form loginfo","slect");
-            BindingSource bs = new BindingSource();
-            bs.DataSource = dt;
-            dataNavigator1.DataSource = bs;
-
-
-          
-
-        }
-
-
-
-        private void Form1_Load(object sender, EventArgs e)
-        {
-            //Com.PortName = "COM4";
-            //Com.ReadTimeout = 5000;
-            //Com.WriteTimeout = 5000;
-            //Com.BaudRate = 9600;
-            //Com.StopBits = StopBits.One;
-            //Com.Parity = Parity.None;
-            foreach (var item in GetList())
-            {
-                mruEdit1.Properties.Items.Add(item);
-            }
-            int i = 3 << 1;
-
-            Console.WriteLine(i+"");
-
-       
-
-        }
-
-        [DllImport("WinIo64.dll")]
-        public static extern bool InitializeWinIo();
-        [DllImport("WinIo64.dll")]
-        public static extern void ShutdownWinIo();
-        [DllImport("WinIo64.dll")]
-        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
-        [DllImport("WinIo64.dll")]
-        public static extern bool SetPortVal(IntPtr wPortAddr, int dwPortVal, byte bSize);
-        //以下是与并口无关  
-        [DllImport("WinIo64.dll")]
-        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
-        [DllImport("WinIo64.dll")]
-        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
-        [DllImport("WinIo64.dll")]
-        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
-        [DllImport("WinIo64.dll")]
-        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
-        [DllImport("user32.dll")]
-        public static extern int MapVirtualKey(uint Ucode, uint uMapType);
-        [DllImport("user32.dll", EntryPoint = "FindWindow")]
-        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
-        [DllImport("user32.dll")]
-        static extern IntPtr GetActiveWindow();
-        [DllImport("user32.dll", EntryPoint = "GetWindowText")]
-        public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpSting, int nMaxCount);
-        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
-        public static extern IntPtr GetForegroundWindow();
-        public bool online = false;                          //WinIo打开标志  
-        //数据端口共8位,控制端口共4位,可以组成1~12位的任意数字输出端口;  
-        //状态端口共5位,控制端口共4位,可以组成1~9位的任意数字输入端口  
-        private static IntPtr data_port = (IntPtr)0x378;     //数据端口地址 D0-D7 8个端口  
-        private static IntPtr state_port = (IntPtr)0x379;    //状态端口地址 S3-S7 只能读取5位  
-        private static IntPtr control_port = (IntPtr)0x37A;  //控制端口地址 C0-C3 只能控制或输出4位  
-
-        ModeBusTCPServer md;
-        private void button3_Click_1(object sender, EventArgs e)
-        {
-            //md = new ModeBusTCPServer();
-            //md.Open();
-            //txtMsg.AppendText("SUCCESS");
-            //int a =  GetHashCode();
-            //MessageBox.Show(a.ToString());
-            //string password = Encryption.EncryptStr("hcsy");
-            //MessageBox.Show(password);
-
-            //string really = Encryption.DecryptStr(password);
-            //MessageBox.Show(really);
-            //byte[] date = new byte[] { 1, 2, 3, 4, 5 };
-            //string aaa = Encoding.ASCII.GetString(date);
-            //Console.WriteLine(aaa);
-            SetCheck st = new SetCheck("OK", Color.Green);
-            BaseUtil.SetFormCenter(st);
-            st.ShowDialog();
-        }
-
-        private void button4_Click(object sender, EventArgs e)
-        {
-            //md.SendOrder(enterTextBox2.Text);
-        }
-
-        private void timer1_Tick(object sender, EventArgs e)
-        {
-            //char[] s = new char[] { };
-            //IntPtr st = GetForegroundWindow();
-            //StringBuilder sb = new StringBuilder(512);
-            //GetWindowText(st, sb, sb.Capacity);
-            //if (sb.ToString() != this.FindForm().Name) {
-            //    //SendKeys.Send("~");
-            //    Console.WriteLine(sb.ToString());
-            //}
-        }
-
-        private void tabNavigationPage2_Paint(object sender, PaintEventArgs e)
-        {
-
-        }
-
-        private void dataNavigator1_Click(object sender, EventArgs e)
-        {
-           
-        }
-
-        private void dataNavigator1_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
-        {
-            //下一页  
-            if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.NextPage)
-            {
-                Console.WriteLine("A");
-            }
-            //上一页  
-            if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.PrevPage)
-            {
-                Console.WriteLine("B");
-            }
-            //首页  
-            if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Next)
-            {
-                Console.WriteLine("C");
-            }
-            //尾页  
-            if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Prev)
-            {
-                Console.WriteLine("D");
-            }
-        }
-    }
-}

+ 93 - 239
UAS_MES_WEIP/Form1.Designer.cs

@@ -29,34 +29,16 @@
         private void InitializeComponent()
         {
             this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
             this.button1 = new System.Windows.Forms.Button();
             this.button2 = new System.Windows.Forms.Button();
-            this.button3 = new System.Windows.Forms.Button();
-            this.button4 = new System.Windows.Forms.Button();
-            this.txtMsg = new System.Windows.Forms.RichTextBox();
-            this.txtIP = new System.Windows.Forms.TextBox();
-            this.txtPORT = new System.Windows.Forms.TextBox();
-            this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
-            this.checkEdit1 = new DevExpress.XtraEditors.CheckEdit();
-            this.calcEdit1 = new DevExpress.XtraEditors.CalcEdit();
-            this.memoEdit1 = new DevExpress.XtraEditors.MemoEdit();
             this.timer1 = new System.Windows.Forms.Timer(this.components);
-            this.tabPane1 = new DevExpress.XtraBars.Navigation.TabPane();
-            this.tabNavigationPage2 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
-            this.tabNavigationPage1 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
-            this.dataNavigator1 = new DevExpress.XtraEditors.DataNavigator();
-            this.sqlDataSource1 = new DevExpress.DataAccess.Sql.SqlDataSource(this.components);
-            this.mruEdit1 = new DevExpress.XtraEditors.MRUEdit();
-            this.enterTextBox2 = new UAS_MES_NEW.CustomControl.TextBoxWithIcon.EnterTextBox();
-            this.cameraControl1 = new DevExpress.XtraEditors.Camera.CameraControl();
-            this.pictureEdit1 = new DevExpress.XtraEditors.PictureEdit();
-            ((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.calcEdit1.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.memoEdit1.Properties)).BeginInit();
-            this.tabPane1.SuspendLayout();
-            this.tabNavigationPage1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.mruEdit1.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).BeginInit();
+            this.pr_code = new UAS_MES_NEW.CustomControl.TextBoxWithIcon.SearchTextBox();
+            this.normalButton2 = new UAS_MES_NEW.CustomControl.ButtonUtil.NormalButton();
+            this.normalButton3 = new UAS_MES_NEW.CustomControl.ButtonUtil.NormalButton();
+            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.valueLabel1 = new UAS_MES_NEW.CustomControl.ValueLabel.ValueLabel();
             this.SuspendLayout();
             // 
             // button1
@@ -79,217 +61,101 @@
             this.button2.Text = "button2";
             this.button2.UseVisualStyleBackColor = true;
             // 
-            // button3
-            // 
-            this.button3.Location = new System.Drawing.Point(386, 128);
-            this.button3.Name = "button3";
-            this.button3.Size = new System.Drawing.Size(75, 23);
-            this.button3.TabIndex = 0;
-            this.button3.Text = "OPEN";
-            this.button3.UseVisualStyleBackColor = true;
-            this.button3.Click += new System.EventHandler(this.button3_Click_1);
-            // 
-            // button4
-            // 
-            this.button4.Location = new System.Drawing.Point(102, 46);
-            this.button4.Name = "button4";
-            this.button4.Size = new System.Drawing.Size(75, 23);
-            this.button4.TabIndex = 2;
-            this.button4.Text = "Send";
-            this.button4.UseVisualStyleBackColor = true;
-            this.button4.Click += new System.EventHandler(this.button4_Click);
-            // 
-            // txtMsg
-            // 
-            this.txtMsg.Location = new System.Drawing.Point(161, 108);
-            this.txtMsg.Margin = new System.Windows.Forms.Padding(2);
-            this.txtMsg.Name = "txtMsg";
-            this.txtMsg.Size = new System.Drawing.Size(213, 129);
-            this.txtMsg.TabIndex = 7;
-            this.txtMsg.Text = "";
-            // 
-            // txtIP
-            // 
-            this.txtIP.Location = new System.Drawing.Point(271, 259);
-            this.txtIP.Margin = new System.Windows.Forms.Padding(2);
-            this.txtIP.Name = "txtIP";
-            this.txtIP.Size = new System.Drawing.Size(103, 21);
-            this.txtIP.TabIndex = 8;
-            this.txtIP.Text = "127.0.0.1";
-            // 
-            // txtPORT
-            // 
-            this.txtPORT.Location = new System.Drawing.Point(455, 216);
-            this.txtPORT.Margin = new System.Windows.Forms.Padding(2);
-            this.txtPORT.Name = "txtPORT";
-            this.txtPORT.Size = new System.Drawing.Size(76, 21);
-            this.txtPORT.TabIndex = 9;
-            this.txtPORT.Text = "8080";
-            // 
-            // labelControl1
-            // 
-            this.labelControl1.Location = new System.Drawing.Point(112, 137);
-            this.labelControl1.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Flat;
-            this.labelControl1.Name = "labelControl1";
-            this.labelControl1.Size = new System.Drawing.Size(13, 14);
-            this.labelControl1.TabIndex = 12;
-            this.labelControl1.Text = "aq";
-            // 
-            // checkEdit1
-            // 
-            this.checkEdit1.Location = new System.Drawing.Point(190, 42);
-            this.checkEdit1.Name = "checkEdit1";
-            this.checkEdit1.Properties.Caption = "checkEdit1";
-            this.checkEdit1.Size = new System.Drawing.Size(75, 19);
-            this.checkEdit1.TabIndex = 13;
-            // 
-            // calcEdit1
-            // 
-            this.calcEdit1.Location = new System.Drawing.Point(410, 41);
-            this.calcEdit1.Name = "calcEdit1";
-            this.calcEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.calcEdit1.Size = new System.Drawing.Size(100, 20);
-            this.calcEdit1.TabIndex = 14;
-            this.calcEdit1.ToolTip = "aasq";
-            // 
-            // memoEdit1
-            // 
-            this.memoEdit1.Location = new System.Drawing.Point(613, 28);
-            this.memoEdit1.Name = "memoEdit1";
-            this.memoEdit1.Size = new System.Drawing.Size(100, 96);
-            this.memoEdit1.TabIndex = 15;
-            // 
             // timer1
             // 
             this.timer1.Enabled = true;
             this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
             // 
-            // tabPane1
-            // 
-            this.tabPane1.Controls.Add(this.tabNavigationPage2);
-            this.tabPane1.Controls.Add(this.tabNavigationPage1);
-            this.tabPane1.Location = new System.Drawing.Point(25, 307);
-            this.tabPane1.Name = "tabPane1";
-            this.tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] {
-            this.tabNavigationPage2,
-            this.tabNavigationPage1});
-            this.tabPane1.RegularSize = new System.Drawing.Size(300, 150);
-            this.tabPane1.SelectedPage = this.tabNavigationPage2;
-            this.tabPane1.SelectedPageIndex = 0;
-            this.tabPane1.Size = new System.Drawing.Size(300, 150);
-            this.tabPane1.TabIndex = 16;
-            this.tabPane1.Text = "tabPane1";
-            // 
-            // tabNavigationPage2
-            // 
-            this.tabNavigationPage2.Caption = "tabNavigationPage2";
-            this.tabNavigationPage2.Name = "tabNavigationPage2";
-            this.tabNavigationPage2.PageText = "yyf";
-            this.tabNavigationPage2.Size = new System.Drawing.Size(282, 104);
-            this.tabNavigationPage2.Paint += new System.Windows.Forms.PaintEventHandler(this.tabNavigationPage2_Paint);
-            // 
-            // tabNavigationPage1
-            // 
-            this.tabNavigationPage1.Caption = "tabNavigationPage1";
-            this.tabNavigationPage1.Controls.Add(this.button4);
-            this.tabNavigationPage1.Name = "tabNavigationPage1";
-            this.tabNavigationPage1.Size = new System.Drawing.Size(282, 104);
-            // 
-            // dataNavigator1
-            // 
-            this.dataNavigator1.Buttons.First.Hint = "AAA";
-            this.dataNavigator1.Buttons.First.ImageIndex = 0;
-            this.dataNavigator1.Buttons.Last.ImageIndex = 5;
-            this.dataNavigator1.Buttons.Next.ImageIndex = 3;
-            this.dataNavigator1.Buttons.NextPage.ImageIndex = 4;
-            this.dataNavigator1.Buttons.Prev.ImageIndex = 2;
-            this.dataNavigator1.Buttons.PrevPage.ImageIndex = 1;
-            this.dataNavigator1.Location = new System.Drawing.Point(356, 345);
-            this.dataNavigator1.Name = "dataNavigator1";
-            this.dataNavigator1.Size = new System.Drawing.Size(251, 20);
-            this.dataNavigator1.TabIndex = 18;
-            this.dataNavigator1.Text = "dataNavigator1";
-            this.dataNavigator1.TextLocation = DevExpress.XtraEditors.NavigatorButtonsTextLocation.End;
-            this.dataNavigator1.ButtonClick += new DevExpress.XtraEditors.NavigatorButtonClickEventHandler(this.dataNavigator1_ButtonClick);
-            this.dataNavigator1.Click += new System.EventHandler(this.dataNavigator1_Click);
-            // 
-            // sqlDataSource1
-            // 
-            this.sqlDataSource1.Name = "sqlDataSource1";
-            // 
-            // mruEdit1
-            // 
-            this.mruEdit1.Location = new System.Drawing.Point(575, 429);
-            this.mruEdit1.Name = "mruEdit1";
-            this.mruEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.mruEdit1.Properties.ShowDropDown = DevExpress.XtraEditors.Controls.ShowDropDown.DoubleClick;
-            this.mruEdit1.Size = new System.Drawing.Size(100, 20);
-            this.mruEdit1.TabIndex = 19;
-            // 
-            // enterTextBox2
-            // 
-            this.enterTextBox2.AllPower = null;
-            this.enterTextBox2.BackColor = System.Drawing.Color.White;
-            this.enterTextBox2.ID = null;
-            this.enterTextBox2.Location = new System.Drawing.Point(565, 216);
-            this.enterTextBox2.Margin = new System.Windows.Forms.Padding(2);
-            this.enterTextBox2.Name = "enterTextBox2";
-            this.enterTextBox2.Power = null;
-            this.enterTextBox2.Size = new System.Drawing.Size(148, 21);
-            this.enterTextBox2.Str = null;
-            this.enterTextBox2.Str1 = null;
-            this.enterTextBox2.Str2 = null;
-            this.enterTextBox2.TabIndex = 10;
-            // 
-            // cameraControl1
-            // 
-            this.cameraControl1.Location = new System.Drawing.Point(668, 284);
-            this.cameraControl1.Name = "cameraControl1";
-            this.cameraControl1.Size = new System.Drawing.Size(223, 130);
-            this.cameraControl1.TabIndex = 20;
-            this.cameraControl1.Text = "cameraControl1";
-            // 
-            // pictureEdit1
-            // 
-            this.pictureEdit1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
-            this.pictureEdit1.Location = new System.Drawing.Point(745, 108);
-            this.pictureEdit1.Name = "pictureEdit1";
-            this.pictureEdit1.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.Always;
-            this.pictureEdit1.Size = new System.Drawing.Size(100, 96);
-            this.pictureEdit1.TabIndex = 21;
+            // pr_code
+            // 
+            this.pr_code.AllPower = null;
+            this.pr_code.Caller = null;
+            this.pr_code.Condition = null;
+            this.pr_code.DBTitle = "产品编号查询";
+            this.pr_code.FormName = null;
+            this.pr_code.Location = new System.Drawing.Point(82, 39);
+            this.pr_code.Name = "pr_code";
+            this.pr_code.Power = null;
+            this.pr_code.ReturnData = null;
+            this.pr_code.SelectField = null;
+            this.pr_code.SetValueField = null;
+            this.pr_code.Size = new System.Drawing.Size(160, 21);
+            this.pr_code.TabIndex = 160;
+            this.pr_code.TableName = null;
+            this.pr_code.Tag = "pr_code";
+            this.pr_code.TextBoxEnable = true;
+            // 
+            // normalButton2
+            // 
+            this.normalButton2.AllPower = null;
+            this.normalButton2.BackColor = System.Drawing.Color.Transparent;
+            this.normalButton2.DownImage = ((System.Drawing.Image)(resources.GetObject("normalButton2.DownImage")));
+            this.normalButton2.Image = null;
+            this.normalButton2.IsShowBorder = true;
+            this.normalButton2.Location = new System.Drawing.Point(82, 99);
+            this.normalButton2.MoveImage = ((System.Drawing.Image)(resources.GetObject("normalButton2.MoveImage")));
+            this.normalButton2.Name = "normalButton2";
+            this.normalButton2.NormalImage = ((System.Drawing.Image)(resources.GetObject("normalButton2.NormalImage")));
+            this.normalButton2.Power = null;
+            this.normalButton2.Size = new System.Drawing.Size(75, 28);
+            this.normalButton2.TabIndex = 161;
+            this.normalButton2.Text = "导入座标图";
+            this.normalButton2.UseVisualStyleBackColor = false;
+            // 
+            // normalButton3
+            // 
+            this.normalButton3.AllPower = null;
+            this.normalButton3.BackColor = System.Drawing.Color.Transparent;
+            this.normalButton3.DownImage = ((System.Drawing.Image)(resources.GetObject("normalButton3.DownImage")));
+            this.normalButton3.Image = null;
+            this.normalButton3.IsShowBorder = true;
+            this.normalButton3.Location = new System.Drawing.Point(82, 153);
+            this.normalButton3.MoveImage = ((System.Drawing.Image)(resources.GetObject("normalButton3.MoveImage")));
+            this.normalButton3.Name = "normalButton3";
+            this.normalButton3.NormalImage = ((System.Drawing.Image)(resources.GetObject("normalButton3.NormalImage")));
+            this.normalButton3.Power = null;
+            this.normalButton3.Size = new System.Drawing.Size(75, 28);
+            this.normalButton3.TabIndex = 162;
+            this.normalButton3.Text = "确认生成";
+            this.normalButton3.UseVisualStyleBackColor = false;
+            // 
+            // openFileDialog1
+            // 
+            this.openFileDialog1.FileName = "openFileDialog1";
+            this.openFileDialog1.Filter = "(*.xls)|*.xls";
+            // 
+            // textBox1
+            // 
+            this.textBox1.Location = new System.Drawing.Point(252, 104);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Size = new System.Drawing.Size(276, 21);
+            this.textBox1.TabIndex = 163;
+            // 
+            // valueLabel1
+            // 
+            this.valueLabel1.AutoSize = true;
+            this.valueLabel1.CutLength = null;
+            this.valueLabel1.Location = new System.Drawing.Point(177, 107);
+            this.valueLabel1.MaximumSize = new System.Drawing.Size(200, 0);
+            this.valueLabel1.Name = "valueLabel1";
+            this.valueLabel1.Size = new System.Drawing.Size(65, 12);
+            this.valueLabel1.TabIndex = 164;
+            this.valueLabel1.Text = "座标图路径";
             // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(929, 590);
-            this.Controls.Add(this.pictureEdit1);
-            this.Controls.Add(this.cameraControl1);
-            this.Controls.Add(this.mruEdit1);
-            this.Controls.Add(this.dataNavigator1);
-            this.Controls.Add(this.button3);
-            this.Controls.Add(this.tabPane1);
-            this.Controls.Add(this.memoEdit1);
-            this.Controls.Add(this.calcEdit1);
-            this.Controls.Add(this.checkEdit1);
-            this.Controls.Add(this.labelControl1);
-            this.Controls.Add(this.enterTextBox2);
-            this.Controls.Add(this.txtPORT);
-            this.Controls.Add(this.txtIP);
-            this.Controls.Add(this.txtMsg);
+            this.Controls.Add(this.valueLabel1);
+            this.Controls.Add(this.textBox1);
+            this.Controls.Add(this.normalButton3);
+            this.Controls.Add(this.normalButton2);
+            this.Controls.Add(this.pr_code);
             this.Name = "Form1";
             this.Tag = "123123";
             this.Text = "jieshu";
             this.Load += new System.EventHandler(this.Form1_Load);
-            ((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.calcEdit1.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.memoEdit1.Properties)).EndInit();
-            this.tabPane1.ResumeLayout(false);
-            this.tabNavigationPage1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.mruEdit1.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).EndInit();
             this.ResumeLayout(false);
             this.PerformLayout();
 
@@ -302,24 +168,12 @@
         private CustomControl.ButtonUtil.NormalButton normalButton1;
         private CustomControl.TextBoxWithIcon.EnterTextBox enterTextBox1;
         private CustomControl.SetLoading.LoadingCircle loadingCircle1;
-        private System.Windows.Forms.Button button3;
-        private System.Windows.Forms.Button button4;
-        private System.Windows.Forms.RichTextBox txtMsg;
-        private System.Windows.Forms.TextBox txtIP;
-        private System.Windows.Forms.TextBox txtPORT;
-        private CustomControl.TextBoxWithIcon.EnterTextBox enterTextBox2;
-        private DevExpress.XtraEditors.LabelControl labelControl1;
-        private DevExpress.XtraEditors.CheckEdit checkEdit1;
-        private DevExpress.XtraEditors.CalcEdit calcEdit1;
-        private DevExpress.XtraEditors.MemoEdit memoEdit1;
         private System.Windows.Forms.Timer timer1;
-        private DevExpress.XtraBars.Navigation.TabPane tabPane1;
-        private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage1;
-        private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage2;
-        private DevExpress.XtraEditors.DataNavigator dataNavigator1;
-        private DevExpress.DataAccess.Sql.SqlDataSource sqlDataSource1;
-        private DevExpress.XtraEditors.MRUEdit mruEdit1;
-        private DevExpress.XtraEditors.Camera.CameraControl cameraControl1;
-        private DevExpress.XtraEditors.PictureEdit pictureEdit1;
+        private CustomControl.TextBoxWithIcon.SearchTextBox pr_code;
+        private CustomControl.ButtonUtil.NormalButton normalButton2;
+        private CustomControl.ButtonUtil.NormalButton normalButton3;
+        private System.Windows.Forms.OpenFileDialog openFileDialog1;
+        private System.Windows.Forms.TextBox textBox1;
+        private CustomControl.ValueLabel.ValueLabel valueLabel1;
     }
 }

+ 13 - 67
UAS_MES_WEIP/Form1.cs

@@ -14,37 +14,17 @@ namespace UAS_MES_NEW
 {
     public partial class Form1 : Form
     {
-        DataHelper datahelper;
+        DataHelper dh;
         DataTable dt = new DataTable();
+        DataTable dbfind;
 
 
-        public List<string> GetList()
+        private void Pr_code_DbChange(object sender, EventArgs e)
         {
-            List<string> list = new List<string>()
-            {
-                "Janurary","February", "March" ,"April ","May","June","July","August" ,
-                "September", "October", "November", "December","张三","张三丰","小张","丰田太郎",
-                "三林油田","李四张三","张冠李戴",
-                "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"
-            };
-            return list;
-        }
-        public Form1()
-        {
-            InitializeComponent();
-            datahelper = new DataHelper();
-            dt = (DataTable)datahelper.ExecuteSql("select id form loginfo","slect");
-            BindingSource bs = new BindingSource();
-            bs.DataSource = dt;
-            dataNavigator1.DataSource = bs;
-
-
-          
-
+            dbfind = pr_code.ReturnData;
+            BaseUtil.SetFormValue(this.Controls, dbfind);
         }
 
-
-
         private void Form1_Load(object sender, EventArgs e)
         {
             //Com.PortName = "COM4";
@@ -53,53 +33,19 @@ namespace UAS_MES_NEW
             //Com.BaudRate = 9600;
             //Com.StopBits = StopBits.One;
             //Com.Parity = Parity.None;
-            foreach (var item in GetList())
-            {
-                mruEdit1.Properties.Items.Add(item);
-            }
-            int i = 3 << 1;
 
-            Console.WriteLine(i+"");
+            dh = new DataHelper();
+            pr_code.FormName = Name;
+            pr_code.SetValueField = new string[] { "pr_code" };
+            pr_code.TableName = "product";
+            pr_code.SelectField = "pr_code # 物料编号,pr_detail # 物料名称,pr_kind # 物料种类,pr_spec # 物料规格";
+            pr_code.DbChange += Pr_code_DbChange;
+
 
-       
 
         }
 
-        [DllImport("WinIo64.dll")]
-        public static extern bool InitializeWinIo();
-        [DllImport("WinIo64.dll")]
-        public static extern void ShutdownWinIo();
-        [DllImport("WinIo64.dll")]
-        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
-        [DllImport("WinIo64.dll")]
-        public static extern bool SetPortVal(IntPtr wPortAddr, int dwPortVal, byte bSize);
-        //以下是与并口无关  
-        [DllImport("WinIo64.dll")]
-        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
-        [DllImport("WinIo64.dll")]
-        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
-        [DllImport("WinIo64.dll")]
-        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
-        [DllImport("WinIo64.dll")]
-        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
-        [DllImport("user32.dll")]
-        public static extern int MapVirtualKey(uint Ucode, uint uMapType);
-        [DllImport("user32.dll", EntryPoint = "FindWindow")]
-        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
-        [DllImport("user32.dll")]
-        static extern IntPtr GetActiveWindow();
-        [DllImport("user32.dll", EntryPoint = "GetWindowText")]
-        public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpSting, int nMaxCount);
-        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
-        public static extern IntPtr GetForegroundWindow();
-        public bool online = false;                          //WinIo打开标志  
-        //数据端口共8位,控制端口共4位,可以组成1~12位的任意数字输出端口;  
-        //状态端口共5位,控制端口共4位,可以组成1~9位的任意数字输入端口  
-        private static IntPtr data_port = (IntPtr)0x378;     //数据端口地址 D0-D7 8个端口  
-        private static IntPtr state_port = (IntPtr)0x379;    //状态端口地址 S3-S7 只能读取5位  
-        private static IntPtr control_port = (IntPtr)0x37A;  //控制端口地址 C0-C3 只能控制或输出4位  
-
-        ModeBusTCPServer md;
+      
         private void button3_Click_1(object sender, EventArgs e)
         {
             //md = new ModeBusTCPServer();

+ 78 - 1
UAS_MES_WEIP/Form1.resx

@@ -120,7 +120,84 @@
   <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <metadata name="sqlDataSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="normalButton2.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFcSURBVFhH5di7UsJAFMbxtDT6QMI76IAFT0npIE0K
+        GcRORxHklpAIBHLfbILV8XxeNsMznJ35F5vu+82kWYuILD4N7oq75roCw27sb/x5WBdc27btntY64o/i
+        DnZjPxy4S6A0R6PHO1WUNHc9ep4uxIXd2D8eP/XZowWUThBG+n3p0stsKbbJ0qFDFFfscQuUbpzm9Pqx
+        Eh8c4PGLkuX0Nl+LDw4GJckUTRaO+OBQo+SKpitXfHAwKClfZuuN+OBgUDJV0NzxxAeHM5TFxhffGUpe
+        aFp5n+KDg0FRfHH8nfjgUKPoktztXnxwMCgFX7xdID441ChlRf7+ID44GBTNl21wFB8capSqot0xFB8c
+        /lE6Wa70IU5oH0Ziw/5cFebpoPUwHPbL04nCJKUgisWF3dgPB3gABc9v7fvBoBcnaVKdvkha2I39cPjx
+        oPrhusndcPinpIXd2N8gIusbTaFspKtR2SQAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="normalButton2.MoveImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFzSURBVFhH5djNSgJRGMZxL2P2gTfQFbZvHSEZFBEW
+        CEIQBEIgVFiS9qXWoDmp4/fHzDmjM2a+vU/QqUVX0DvwXxxn9fwYXJwYEcXWNzIWt83dcq7AsBv7LXgA
+        ZI0r71/aaqjCJf8o7sFu7IcDFwdK4vimrv1oSZXRnArdQFzYjf3pQkOzRxIoVWc6X5X6M7ruBGIr9mbU
+        9MIVe9hAcXvBO125WnxwgMcXSpcPF20tPjgYlI5eUK6lxAcHg9Lmw3nTFx8cDEpLLSjr+OKDg0FpqojO
+        Gp744GBQ3vyITutT8cHBoDheRCe1ifjgYFBe+ZCxJ+KDg0GpT0NKv4zFBweDUpuEdFQdiQ8OBsXmw2Fl
+        JD44/KCM53TwNBQfHAzKMx/2Hgfig8M3SrXYUasUfz67DwOxYf9dV5urg+RWzta4aEnxn83OfV9c2I39
+        cIAHUOJceTNbUfmW94GX0sJu7IcDPH5fXCe4EvfXxe5/D7ux3yKi2CfkPhTy27lqkwAAAABJRU5ErkJg
+        gg==
+</value>
+  </data>
+  <data name="normalButton2.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGVSURBVFhH5di7agJRFIXhDSKoYBQEC8FCECwEQRBE
+        4uUVEtTiPKVlom2wttM6IfF+15njXHRnL19jD/zFmanWV8zAEDNTp9OJS6/Sm2QUht3YH4cHtdvtF6k7
+        mUwG1tqd3FR3YTf2w0FKUVOu6XT68Xgw3+8PtWH/bDYbCkeLGo1Gz/d9JwzvrL0gCKx49KlerxtIBUGo
+        PjjAg2q1mqDc2fN99cEBHlStVk0oB+t56oMDPKhSqZggDNm1N/XBAR5ULpeNvGD46rrqgwM8qFQqGV8O
+        56ujPjjAg4rFosFL5ni5qA8O8KBCoWBuns/701l9cIAH5fN5QfF4dzipDw7woFwuZ+zN483+oD44wIOy
+        2azB52i13asPDvCgTCZjHGt5sdmqDw7woHQ6bRzX8ny1UR8c4EHJZNJc5fC7XKsPDvCgRCLR2x9Pzt9q
+        zT+Lpdqw/3A6W/HoUywWa32Nx8OL4zwffM8X6sJu7IcDPCgajaak7udoNNjsdgc81BZ2Yz8c4PH8cR2J
+        ROJSU3qXjMKwG/vjzEz/skOI3Zqgv7AAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="normalButton3.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFcSURBVFhH5di7UsJAFMbxtDT6QMI76IAFT0npIE0K
+        GcRORxHklpAIBHLfbILV8XxeNsMznJ35F5vu+82kWYuILD4N7oq75roCw27sb/x5WBdc27btntY64o/i
+        DnZjPxy4S6A0R6PHO1WUNHc9ep4uxIXd2D8eP/XZowWUThBG+n3p0stsKbbJ0qFDFFfscQuUbpzm9Pqx
+        Eh8c4PGLkuX0Nl+LDw4GJckUTRaO+OBQo+SKpitXfHAwKClfZuuN+OBgUDJV0NzxxAeHM5TFxhffGUpe
+        aFp5n+KDg0FRfHH8nfjgUKPoktztXnxwMCgFX7xdID441ChlRf7+ID44GBTNl21wFB8capSqot0xFB8c
+        /lE6Wa70IU5oH0Ziw/5cFebpoPUwHPbL04nCJKUgisWF3dgPB3gABc9v7fvBoBcnaVKdvkha2I39cPjx
+        oPrhusndcPinpIXd2N8gIusbTaFspKtR2SQAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="normalButton3.MoveImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFzSURBVFhH5djNSgJRGMZxL2P2gTfQFbZvHSEZFBEW
+        CEIQBEIgVFiS9qXWoDmp4/fHzDmjM2a+vU/QqUVX0DvwXxxn9fwYXJwYEcXWNzIWt83dcq7AsBv7LXgA
+        ZI0r71/aaqjCJf8o7sFu7IcDFwdK4vimrv1oSZXRnArdQFzYjf3pQkOzRxIoVWc6X5X6M7ruBGIr9mbU
+        9MIVe9hAcXvBO125WnxwgMcXSpcPF20tPjgYlI5eUK6lxAcHg9Lmw3nTFx8cDEpLLSjr+OKDg0FpqojO
+        Gp744GBQ3vyITutT8cHBoDheRCe1ifjgYFBe+ZCxJ+KDg0GpT0NKv4zFBweDUpuEdFQdiQ8OBsXmw2Fl
+        JD44/KCM53TwNBQfHAzKMx/2Hgfig8M3SrXYUasUfz67DwOxYf9dV5urg+RWzta4aEnxn83OfV9c2I39
+        cIAHUOJceTNbUfmW94GX0sJu7IcDPH5fXCe4EvfXxe5/D7ux3yKi2CfkPhTy27lqkwAAAABJRU5ErkJg
+        gg==
+</value>
+  </data>
+  <data name="normalButton3.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAEUAAAAWCAYAAACWl1FwAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGVSURBVFhH5di7agJRFIXhDSKoYBQEC8FCECwEQRBE
+        4uUVEtTiPKVlom2wttM6IfF+15njXHRnL19jD/zFmanWV8zAEDNTp9OJS6/Sm2QUht3YH4cHtdvtF6k7
+        mUwG1tqd3FR3YTf2w0FKUVOu6XT68Xgw3+8PtWH/bDYbCkeLGo1Gz/d9JwzvrL0gCKx49KlerxtIBUGo
+        PjjAg2q1mqDc2fN99cEBHlStVk0oB+t56oMDPKhSqZggDNm1N/XBAR5ULpeNvGD46rrqgwM8qFQqGV8O
+        56ujPjjAg4rFosFL5ni5qA8O8KBCoWBuns/701l9cIAH5fN5QfF4dzipDw7woFwuZ+zN483+oD44wIOy
+        2azB52i13asPDvCgTCZjHGt5sdmqDw7woHQ6bRzX8ny1UR8c4EHJZNJc5fC7XKsPDvCgRCLR2x9Pzt9q
+        zT+Lpdqw/3A6W/HoUywWa32Nx8OL4zwffM8X6sJu7IcDPCgajaak7udoNNjsdgc81BZ2Yz8c4PH8cR2J
+        ROJSU3qXjMKwG/vjzEz/skOI3Zqgv7AAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>107, 17</value>
   </metadata>
 </root>

+ 25 - 0
UAS_Web/Browser.cs

@@ -39,6 +39,7 @@ namespace UAS_Web
             webBrowser.LoadError += WebBrowser_LoadError;
             webBrowser.FrameLoadEnd += FrameLoadEnd;
             webBrowser.FrameLoadStart += WebBrowser_FrameLoadStart;
+            webBrowser.KeyboardHandler = new CEFKeyBoardHander();
         }
 
         private void WebBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
@@ -113,5 +114,29 @@ namespace UAS_Web
                 webBrowser.Load(textBox1.Text);
             }
         }
+
+    }
+
+    public class CEFKeyBoardHander : IKeyboardHandler
+    {
+        public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
+        {
+            if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
+            {
+                var key = (Keys)windowsKeyCode;
+                switch (key)
+                {
+                    case Keys.F12:
+                        browser.ShowDevTools();
+                        break;
+                }
+            }
+            return false;
+        }
+
+        public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
+        {
+            return false;
+        }
     }
 }