Esempio n. 1
0
        private void OnConnect(IAsyncResult ar)
        {
            try
            {
                clientSocket.EndConnect(ar);

                //We are connected so we login into the server
                Data msgToSend = new Data ();
                msgToSend.cmdCommand = Command.Login;
                msgToSend.strName = txtName.Text;
                msgToSend.strMessage = null;

                string message = "test";
                byte[] b = msgToSend.ToByte ();
                //byte[] b = Convert.ToByte(message);
                List<byte> result = new List<byte>();
                result.AddRange(BitConverter.GetBytes(message.Length));
                byte[] c = result.ToArray();

                //Send the message to the server
                clientSocket.BeginSend(b, 0, b.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
                //clientSocket.BeginSend(c, 0, c.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ChatClient", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 2
0
        //Broadcast the message typed by the user to everyone
        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                //Fill the info for the message to be send
                Data msgToSend = new Data();

                msgToSend.strName = strName;
                msgToSend.strMessage = txtMessage.Text;
                msgToSend.cmdCommand = Command.Message;

                byte [] byteData = msgToSend.ToByte();

                //Send it to the server
                clientSocket.BeginSend (byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);

                txtMessage.Text = null;
            }
            catch (Exception)
            {
                MessageBox.Show("Unable to send message to the server.", "ChatClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 3
0
        private void irc_OnChannelAction(string text, Data ircdata)
        {
            try
            {
                if (!alIgnoredHosts.Contains(irc.GetChannelUser(User.channel, ircdata.Nick).Host))
                {
                    for (int i = 0; i < tabControlChatTabs.TabPages.Count; i++)
                    {
                        if (tabControlChatTabs.TabPages[i].Text.ToString().Equals(User.channel))
                        {
                            AppendText(User.channel, "tag", "[");
                            AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                            AppendText(User.channel, "tag", "] ");
                            AppendText(User.channel, "action", "* " + ircdata.Nick.ToString() + " ");
                            AppendText(User.channel, "action", text);
                            AppendText(User.channel, "text", "\n");
                            User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + "* " + ircdata.Nick.ToString() + " " + text + "\n");

                            alPrivMsgAlert.Add(i);
                            break;
                        }
                    }

                    tabControlChatTabs.Refresh();
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 4
0
        private void irc_OnBan(string str1, string str2, string str3, Data ircdata)
        {
            try
            {
                AppendText(User.channel, "tag", "[");
                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                AppendText(User.channel, "tag", "] ");
                AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " has banned " + str3.ToString() + "\n");

                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " has banned " + str3.ToString() + "\n");
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 5
0
        private void OnQueryMessage_DelegateFunction(Data ircdata)
        {
            try
            {
                if (!alIgnoredHosts.Contains(irc.GetChannelUser(User.channel, ircdata.Nick).Host))
                {
                    if (listBoxUserList.Items.Contains(Nickname(ircdata.Nick.ToString())))
                    {
                        tab = new TabPage(ircdata.Nick);

                        if (!alprivMsgs.Contains(ircdata.Nick.ToString()))
                        {
                            textBoxChatWindow = new Khendys.Controls.ExRichTextBox();
                            textBoxChatWindow.BackColor = User.background;
                            textBoxChatWindow.ForeColor = User.text;
                            textBoxChatWindow.ReadOnly = true;
                            textBoxChatWindow.Font = new Font(User.defaultFontFamily, User.defaultFontSize, User.defaultFontStyle, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
                            textBoxChatWindow.Dock = System.Windows.Forms.DockStyle.Fill;
                            textBoxChatWindow.Visible = true;

                            tab.Controls.Add(textBoxChatWindow);

                            alprivMsgs.Add(ircdata.Nick.ToString());

                            alPrivMsgWindows = new ArrayList();
                            alPrivMsgWindows.Add(textBoxChatWindow);

                            alPrivMsgWindowList.Add(alPrivMsgWindows);

                            string nickname = ircdata.Nick;
                            AppendText(tab.Text, "tag", "[");
                            AppendText(tab.Text, "time", DateTime.Now.ToShortTimeString().ToString());
                            AppendText(tab.Text, "tag", "] ");
                            AppendText(tab.Text, "notice", " -!- " + nickname + " is " +
                                irc.GetChannelUser(User.channel, nickname).Ident.ToString() + "@" +
                                irc.GetChannelUser(User.channel, nickname).Host.ToString() + " (" +
                                irc.GetChannelUser(User.channel, nickname).Realname.ToString() + ")\n");

                            addTabPageDelegate = new AddTabPage_Delegate(AddTabPage_DelegateFunction);
                            IAsyncResult r = BeginInvoke(addTabPageDelegate, new object[] { tab });
                            EndInvoke(r);

                            OnQueryMessage_DelegateFunction(ircdata);
                        }
                        else
                        {
                            for (int i = 0; i < tabControlChatTabs.TabPages.Count; i++)
                            {
                                if (tabControlChatTabs.TabPages[i].Text.ToString().Equals(ircdata.Nick.ToString()))
                                {
                                    tab = tabControlChatTabs.TabPages[i];
                                    AppendText(tab.Text, "tag", "[");
                                    AppendText(tab.Text, "time", DateTime.Now.ToShortTimeString().ToString());
                                    AppendText(tab.Text, "tag", "] <");
                                    AppendText(tab.Text, "person", Nickname(ircdata.Nick.ToString()));
                                    AppendText(tab.Text, "tag", "> ");
                                    AppendText(tab.Text, "person", ircdata.Message.ToString());
                                    AppendText(tab.Text, "text", "\n");
                                    User.Log(tab.Text, "[" + DateTime.Now.ToShortTimeString().ToString() + "] <" + ircdata.Nick.ToString() + "> " + ircdata.Message.ToString() + "\n");

                                    alPrivMsgAlert.Add(i);
                                }
                            }

                            tabControlChatTabs.Refresh();

                            for (int i = 0; i < tab.Controls.Count; i++)
                            {
                                if (tab.Controls[i].GetType().Name == "ExRichTextBox")
                                {
                                    AppendText(tab.Controls[i].Text, "tag", "[");
                                    AppendText(tab.Controls[i].Text, "time", DateTime.Now.ToShortTimeString().ToString());
                                    AppendText(tab.Controls[i].Text, "tag", "] <");
                                    AppendText(tab.Controls[i].Text, "person", ircdata.Nick.ToString());
                                    AppendText(tab.Controls[i].Text, "tag", "> ");
                                    AppendText(tab.Controls[i].Text, "person", ircdata.Message.ToString());
                                    AppendText(tab.Controls[i].Text, "text", "\n");
                                    User.Log(tab.Controls[i].Text, "[" + DateTime.Now.ToShortTimeString().ToString() + "] <" + ircdata.Nick.ToString() + "> " + ircdata.Message.ToString() + "\n");
                                }
                            }
                        }

                        ShowChatWindow();
                    }
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 6
0
 private void irc_OnWho(string str1, string str2, string str3, string str4, string str5, bool bl1, bool bl2, bool bl3, bool bl4, bool bl5, bool bl6, bool bl7, string str6, int i, Data ircdata)
 {
 }
Esempio n. 7
0
        private void OnReceive(IAsyncResult ar)
        {
            try
            {
                clientSocket.EndReceive(ar);

                Data msgReceived = new Data(byteData);
                //Accordingly process the message received
                switch (msgReceived.cmdCommand)
                {
                    case Command.Login:
                        lstChatters.Items.Add(msgReceived.strName);
                        break;

                    case Command.Logout:
                        lstChatters.Items.Remove(msgReceived.strName);
                        break;

                    case Command.Message:
                        break;

                    case Command.List:
                        lstChatters.Items.AddRange(msgReceived.strMessage.Split('*'));
                        lstChatters.Items.RemoveAt(lstChatters.Items.Count - 1);
                        txtChatBox.Text += "<<<" + strName + " has joined the room>>>\r\n";
                        break;
                }

                if (msgReceived.strMessage != null && msgReceived.cmdCommand != Command.List)
                    txtChatBox.Text += msgReceived.strMessage + "\r\n";

                byteData = new byte[1024];

                clientSocket.BeginReceive(byteData,
                                          0,
                                          byteData.Length,
                                          SocketFlags.None,
                                          new AsyncCallback(OnReceive),
                                          null);

            }
            catch (ObjectDisposedException)
            { }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ChatClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 8
0
        private void Register_Click(object sender, EventArgs e)
        {
            var regObj = Data.CreateRegister(GenerateRegisterData());

            this._comptroller.PaketQueue.Enqueue(regObj);
        }
Esempio n. 9
0
        private void irc_OnJoin(string str1, string str2, Data ircdata)
        {
            try
            {
                if (!ircdata.Nick.ToString().Equals(irc.Nickname.ToString()))
                {
                    AppendText(User.channel, "tag", "[");
                    AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                    AppendText(User.channel, "tag", "] ");
                    AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident.ToString() + "@" + ircdata.Host.ToString() + "] has joined " + str1.ToString() + "\n");
                    User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident.ToString() + "@" + ircdata.Host.ToString() + "] has joined " + str1.ToString() + "\n");
                }
                else
                {
                    if (mblnShowWelcomeMessage)
                    {
                        AppendText(User.channel, "notice", "-------------------------------------" + "\n");
                        AppendText(User.channel, "notice", " -!- You're in! You can start chatting now. ");
                        AppendText(User.channel, "text", "\n");

                        AppendText(User.channel, "notice", " -!- You may want to change your default nickname.");
                        AppendText(User.channel, "text", "\n");

                        AppendText(User.channel, "notice", " -!- Enter \"/nick random12345\" (without quotes) to change your nickname to random12345.");
                        AppendText(User.channel, "text", "\n");

                        mblnShowWelcomeMessage = false;
                    }

                    AppendText(User.channel, "tag", "[");
                    AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                    AppendText(User.channel, "tag", "] ");
                    AppendText(User.channel, "notice", " -!- " + irc.Nickname.ToString() + " [" + ircdata.Ident.ToString() + "@" + ircdata.Host.ToString() + "] has joined " + str1.ToString() + "\n");

                    User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + irc.Nickname.ToString() + " [" + ircdata.Ident.ToString() + "@" + ircdata.Host.ToString() + "] has joined " + str1.ToString() + "\n");
                    allowInput = true;
                }

                if (!ircdata.Nick.ToString().Equals(irc.Nickname.ToString()))
                {
                    AddUserToUserList(ircdata.Nick.ToString());
                }
                else
                {
                    AddUserToUserList(irc.Nickname.ToString());
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 10
0
        private void irc_OnQuit(string str1, string str2, Data ircdata)
        {
            try
            {
                if (str2 != null)
                {
                    AppendText(User.channel, "tag", "[");
                    AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                    AppendText(User.channel, "tag", "] ");
                    AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident + "@" + ircdata.Host + "] has quit" + " (" + str2.ToString() + ")" + "\n");
                    User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident + "@" + ircdata.Host + "] has quit" + " (" + str2.ToString() + ")" + "\n");
                }
                else
                {
                    AppendText(User.channel, "tag", "[");
                    AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                    AppendText(User.channel, "tag", "] ");
                    AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident + "@" + ircdata.Host + "] has quit\n");
                    User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " [" + ircdata.Ident + "@" + ircdata.Host + "] has quit\n");
                }

                if (alprivMsgs.Contains(ircdata.Nick.ToString()))
                {
                    for (int i = 0; i < tabControlChatTabs.TabPages.Count; i++)
                    {
                        if (tabControlChatTabs.TabPages[i].Text.ToString().Equals(ircdata.Nick.ToString()))
                        {
                            removeTabPageDelegate = new RemoveTabPage_Delegate(RemoveTabPage_DelegateFunction);
                            IAsyncResult r = BeginInvoke(removeTabPageDelegate, new object[] { tabControlChatTabs.TabPages[i] });
                            EndInvoke(r);
                        }
                    }
                }

                RemoveUserFromUserList(ircdata.Nick.ToString());
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 11
0
        private void irc_OnQueryNotice(Data ircdata)
        {
            try
            {
                if (ircdata.Nick != null)
                {
                    AppendText(tabControlChatTabs.SelectedTab.Text, "tag", "[");
                    AppendText(tabControlChatTabs.SelectedTab.Text, "time", DateTime.Now.ToShortTimeString().ToString());
                    AppendText(tabControlChatTabs.SelectedTab.Text, "tag", "] ");
                    AppendText(tabControlChatTabs.SelectedTab.Text, "notice", " -!- " + ircdata.Nick.ToString() + " - " + ircdata.Message.ToString() + "\n");

                    User.Log(tabControlChatTabs.SelectedTab.Text, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " - " + ircdata.Message.ToString() + "\n");
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 12
0
 private void irc_OnQueryMessage(Data ircdata)
 {
     try
     {
         if (ircdata.Nick != null)
         {
             onQueryMessageDelegate = new OnQueryMessage_Delegate(OnQueryMessage_DelegateFunction);
             IAsyncResult r = BeginInvoke(onQueryMessageDelegate, new object[] { ircdata });
             EndInvoke(r);
         }
     }
     catch (Exception ex)
     {
         User.ErrorLog(ex.ToString());
     }
 }
Esempio n. 13
0
        private void irc_OnNickChange(string str1, string str2, Data ircdata)
        {
            try
            {
                this.Text = Application.Name + " [" + User.server + ":" + User.port.ToString() + ", " + irc.Nickname + "] - " + irc.GetChannel(User.channel).Topic.ToString();

                AppendText(User.channel, "tag", "[");
                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                AppendText(User.channel, "tag", "] ");
                AppendText(User.channel, "notice", " -!- " + str1.ToString() + " is now known as " + str2.ToString() + "\n");

                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + str1.ToString() + " is now known as " + str2.ToString() + "\n");

                for (int i = 0; i < alprivMsgs.Count; i++)
                {
                    if (alprivMsgs[i].ToString().Equals(str1))
                    {
                        alprivMsgs[i] = str2;
                    }
                }

                for (int i = 0; i < tabControlChatTabs.TabPages.Count; i++)
                {
                    if (tabControlChatTabs.TabPages[i].Text.ToString().Equals(str1))
                    {
                        tabControlChatTabs.TabPages[i].Text = str2;
                    }
                }

                UpdateUserList(true);
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 14
0
        private void irc_OnKick(string str1, string str2, string str3, string str4, Data ircdata)
        {
            try
            {
                AppendText(User.channel, "tag", "[");
                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                AppendText(User.channel, "tag", "] ");
                AppendText(User.channel, "notice", " -!- " + str2.ToString() + " was kicked from " + str1.ToString() + " by " + ircdata.Nick.ToString() + " (" + str4.ToString() + ")" + "\n");

                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + str2.ToString() + " was kicked from " + str1.ToString() + " by " + ircdata.Nick.ToString() + " (" + str4.ToString() + ")" + "\n");

                RemoveUserFromUserList(str2.ToString());

                if (str2.Equals(User.username))
                {
                    irc.Join(User.channel);
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 15
0
        private void SGSClient_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Are you sure you want to leave the chat room?", "SGSclient: " + strName,
                MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.No)
            {
                e.Cancel = true;
                return;
            }

            try
            {
                //Send a message to logout of the server
                Data msgToSend = new Data ();
                msgToSend.cmdCommand = Command.Logout;
                msgToSend.strName = strName;
                msgToSend.strMessage = null;

                byte[] b = msgToSend.ToByte ();
                clientSocket.Send(b, 0, b.Length, SocketFlags.None);
                clientSocket.Close();
            }
            catch (ObjectDisposedException)
            { }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ChatClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 16
0
        private void irc_OnChannelMessage(Data ircdata)
        {
            try
            {
                if (tabControlChatTabs.InvokeRequired)
                {
                    tabControlChatTabs.Invoke(new OnChannelMessage_Delegate(irc_OnChannelMessage), new object[] { ircdata });
                }
                else
                {
                    if (!alIgnoredHosts.Contains(irc.GetChannelUser(User.channel, ircdata.Nick).Host))
                    {
                        for (int i = 0; i < tabControlChatTabs.TabPages.Count; i++)
                        {
                            if (tabControlChatTabs.TabPages[i].Text.ToString().Equals(User.channel))
                            {
                                AppendText(User.channel, "tag", "[");
                                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                                AppendText(User.channel, "tag", "] <");
                                AppendText(User.channel, "person", Nickname(ircdata.Nick.ToString()));
                                AppendText(User.channel, "tag", "> ");
                                AppendText(User.channel, "text", ircdata.Message.ToString());
                                AppendText(User.channel, "text", "\n");

                                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] <" + ircdata.Nick.ToString() + "> " + ircdata.Message.ToString() + "\n");

                                alPrivMsgAlert.Add(i);

                                break;
                            }
                        }

                        tabControlChatTabs.Refresh();
                    }
                }
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 17
0
        private void irc_OnHalfOp(string str1, string str2, string str3, Data ircdata)
        {
            try
            {
                AppendText(User.channel, "tag", "[");
                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                AppendText(User.channel, "tag", "] ");
                AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " has given halfop status to " + str3.ToString() + " on " + str1.ToString() + "\n");

                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " has given halfop status to " + str3.ToString() + " on " + str1.ToString() + "\n");
                UpdateUserList(true);
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 18
0
 private void irc_OnTopic(string str1, string str2, Data ircdata)
 {
     try
     {
         if (this.InvokeRequired)
         {
             this.Invoke(new OnTopic_Delegate(irc_OnTopic), new object[] { str1, str2, ircdata });
         }
         else
         {
             this.Text = Application.Name + " [" + User.server + ":" + User.port.ToString() + ", " + irc.Nickname + "] - " + irc.GetChannel(User.channel).Topic.ToString();
         }
     }
     catch (Exception ex)
     {
         User.ErrorLog(ex.ToString());
     }
 }
Esempio n. 19
0
 private void irc_OnUserModeChange(Data ircdata)
 {
 }
Esempio n. 20
0
        private void irc_OnVoice(string str1, string str2, string str3, Data ircdata)
        {
            try
            {
                if (irc.GetChannelUser(User.channel, str3).IsOp)
                {
                    irc.Deop(User.channel, str3);
                }

                if (irc.GetChannelUser(User.channel, str3).IsOwner)
                {
                    irc.DeOwner(User.channel, str3);
                }

                if (irc.GetChannelUser(User.channel, str3).IsHalfOp)
                {
                    irc.DeHalfOp(User.channel, str3);
                }

                AppendText(User.channel, "tag", "[");
                AppendText(User.channel, "time", DateTime.Now.ToShortTimeString().ToString());
                AppendText(User.channel, "tag", "] ");
                AppendText(User.channel, "notice", " -!- " + ircdata.Nick.ToString() + " has given voice status to " + str3.ToString() + " on " + str1.ToString() + "\n");

                User.Log(User.channel, "[" + DateTime.Now.ToShortTimeString().ToString() + "] " + " -!- " + ircdata.Nick.ToString() + " has given voice status to " + str3.ToString() + " on " + str1.ToString() + "\n");
                UpdateUserList(true);
            }
            catch (Exception ex)
            {
                User.ErrorLog(ex.ToString());
            }
        }
Esempio n. 21
0
 public Data GetLoginPaket()
 {
     return(Data.CreateLogin(GenerateLoginData()));
 }
Esempio n. 22
0
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "ChatClient: " + strName;

            //The user has logged into the system so we now request the server to send
            //the names of all users who are in the chat room
            Data msgToSend = new Data ();
            msgToSend.cmdCommand = Command.List;
            msgToSend.strName = strName;
            msgToSend.strMessage = null;

            byteData = msgToSend.ToByte();

            clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);

            byteData = new byte[1024];
            //Start listening to the data asynchronously
            clientSocket.BeginReceive(byteData,
                                       0,
                                       byteData.Length,
                                       SocketFlags.None,
                                       new AsyncCallback(OnReceive),
                                       null);
        }