public IActionResult RateVolunteer(RateVolunteerViewModel vm) { if (!ModelState.IsValid) { return(View(vm)); } var voe = _db.VolunteersOnEvent .Include(ve => ve.Event) .FirstOrDefault(ve => ve.VolunteerOnEventId == vm.VolunteerOnEventId); if (voe == null) { return(BadRequest(ErrorMessagesProvider.VolunteerOnEventErrors.VolunteerOnEventNotExists)); } if (!voe.Event.CanModify()) { return(BadRequest()); } voe.OpinionAboutVolunteer = vm.RateContent; _db.VolunteersOnEvent.Update(voe); _db.SaveChanges(); return(RedirectToAction("PastEventDetails", new { eventId = voe.EventId })); }
public IActionResult PersonalData(UserViewModel vm) { if (!ModelState.IsValid) { return(View(vm)); } var volunteer = LoggedUser as Volunteer; volunteer.Update(vm.PhoneNumber, vm.City, vm.Street, vm.BuildingNumber, vm.ApartmentNumber, vm.PostalCode); _db.AppUsers.Update(volunteer); _db.SaveChanges(); return(RedirectToAction()); }
public ActionResult Delete(string path) { var nodeId = NodeHelper.GetNodeIdFromPath(path); var imageName = NodeHelper.GetNameFromPath(path); var m = db.Media.SingleOrDefault(e => e.NaviNode_Id == nodeId && e.Title.Equals(imageName, StringComparison.InvariantCultureIgnoreCase)); if (m != null) { db.Media.Remove(m); db.SaveChanges(); } return(Json(new { status = "success" })); }
private void AddLanguageIfNotExists(ApplicationLanguage language) { if (_context.Languages.Any(l => l.TenantId == language.TenantId && l.Name == language.Name)) { return; } _context.Languages.Add(language); _context.SaveChanges(); }
protected void Delete_Container(object sender, EventArgs e) { var ContainerID = Int32.Parse(containerid.Value); var db = new CMSDbContext(); IQueryable <ContainerData> query = db.ContainerDataList; query = query.Where(p => p.ContainerID == ContainerID); if (query.Count() != 0) { db.Entry(query.First()).State = EntityState.Deleted; db.SaveChanges(); Response.Redirect("ListContainer"); } }
protected void Add_Container(object sender, EventArgs e) { var ContainerData = new ContainerData { Type = typeid.Value, LotNumber = lotnumberid.Value, Size = sizeid.Value, UsedSize = usedsizeid.Value, Status = statusid.Value, }; var db = new CMSDbContext(); db.ContainerDataList.Add(ContainerData); db.SaveChanges(); Response.Redirect("ListContainer"); }
protected void Update_Container(object sender, EventArgs e) { var ContainerData = new ContainerData { ContainerID = Int32.Parse(containerid.Value), Type = typeid.Value, LotNumber = lotnumberid.Value, Size = sizeid.Value, UsedSize = usedsizeid.Value, Status = statusid.Value, }; var db = new CMSDbContext(); db.Entry(ContainerData).State = EntityState.Modified; db.SaveChanges(); Response.Redirect("ListContainer"); }
public IActionResult AddVolunteerToEvent(int eventId) { var choosenEvent = _db.Events.Find(eventId); if (choosenEvent == null) { return(BadRequest(ErrorMessagesProvider.EventErrors.EventNotExists)); } if (!User.IsInRole(Roles.VolunteerRole)) { return(BadRequest(ErrorMessagesProvider.EventErrors.OnlyVolunteerCanTakePartInEvent)); } if (choosenEvent.Date <= DateTime.Today) { return(BadRequest(ErrorMessagesProvider.EventErrors.EventDatePassed)); } var volunteerToAdd = LoggedUser as Volunteer; if (volunteerToAdd.Points < choosenEvent.RequiredPoints) { return(BadRequest(ErrorMessagesProvider.EventErrors.NotEnoughPoints)); } choosenEvent.AddVolunteerToEvent(volunteerToAdd); _db.Events.Update(choosenEvent); _db.SaveChanges(); string referrer = Request.Headers["Referer"].ToString(); if (referrer.Contains("EventDetails")) { return(RedirectToAction("EventDetails", new { eventId = eventId })); } return(RedirectToAction("Index")); }
/// <inheritdoc/> public void CommitChanges() { dbContext.SaveChanges(); }
public IActionResult CreateEvent(EventViewModel vm) { if (!ModelState.IsValid) { return(View(vm)); } if (vm.Date < DateTime.Now) { ModelState.AddModelError("Date", "Data wydarzenia musi być przyszła"); return(View(vm)); } var address = new Address ( vm.City, vm.Street, vm.BuildingNumber, vm.ApartmentNumber, vm.PostalCode ); var existingAddress = _db.Addresses.FirstOrDefault(a => a.City == address.City && a.Street == address.Street && a.BuildingNumber == address.BuildingNumber && a.ApartmentNumber == address.ApartmentNumber && a.PostalCode == address.PostalCode ); if (existingAddress != null) { address.AddressId = existingAddress.AddressId; } var eventToAdd = new Event ( vm.Name, vm.Date, vm.Description, vm.RequiredPoints, vm.Tags, LoggedUser as Organizer, address ); _db.Events.Add(eventToAdd); _db.SaveChanges(); string relativePath = string.Empty; if (vm.FormFile == null) { relativePath = _formFilesManagement.GetPathToRandomStockImage(); } else { relativePath = _formFilesManagement.SaveFileToFileSystem(vm.FormFile, eventToAdd.EventId); } eventToAdd.ImageRelativePath = relativePath; _db.SaveChanges(); return(RedirectToAction("EventsList", "OrganizerPanel")); }
public void GenerateTestData(string person1Id, string person2Id, string person3Id, string person4Id) { var person1 = peopleService.GetById(person1Id); var person2 = peopleService.GetById(person2Id); var person3 = peopleService.GetById(person3Id); var person4 = peopleService.GetById(person4Id); // create courses var programmingCourse = new Course("Programming", person1); var geographyCourse = new Course("Geography", person2); dbContext.Courses.Add(programmingCourse); dbContext.Courses.Add(geographyCourse); // create tests var geographyTestQuestions = new List <TestQuestion>() { new TestQuestion(1, $"What's the capital city of Germany?", "Berlin", 3, QuestionType.TextAnswer), new TestQuestion(2, $"Which of these cities are located in Czechia? {acd}A{ltd}Praha{acd}B{ltd}Brno{acd}C{ltd}Vienna", "A,B", 6, QuestionType.MultipleChoice) }; var geographyTest = new CourseTest("Geography of Europe", geographyTestQuestions, 5, endOfYear2021, true) { Status = TestStatus.Published }; geographyCourse.Tests.Add(geographyTest); var geographyQuiz = new CourseTest("Quiz - Czechia", new List <TestQuestion> { new TestQuestion(1, "What's the capital of Czechia?", "Prague", 5, QuestionType.TextAnswer) }, 1, endOfYear2021, false); geographyCourse.Tests.Add(geographyQuiz); // -------------------------- var programmingTestQuestions = new List <TestQuestion> { new TestQuestion(1, $"Is Java language statically typed? {acd}A{ltd}Yes{acd}B{ltd}No", "A", 1, QuestionType.SingleChoice), new TestQuestion(2, $"Which of these languages support functional programming? {acd}A{ltd}Haskell{acd}B{ltd}F#", $"A{ald}B", 4, QuestionType.MultipleChoice) }; var programmingTest = new CourseTest("Programming languages test", programmingTestQuestions, 5, endOfYear2021, true) { Status = TestStatus.Published }; programmingCourse.Tests.Add(programmingTest); var dotnetTest = new CourseTest(".NET CLI test", new List <TestQuestion> { new TestQuestion(1, "What command do we use for building .NET Core app from the command line?", "dotnet build", 2, QuestionType.TextAnswer) }, 2, endOfYear2021, true) { Status = TestStatus.Published }; programmingCourse.Tests.Add(dotnetTest); // create course members var person1geographyCourse = new CourseMember(person1, geographyCourse); var person3programmingCourse = new CourseMember(person3, programmingCourse); var person4geographyCourse = new CourseMember(person4, geographyCourse); dbContext.CourseMembers.Add(person1geographyCourse); dbContext.CourseMembers.Add(person3programmingCourse); dbContext.CourseMembers.Add(person4geographyCourse); // create enrollment requests var person4programmingCourse = new EnrollmentRequest(programmingCourse, person4); dbContext.EnrollmentRequests.Add(person4programmingCourse); // create posts dbContext.Posts.Add(new ForumPost("Hello everyone, welcome to Programming course!", person1, programmingCourse)); // create grades dbContext.Grades.Add(new Grade(1, "", "Activity 20.6.", 1, person1geographyCourse)); dbContext.Grades.Add(new Grade(1, "", "Points for activity", 1, person3programmingCourse)); // create test submissions var submittedAnswers1 = new List <TestSubmissionAnswer> { new TestSubmissionAnswer(geographyTestQuestions[0], "Berlin"), new TestSubmissionAnswer(geographyTestQuestions[1], $"A{ald}B{ald}C") }; var geographyTestPerson1 = new TestSubmission(geographyTest, person1geographyCourse, submittedAnswers1) { IsSubmitted = true, SubmittedDateTime = DateTime.UtcNow }; var submittedAnswers4 = new List <TestSubmissionAnswer> { new TestSubmissionAnswer(geographyTestQuestions[0], "Hamburg"), new TestSubmissionAnswer(geographyTestQuestions[1], $"A{ald}B{ald}") }; var geographyTestPerson4 = new TestSubmission(geographyTest, person4geographyCourse, submittedAnswers4) { IsSubmitted = true, SubmittedDateTime = DateTime.UtcNow }; var submittedAnswers31 = new List <TestSubmissionAnswer> { new TestSubmissionAnswer(programmingTestQuestions[0], "B"), new TestSubmissionAnswer(programmingTestQuestions[1], $"A{ald}B") }; var programmingTestPerson3 = new TestSubmission(programmingTest, person3programmingCourse, submittedAnswers31) { IsSubmitted = true, SubmittedDateTime = DateTime.UtcNow }; var submittedAnswers32 = new List <TestSubmissionAnswer> { new TestSubmissionAnswer(dotnetTest.Questions.First(), "F5 in Visual Studio") { Comment = "The question was about the build from command line." } }; var dotnetTestPerson3 = new TestSubmission(dotnetTest, person3programmingCourse, submittedAnswers32) { IsSubmitted = true, IsReviewed = true }; var allSubmissions = new List <TestSubmission> { geographyTestPerson1, geographyTestPerson4, programmingTestPerson3, dotnetTestPerson3 }; allSubmissions.ForEach(submission => testSubmissionEvaluator.Evaluate(submission)); dbContext.TestSubmissions.AddRange(allSubmissions); // save the changes dbContext.SaveChanges(); }
private void CreateUserAndRoles() { //Admin role for tenancy owner var adminRoleForTenancyOwner = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == "Admin"); if (adminRoleForTenancyOwner == null) { adminRoleForTenancyOwner = _context.Roles.Add(new Role { Name = "Admin", DisplayName = "Admin", IsStatic = true }); _context.SaveChanges(); } //Admin user for tenancy owner var adminUserForTenancyOwner = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == "admin"); if (adminUserForTenancyOwner == null) { adminUserForTenancyOwner = _context.Users.Add( new User { TenantId = null, UserName = "******", Name = "System", Surname = "Administrator", EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Password = "******" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForTenancyOwner.Id, adminRoleForTenancyOwner.Id)); _context.SaveChanges(); } //Default tenant var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Default"); if (defaultTenant == null) { defaultTenant = _context.Tenants.Add(new Tenant { TenancyName = "Default", Name = "Default" }); _context.SaveChanges(); } //Admin role for 'Default' tenant var adminRoleForDefaultTenant = _context.Roles.FirstOrDefault(r => r.TenantId == defaultTenant.Id && r.Name == "Admin"); if (adminRoleForDefaultTenant == null) { adminRoleForDefaultTenant = _context.Roles.Add(new Role { TenantId = defaultTenant.Id, Name = "Admin", DisplayName = "Admin", IsStatic = true }); _context.SaveChanges(); } //Admin for 'Default' tenant var adminUserForDefaultTenant = _context.Users.FirstOrDefault(u => u.TenantId == defaultTenant.Id && u.UserName == "admin"); if (adminUserForDefaultTenant == null) { adminUserForDefaultTenant = _context.Users.Add( new User { TenantId = defaultTenant.Id, UserName = "******", Name = "System", Surname = "Administrator", EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Password = "******" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForDefaultTenant.Id, adminRoleForDefaultTenant.Id)); _context.SaveChanges(); } }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var user = new IdentityUser { UserName = Input.Email, Email = Input.Email }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); Address address = new Address(Input.City, Input.Street, Input.BuildingNumber, Input.ApartmentNumber, Input.PostalCode); AppUser appUser = null; if (!string.IsNullOrEmpty(Input.PESEL)) { appUser = new Models.Volunteer ( user.Id, Input.FirstName, Input.LastName, Input.Email, Input.PhoneNumber, address, Input.PESEL ); await _userManager.AddToRoleAsync(user, Roles.VolunteerRole); } else { appUser = new Models.Organizer ( user.Id, Input.FirstName, Input.LastName, Input.Email, Input.PhoneNumber, address ); await _userManager.AddToRoleAsync(user, Roles.OrganizerRole); } _db.AppUsers.Add(appUser); _db.SaveChanges(); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); await _signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(returnUrl)); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }
public virtual bool Add(T entity) { entity.CreateTime = DateTime.Now; Entity.Add(entity); return(context.SaveChanges() > 0); }
private void CreateUserAndRoles() { //Admin role for tenancy owner var adminRoleForTenancyOwner = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == "Admin"); if (adminRoleForTenancyOwner == null) { adminRoleForTenancyOwner = _context.Roles.Add(new Role { Name = "Admin", DisplayName = "Admin" }); _context.SaveChanges(); } //Admin user for tenancy owner var adminUserForTenancyOwner = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == "admin"); if (adminUserForTenancyOwner == null) { adminUserForTenancyOwner = _context.Users.Add( new User { TenantId = null, UserName = "******", Name = "System", Surname = "Administrator", EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Mobile = "13606806123", IsMobileConfirmed = true, Password = "******" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForTenancyOwner.Id, adminRoleForTenancyOwner.Id)); _context.SaveChanges(); } //Default tenant var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Default"); if (defaultTenant == null) { defaultTenant = _context.Tenants.Add(new Tenant { TenancyName = "Default", Name = "Default" }); _context.SaveChanges(); } //Admin role for 'Default' tenant var adminRoleForDefaultTenant = _context.Roles.FirstOrDefault(r => r.TenantId == defaultTenant.Id && r.Name == "Admin"); if (adminRoleForDefaultTenant == null) { adminRoleForDefaultTenant = _context.Roles.Add(new Role { TenantId = defaultTenant.Id, Name = "Admin", DisplayName = "Admin" }); _context.SaveChanges(); } //Admin for 'Default' tenant var adminUserForDefaultTenant = _context.Users.FirstOrDefault(u => u.TenantId == defaultTenant.Id && u.UserName == "admin"); if (adminUserForDefaultTenant == null) { adminUserForDefaultTenant = _context.Users.Add( new User { TenantId = defaultTenant.Id, UserName = "******", Name = "System", Surname = "Administrator", EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Mobile = "13606806123", IsMobileConfirmed = true, Password = "******" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForDefaultTenant.Id, adminRoleForDefaultTenant.Id)); _context.SaveChanges(); } // 插入授权 var adminRoleForHost = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == StaticRoleNames.Host.Admin); if (adminRoleForHost == null) { adminRoleForHost = _context.Roles.Add(new Role { Name = StaticRoleNames.Host.Admin, DisplayName = StaticRoleNames.Host.Admin, IsStatic = true }); _context.SaveChanges(); //Grant all tenant permissions var permissions = PermissionFinder .GetAllPermissions(new CMSAuthorizationProvider()) .Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Host)) .ToList(); // 获取CMSAuthorizationProvider定义的权限,授权给admin var taskPermissions = PermissionFinder.GetAllPermissions(new CMSAuthorizationProvider()).ToList(); permissions.AddRange(taskPermissions); foreach (var permission in permissions) { _context.Permissions.Add( new RolePermissionSetting { Name = permission.Name, IsGranted = true, RoleId = adminRoleForHost.Id }); } _context.SaveChanges(); } }
using System.Linq; using Abp.Authorization.Users; using Enterprises.CMS.Authorization.Roles; using Enterprises.CMS.EntityFramework; using Enterprises.CMS.MultiTenancy; using Enterprises.CMS.Users; using Abp.Authorization; using Enterprise.CMS.Authorization; using Abp.MultiTenancy; using Abp.Authorization.Roles; namespace Enterprises.CMS.Migrations.SeedData { public class DefaultTenantRoleAndUserBuilder { private readonly CMSDbContext _context; public DefaultTenantRoleAndUserBuilder(CMSDbContext context) { _context = context; } public void Build() { CreateUserAndRoles(); } private void CreateUserAndRoles() { var adminRoleForTenancyOwner = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == "Admin"); if (adminRoleForTenancyOwner == null) { adminRoleForTenancyOwner = _context.Roles.Add(new Role { Name = "Admin", DisplayName = "Admin" }); _context.SaveChanges(); } //Admin user for tenancy owner var adminUserForTenancyOwner = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == "admin"); if (adminUserForTenancyOwner == null) { adminUserForTenancyOwner = _context.Users.Add( new User { TenantId = null, UserName = "******", Name = "System", Surname = "Administrator", EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Mobile = "13606806123", IsMobileConfirmed = true, Password = "******" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForTenancyOwner.Id, adminRoleForTenancyOwner.Id)); _context.SaveChanges(); } //Default tenant var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Default"); if (defaultTenant == null) { defaultTenant = _context.Tenants.Add(new Tenant { TenancyName = "Default", Name = "Default" }); _context.SaveChanges(); } //Admin role for 'Default' tenant //var adminRoleForDefaultTenant = _context.Roles.FirstOrDefault(r => r.TenantId == defaultTenant.Id && r.Name == "Admin"); //if (adminRoleForDefaultTenant == null) //{ // adminRoleForDefaultTenant = _context.Roles.Add(new Role { TenantId = defaultTenant.Id, Name = "Admin", DisplayName = "Admin" }); // _context.SaveChanges(); //} //Admin for 'Default' tenant //var adminUserForDefaultTenant = _context.Users.FirstOrDefault(u => u.TenantId == defaultTenant.Id && u.UserName == "admin"); //if (adminUserForDefaultTenant == null) //{ // adminUserForDefaultTenant = _context.Users.Add( // new User // { // TenantId = 1, // UserName = "******", // Name = "System", // Surname = "Administrator", // EmailAddress = "*****@*****.**", // IsEmailConfirmed = true, // Mobile = "13606806123", // IsMobileConfirmed = true, // Password = "******" //123qwe // }); // _context.SaveChanges(); // _context.UserRoles.Add(new UserRole(adminUserForDefaultTenant.Id, adminRoleForDefaultTenant.Id)); // _context.SaveChanges(); //} var adminRoleForHost = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == StaticRoleNames.Host.Admin); if (adminRoleForHost == null) { adminRoleForHost = _context.Roles.Add(new Role { Name = StaticRoleNames.Host.Admin, DisplayName = StaticRoleNames.Host.Admin, IsStatic = true }); _context.SaveChanges(); //Grant all tenant permissions var permissions = PermissionFinder .GetAllPermissions(new CMSAuthorizationProvider()) .Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Host)) .ToList(); // 获取CMSAuthorizationProvider定义的权限,授权给admin var taskPermissions = PermissionFinder.GetAllPermissions(new CMSAuthorizationProvider()).ToList(); permissions.AddRange(taskPermissions); foreach (var permission in permissions) { _context.Permissions.Add( new RolePermissionSetting { Name = permission.Name, IsGranted = true, RoleId = adminRoleForHost.Id }); } _context.SaveChanges(); } } } }
public void Save(PersistKey persistKey) { _dbContext.Set <PersistKey>().Add(persistKey); _dbContext.SaveChanges(); }
public IActionResult UpdateEvent(EventViewModel vm) { if (!ModelState.IsValid) { return(View(vm)); } if (vm.Date < DateTime.Now) { ModelState.AddModelError("Date", "Data wydarzenia musi być przyszła"); return(View(vm)); } var eventToUpdate = _db.Events.Include(e => e.Address).FirstOrDefault(e => e.EventId == vm.EventId); if (eventToUpdate == null) { return(BadRequest(ErrorMessagesProvider.EventErrors.EventNotExists)); } if (eventToUpdate.Date < DateTime.Now.AddMinutes(1)) { return(BadRequest(ErrorMessagesProvider.EventErrors.EventDatePassed)); } Address address = null; if (!(eventToUpdate.Address.City == vm.City && eventToUpdate.Address.Street == vm.Street && eventToUpdate.Address.BuildingNumber == vm.BuildingNumber && eventToUpdate.Address.ApartmentNumber == vm.ApartmentNumber && eventToUpdate.Address.PostalCode == vm.PostalCode)) { address = new Address ( vm.City, vm.Street, vm.BuildingNumber, vm.ApartmentNumber, vm.PostalCode ); var existingAddress = _db.Addresses.FirstOrDefault(a => a.City == address.City && a.Street == address.Street && a.BuildingNumber == address.BuildingNumber && a.ApartmentNumber == address.ApartmentNumber && a.PostalCode == address.PostalCode ); if (existingAddress != null) { address = existingAddress; } } string relativePath = eventToUpdate.ImageRelativePath; if (vm.FormFile != null) { try { _formFilesManagement.DeleteWholeEventFolder(vm.EventId); } catch (DirectoryNotFoundException) { } // stock files relativePath = _formFilesManagement.SaveFileToFileSystem(vm.FormFile, vm.EventId); } eventToUpdate.UpdateEvent(vm.Name, vm.Date, vm.Description, vm.RequiredPoints, vm.Tags, address, relativePath); _db.Events.Update(eventToUpdate); _db.SaveChanges(); return(RedirectToAction("EventsList")); }
public virtual void Commit() { cmsDbContext.SaveChanges(); }
public void Add(T entity) { context.Add(entity); context.SaveChanges(); }