|
@@ -288,407 +288,408 @@ namespace OASystem.API.Controllers
|
|
|
return Ok(JsonView(view));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- [HttpPost("UpdateUserDataOldOAToNewOA")]
|
|
|
- [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
|
|
|
- public async Task<IActionResult> UpdateUserDataOldOAToNewOA()
|
|
|
- {
|
|
|
- dynamic view = null;
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- var _sqlSuar = _loginRep._sqlSugar;
|
|
|
-
|
|
|
- var oldOaUsersData = await _sqlSuar.Queryable<OA2014UsersView>().AS("OA2014.dbo.Users").ToListAsync();
|
|
|
- var newOaCompanyData = await _sqlSuar.Queryable<Sys_Company>().ToListAsync();
|
|
|
- var newOaDepartmentData = await _sqlSuar.Queryable<Sys_Department>().ToListAsync();
|
|
|
- var newOaJobPostData = await _sqlSuar.Queryable<Sys_JobPost>().ToListAsync();
|
|
|
- List<Sys_Users> newOaUserDatas = new List<Sys_Users>();
|
|
|
-
|
|
|
- foreach (var oldUser in oldOaUsersData)
|
|
|
- {
|
|
|
- int depId = 0, postId = 0;
|
|
|
- #region 处理部门岗位
|
|
|
-
|
|
|
- int did = oldUser.Did;
|
|
|
- string post = oldUser.Post;
|
|
|
- switch (did)
|
|
|
- {
|
|
|
- case 1 :
|
|
|
- depId = 2;
|
|
|
- if (post.Equals("信息部经理")) postId = 4;
|
|
|
- else if (post.Equals("美工")) { depId = 5; postId = 18; }
|
|
|
- else if(post.Equals("网络推广")) postId = 46;
|
|
|
- else if (post.Equals("软件开发")) postId = 5;
|
|
|
- else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
|
|
|
- else if (post.Equals("平面设计")) { depId = 5; postId = 18; }
|
|
|
- else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
|
|
|
- else if (post.Equals("软件工程师")) postId = 5;
|
|
|
- else if (post.Equals("OP操作")) { depId = 7; postId = 28; }
|
|
|
- else if (post.Equals("软件工程师.")) postId = 5;
|
|
|
- else if (post.Equals(".net工程师")) postId = 5;
|
|
|
- else if (post.Equals("安卓开发工程师")) postId = 7;
|
|
|
- else if (post.Equals("web前端")) postId = 6;
|
|
|
- else if (post.Equals("Web后端开发")) postId = 5;
|
|
|
- break;
|
|
|
- case 2 :
|
|
|
- depId=3;
|
|
|
- if (post.Equals("主管")) postId = 47;
|
|
|
- else if (post.Equals("财务总监")) { postId = 9; }
|
|
|
- else if (post.Equals("会计")) { postId = 10; }
|
|
|
- else if (post.Equals("财务经理")) { postId = 47; }
|
|
|
- else if (post.Equals("财务助理")) { postId = 50; }
|
|
|
- else if (post.Equals("出纳")) { postId = 48; }
|
|
|
- else { postId = 10; }
|
|
|
-
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- depId = 4;
|
|
|
- if (post.Equals("主管")) postId = 51;
|
|
|
- else if (post.Equals("人事部主管")) { postId = 51; }
|
|
|
- else if (post.Equals("人事行政主管")) { postId = 51; }
|
|
|
- else if (post.Equals("行政人事助理")) { postId = 52; }
|
|
|
- else if (post.Equals("人事助理")) { postId = 52; }
|
|
|
- else if (post.Equals("人事主管")) { postId = 51; }
|
|
|
- else if (post.Equals("行政人事专员")) { postId = 12; }
|
|
|
- else if (post.Equals("行政司机")) { postId = 14; }
|
|
|
- else if (post.Equals("司机")) { postId = 14; }
|
|
|
- else if (post.Equals("统筹执行")) { postId = 12; }
|
|
|
- else if (post.Equals("培训专员")) { postId = 13; }
|
|
|
- else if (post.Equals("人事经理")) { postId = 11; }
|
|
|
- else if (post.Equals("前台")) { postId = 33; }
|
|
|
- else if (post.Equals("人事行政经理")) { postId = 11; }
|
|
|
- else if (post.Equals("人事部经理")) { postId = 11; }
|
|
|
- else if (post.Equals("人事专员")) { postId = 12; }
|
|
|
- else if (post.Equals("人事经理")) { postId = 11; }
|
|
|
- else postId = 12;
|
|
|
-
|
|
|
- break;
|
|
|
- case 4:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 7;
|
|
|
- if (post.Equals("酒店")) postId = 25;
|
|
|
- else if (post.Equals("经理")) { postId = 32; }
|
|
|
- else if (post.Equals("OP专员")) { postId = 28; }
|
|
|
- else if (post.Equals("酒店预订")) { postId = 25; }
|
|
|
- else if (post.Equals("商务邀请")) { postId = 27; }
|
|
|
- else if (post.Equals("-")) { postId = 0; }
|
|
|
- else if (post.Equals("签证专员")) { postId = 26; }
|
|
|
- else if (post.Equals("OP操作")) { postId = 28; }
|
|
|
- else if (post.Equals("司机")) { postId = 14; }
|
|
|
- else if (post.Equals("国际交流部经理")) { postId = 32; }
|
|
|
- else if (post.Equals("机票酒店")) { postId = 24; }
|
|
|
- else if (post.Equals("签证")) { postId = 26; }
|
|
|
- else if (post.Equals("票房")) { postId = 24; }
|
|
|
- else if (post.Equals("票务专员")) { postId = 24; }
|
|
|
- else if (post.Equals("酒店/机票")) { postId = 24; }
|
|
|
- else if (post.Equals("OP")) { postId = 28; }
|
|
|
- else if (post.Equals("主管")) { postId = 22; }
|
|
|
- else if (post.Equals("订票专员")) { postId = 24; }
|
|
|
- else if (post.Equals("机票")) { postId = 24; }
|
|
|
- else if (post.Equals("国交部经理")) { postId = 32; }
|
|
|
- else if (post.Equals("计调")) { postId = 23; }
|
|
|
- else if (post.Equals("票务")) { postId = 24; }
|
|
|
- else if (post.Equals("国交部主管")) { postId = 22; }
|
|
|
- else if (post.Equals("暂无")) { postId = 22; }
|
|
|
- else if (post.Equals("初级OP")) { postId = 28; }
|
|
|
- else if (post.Equals("计调")) { postId = 23; }
|
|
|
- else { postId = 0; }
|
|
|
- break;
|
|
|
- case 5:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 5;
|
|
|
- if (post.Equals("-")) postId = 16;
|
|
|
- break;
|
|
|
- case 6:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 6;
|
|
|
- if (post.Equals("主管")) postId = 53;
|
|
|
- else if (post.Equals("-")) postId = 21;
|
|
|
- else if (post.Equals("销售总监")) postId = 53;
|
|
|
- else if (post.Equals("市场专员")) postId = 21;
|
|
|
- else if (post.Equals("销售专员")) postId = 54;
|
|
|
- else if (post.Equals("市场助理")) postId = 55;
|
|
|
- else if (post.Equals("销售")) postId = 54;
|
|
|
- break;
|
|
|
- case 99:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 1;
|
|
|
- if (post.Equals("总经理")) postId = 1;
|
|
|
- else if (post.Equals("副总")) postId = 2;
|
|
|
- break;
|
|
|
- case 107:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 5;
|
|
|
- if (post.Equals("销售")) postId = 56;
|
|
|
- else if (post.Equals("策划执行")) postId = 16;
|
|
|
- else if (post.Equals("策活动划")) postId = 16;
|
|
|
- else if (post.Equals("活动执行")) postId = 17;
|
|
|
- else if (post.Equals("网络媒介推广")) postId = 46;
|
|
|
- else if (post.Equals("媒介主任")) postId = 46;
|
|
|
- else if (post.Equals("公关部经理")) postId = 15;
|
|
|
- else if (post.Equals("项目执行")) postId = 17;
|
|
|
- else if (post.Equals("市场推广")) postId = 57;
|
|
|
- else if (post.Equals("策划")) postId = 16;
|
|
|
- else if (post.Equals("3D设计师")) postId = 19;
|
|
|
- else if (post.Equals("平面设计")) postId = 18;
|
|
|
- else if (post.Equals("设计")) postId = 18;
|
|
|
- else if (post.Equals("活动策划")) postId = 16;
|
|
|
- else if (post.Equals("活动策划执行")) postId = 17;
|
|
|
- else if (post.Equals("高级活动策划")) postId = 16;
|
|
|
- else postId = 0;
|
|
|
- break;
|
|
|
- case 115:
|
|
|
- if (post.Equals("系统管理员")) { depId = 9; postId = 31; }
|
|
|
- else if (post.Equals("后勤专员")) { depId = 5; postId = 58; }
|
|
|
-
|
|
|
- break;
|
|
|
- case 287:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 17;
|
|
|
- if (post.Equals("会展部经理")) postId = 59;
|
|
|
- else if (post.Equals("会展专员")) postId = 61;
|
|
|
- else if (post.Equals("会展销售")) postId = 62;
|
|
|
- else if (post.Equals("招商招展")) postId = 63;
|
|
|
- else if (post.Equals("会展部主管")) postId = 60;
|
|
|
- else if (post.Equals("媒介专员")) postId = 65;
|
|
|
- else if (post.Equals("会展策划")) postId = 63;
|
|
|
- else if (post.Equals("招商专员")) postId = 64;
|
|
|
- else postId = 61;
|
|
|
- break;
|
|
|
- case 304:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 1;
|
|
|
- postId = 3;
|
|
|
- break;
|
|
|
- case 323:
|
|
|
-
|
|
|
- depId = 19;
|
|
|
- postId = 66;
|
|
|
- break;
|
|
|
- case 335:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- depId = 5;
|
|
|
- if (post.Equals("会展专员")) { depId = 17; postId = 61; }
|
|
|
- else if (post.Equals("策划执行")) postId = 16;
|
|
|
- else if (post.Equals("策划主管")) postId = 67;
|
|
|
- else if (post.Equals("策划")) postId = 16;
|
|
|
- else if (post.Equals("文案")) postId = 16;
|
|
|
- else if (post.Equals("策划执行")) postId = 17;
|
|
|
- else if (post.Equals("执行专员 ")) postId = 17;
|
|
|
- break;
|
|
|
- case 761:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (post.Equals("销售主管")) { depId = 6; postId = 20; }
|
|
|
- else if (post.Equals("场站经理")) { depId = 6; postId = 53; }
|
|
|
- else if (post.Equals("暂无")) { depId = 5; postId = 58; }
|
|
|
- else
|
|
|
- {
|
|
|
- if (oldUser.CnName.Equals("许婷"))
|
|
|
- {
|
|
|
- depId = 5; postId = 16;
|
|
|
- }
|
|
|
- else if (oldUser.CnName.Equals("陈雪"))
|
|
|
- {
|
|
|
- depId = 5; postId = 17;
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- #endregion
|
|
|
-
|
|
|
- string idCrad = string.Empty;
|
|
|
- string idCradNumber = string.Empty;
|
|
|
- DateTime? birthday = null;
|
|
|
- if (!string.IsNullOrEmpty(oldUser.IDCard))
|
|
|
- {
|
|
|
- idCrad = oldUser.IDCard.Trim();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- #region 处理身份证Number 出生日期
|
|
|
- if (idCrad.ValidateIdNumber())
|
|
|
- {
|
|
|
- idCradNumber = idCrad.ToString();
|
|
|
- string birthDate = idCrad.Substring(6, 8);
|
|
|
- birthday = new DateTime(int.Parse(birthDate.Substring(0, 4)), int.Parse(birthDate.Substring(4, 2)), int.Parse(birthDate.Substring(6, 2)));
|
|
|
-
|
|
|
- }
|
|
|
- #endregion
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- DateTime? startWorkDate = null;
|
|
|
- #region 判断是否是日期格式的字符串
|
|
|
- string format = "yyyy-MM-dd";
|
|
|
- DateTime date;
|
|
|
- bool isParsed = DateTime.TryParseExact(oldUser.StartWorkDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
|
|
|
-
|
|
|
- if (isParsed)
|
|
|
- {
|
|
|
- startWorkDate = date;
|
|
|
- }
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
- int education = 0;
|
|
|
- #region 处理学历
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(oldUser.Education))
|
|
|
- {
|
|
|
-
|
|
|
- if (oldUser.Education.Equals("本科")) education = 5;
|
|
|
- else if (oldUser.Education.Equals("大学专科")) education = 4;
|
|
|
- else if (oldUser.Education.Equals("大专")) education = 4;
|
|
|
- else if (oldUser.Education.Equals("全日制本科")) education = 5;
|
|
|
- else if (oldUser.Education.Equals("硕士")) education = 6;
|
|
|
- else if (oldUser.Education.Equals("硕士研究生")) education = 6;
|
|
|
- else if (oldUser.Education.Equals("学士")) education = 6;
|
|
|
- else if (oldUser.Education.Equals("研究生")) education = 6;
|
|
|
- else if (oldUser.Education.Equals("专科")) education = 4;
|
|
|
- }
|
|
|
- #endregion
|
|
|
-
|
|
|
- int theOrAdultEducation = 0;
|
|
|
- #region 处理统招/成人
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(oldUser.TheOrAdultEducation))
|
|
|
- {
|
|
|
-
|
|
|
- if (oldUser.TheOrAdultEducation.Equals("成教")) theOrAdultEducation = 1;
|
|
|
- if (oldUser.TheOrAdultEducation.Equals("自考")) theOrAdultEducation = 1;
|
|
|
- else if (oldUser.TheOrAdultEducation.Equals("统招")) theOrAdultEducation = 2;
|
|
|
- else if (oldUser.TheOrAdultEducation.Equals("留学")) theOrAdultEducation = 3;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
- Sys_Users user = new Sys_Users()
|
|
|
- {
|
|
|
- Id = oldUser.Id,
|
|
|
- CnName = oldUser.CnName,
|
|
|
- EnName = oldUser.EnName,
|
|
|
- Number = oldUser.Number,
|
|
|
- CompanyId = 2,
|
|
|
- DepId = depId,
|
|
|
- JobPostId = postId,
|
|
|
- Password = oldUser.Password,
|
|
|
- Sex = oldUser.Sex,
|
|
|
- Ext = oldUser.Ext,
|
|
|
- Phone = oldUser.Phone,
|
|
|
- UrgentPhone = oldUser.UrgentPhone,
|
|
|
- Email = oldUser.Email,
|
|
|
- Address = oldUser.Address,
|
|
|
- Edate = oldUser.Edate,
|
|
|
- Rdate = oldUser.Rdate,
|
|
|
- Seniority = oldUser.Seniority,
|
|
|
- Birthday = birthday,
|
|
|
- IDCard = idCradNumber,
|
|
|
- StartWorkDate = startWorkDate,
|
|
|
- GraduateInstitutions = oldUser.GraduateInstitutions,
|
|
|
- Professional = oldUser.Professional,
|
|
|
- Education = education,
|
|
|
- TheOrAdultEducation = theOrAdultEducation,
|
|
|
- MaritalStatus = oldUser.MaritalStatus,
|
|
|
- HomeAddress = oldUser.HomeAddress,
|
|
|
- UsePeriod = oldUser.UsePeriod,
|
|
|
- WorkExperience = oldUser.WorkExperience,
|
|
|
- Certificate = oldUser.Certificate,
|
|
|
- HrAudit = 1,
|
|
|
- CreateUserId = 208,
|
|
|
- CreateTime = DateTime.Now,
|
|
|
- DeleteUserId = null,
|
|
|
- DeleteTime = string.Empty,
|
|
|
- Remark = oldUser.Remark,
|
|
|
- IsDel = oldUser.IsDel,
|
|
|
- };
|
|
|
-
|
|
|
- newOaUserDatas.Add(user);
|
|
|
- }
|
|
|
-
|
|
|
- if (newOaUserDatas.Count > 0)
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
- bool resetStatus = _sqlSuar.DbMaintenance.TruncateTable<Sys_Users>();
|
|
|
-
|
|
|
-
|
|
|
- int addTotal = await _sqlSuar.Insertable(newOaUserDatas).IgnoreColumns(it => it.Id).ExecuteCommandAsync();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- view = new
|
|
|
- {
|
|
|
- Code = 200,
|
|
|
- Msg = "操作成功!",
|
|
|
- Data = newOaUserDatas
|
|
|
-
|
|
|
- };
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
-
|
|
|
- view = new
|
|
|
- {
|
|
|
- Code = 400,
|
|
|
- Msg = ex.Message
|
|
|
-
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- return Ok(JsonView(view));
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|