Advertisement
Guest User

client

a guest
Feb 14th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 22.80 KB | None | 0 0
  1. package tcpclient;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.net.*;
  6. import java.io.*;
  7. import java.sql.*;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10. import javax.swing.*;
  11. import javax.swing.JOptionPane;
  12.  
  13. public class TCPclient implements Runnable {
  14.  
  15.     private static final String UserName = "root";
  16.     private static final String Password = "";
  17.     private static final String ConnString = "jdbc:mysql://localhost:3306/football_db?zeroDateTimeBehavior=convertToNull";
  18.  
  19.     private Socket socket = null;
  20.     private Thread thread = null;
  21.     private DataInputStream console = null;
  22.     private DataOutputStream streamOut = null;
  23.     private ChatClientThread client = null;
  24.  
  25.     Connection conn = null;
  26.     boolean loginFlag = false;
  27.     boolean teamChose = false;
  28.  
  29.     JFrame frameReg;
  30.     JFrame framePlay;
  31.  
  32.     JLabel labelLog1;//show msg from top
  33.     JLabel labelLog2;//shows "username"
  34.     JLabel labelLog3;//shows "password"
  35.     JLabel labelLog4;//shows msg to register
  36.     JTextField textLog1;//username textField
  37.     JTextField textLog2;//password textField
  38.     JButton buttonLog1;//login button
  39.     JButton buttonLog2;//register button
  40.     JPanel panelLog;//panel for user login
  41.  
  42.     JLabel labelReg1;//show msg from top
  43.     JLabel labelReg2;//First name
  44.     JLabel labelReg3;//Last name
  45.     JLabel labelReg4;//user name
  46.     JLabel labelReg5;//password
  47.     JTextField textReg1;//First name txt
  48.     JTextField textReg2;//Last name txt
  49.     JTextField textReg3;//user name txt
  50.     JTextField textReg4;//password txt
  51.     JButton buttonReg1;//register button
  52.     JPanel panelReg;//panel for register
  53.  
  54.     JLabel labelChTm1;//show GK
  55.     JLabel labelChTm2;//show def
  56.     JLabel labelChTm3;//show mid1
  57.     JLabel labelChTm4;//show mid2
  58.     JLabel labelChTm5;//show strike
  59.     JLabel labelChTm6;//show team
  60.     JButton buttonChTm1;//Button team 1
  61.     JButton buttonChTm2;//Button team 2
  62.     JButton buttonChTm3;//Button team 3
  63.     JButton buttonChTm4;//Button team 3
  64.     JButton buttonChTm5;//Button team 4
  65.     JPanel panelChTm;//Panel for team choose
  66.  
  67.     JLabel labelPlay1;
  68.     JPanel panelPlay;
  69.  
  70.  
  71.     String userNameLog;
  72.     String passwordLog;
  73.     String registerLog = "register"; //login panel er register button
  74.     String firstNameReg;
  75.     String userNameReg;
  76.     String passwordReg;
  77.     String teamNameReg;
  78.     String registerReg = "registered"; //register panel er register button
  79.     String allRegInfo;
  80.     String teamChoose = "team";
  81.  
  82.     public TCPclient(String serverName, int serverPort) throws SQLException {
  83.  
  84.         frameReg = new JFrame();
  85.         frameReg.setSize(600, 600);
  86.         frameReg.setLayout(null);
  87.  
  88.         framePlay = new JFrame();
  89.         framePlay.setSize(600, 600);
  90.         framePlay.setLayout(null);
  91.  
  92.         //everything for login panel
  93.         panelLog = new JPanel();
  94.         panelLog.setBounds(0, 0, 0, 0);
  95.         panelLog.setLayout(null);
  96.         panelLog.setSize(600, 600);
  97.         panelLog.setBackground(Color.LIGHT_GRAY);
  98.  
  99.         labelLog1 = new JLabel();
  100.         labelLog1.setBounds(80, 20, 400, 50);
  101.         labelLog1.setFont(new Font("Reklame Script", Font.PLAIN, 20));
  102.         labelLog1.setText("Login if you have an existing account");
  103.  
  104.         labelLog2 = new JLabel();
  105.         labelLog2.setBounds(20, 95, 100, 50);
  106.         labelLog2.setFont(new Font("Reklame Script", Font.BOLD, 14));
  107.         labelLog2.setText("Username");
  108.         textLog1 = new JTextField();
  109.         textLog1.setBounds(100, 105, 300, 30);
  110.         textLog1.setFont(new Font("Reklame Script", Font.PLAIN, 14));
  111.  
  112.         labelLog3 = new JLabel();
  113.         labelLog3.setBounds(20, 165, 100, 50);
  114.         labelLog3.setFont(new Font("Reklame Script", Font.BOLD, 14));
  115.         labelLog3.setText("Password");
  116.         textLog2 = new JTextField();
  117.         textLog2.setBounds(100, 175, 300, 30);
  118.         textLog2.setFont(new Font("Reklame Script", Font.PLAIN, 14));
  119.  
  120.         buttonLog1 = new JButton();
  121.         buttonLog1.setText("Login");
  122.         buttonLog1.setBounds(150, 100, 130, 30);
  123.         buttonLog1.setLocation(190, 250);
  124.  
  125.         labelLog4 = new JLabel();
  126.         labelLog4.setBounds(15, 330, 400, 50);
  127.         labelLog4.setFont(new Font("Reklame Script", Font.BOLD, 14));
  128.         labelLog4.setText("If you do not have an account click-->>");
  129.  
  130.         buttonLog2 = new JButton();
  131.         buttonLog2.setText("Register");
  132.         buttonLog2.setBounds(150, 100, 130, 30);
  133.         buttonLog2.setLocation(330, 340);
  134.  
  135.         panelLog.add(labelLog1);
  136.         panelLog.add(labelLog2);
  137.         panelLog.add(labelLog3);
  138.         panelLog.add(labelLog4);
  139.         panelLog.add(textLog1);
  140.         panelLog.add(textLog2);
  141.         panelLog.add(buttonLog1);
  142.         panelLog.add(buttonLog2);
  143.         frameReg.add(panelLog); //1st ai show krbe login panel.
  144.  
  145.         //everything for register panel.
  146.         panelReg = new JPanel();
  147.         panelReg.setBounds(0, 0, 0, 0);
  148.         panelReg.setLayout(null);
  149.         panelReg.setSize(600, 600);
  150.         panelReg.setBackground(Color.LIGHT_GRAY);
  151.  
  152.         labelReg1 = new JLabel();
  153.         labelReg1.setBounds(100, 20, 400, 50);
  154.         labelReg1.setFont(new Font("Reklame Script", Font.PLAIN, 20));
  155.         labelReg1.setText("Fill the form below to register");
  156.  
  157.         labelReg2 = new JLabel();
  158.         labelReg2.setBounds(20, 95, 100, 50);
  159.         labelReg2.setFont(new Font("Reklame Script", Font.BOLD, 14));
  160.         labelReg2.setText("First Name");
  161.         textReg1 = new JTextField();
  162.         textReg1.setBounds(120, 105, 300, 30);
  163.         textReg1.setFont(new Font("Reklame Script", Font.PLAIN, 14));
  164.  
  165.         labelReg3 = new JLabel();
  166.         labelReg3.setBounds(20, 165, 100, 50);
  167.         labelReg3.setFont(new Font("Reklame Script", Font.BOLD, 14));
  168.         labelReg3.setText("User Name");
  169.         textReg2 = new JTextField();
  170.         textReg2.setBounds(120, 175, 300, 30);
  171.         textReg2.setFont(new Font("Reklame Script", Font.PLAIN, 14));
  172.  
  173.         labelReg4 = new JLabel();
  174.         labelReg4.setBounds(20, 235, 100, 50);
  175.         labelReg4.setFont(new Font("Reklame Script", Font.BOLD, 14));
  176.         labelReg4.setText("Password");
  177.         textReg3 = new JTextField();
  178.         textReg3.setBounds(120, 245, 300, 30);
  179.         textReg3.setFont(new Font("Reklame Script", Font.PLAIN, 14));
  180.  
  181.         buttonReg1 = new JButton();
  182.         buttonReg1.setText("Register");
  183.         buttonReg1.setBounds(150, 100, 130, 30);
  184.         buttonReg1.setLocation(210, 370);
  185.  
  186.         panelReg.add(labelReg1);
  187.         panelReg.add(labelReg2);
  188.         panelReg.add(textReg1);
  189.         panelReg.add(labelReg3);
  190.         panelReg.add(textReg2);
  191.         panelReg.add(labelReg4);
  192.         panelReg.add(textReg3);
  193.         panelReg.add(buttonReg1);
  194.  
  195.         //everything for chooseteam panel
  196.         panelChTm = new JPanel();
  197.         panelChTm.setBounds(0, 0, 0, 0);
  198.         panelChTm.setLayout(null);
  199.         panelChTm.setSize(600, 600);
  200.         panelChTm.setBackground(Color.LIGHT_GRAY);
  201.  
  202.         labelChTm6 = new JLabel();
  203.         labelChTm6.setBounds(20, 50, 600, 50);
  204.         labelChTm6.setFont(new Font("Reklame Script", Font.BOLD, 12));
  205.         labelChTm6.setText("Team: Alpha     Team: Beta     Team: Charlie     Team: Delta     Team: Echo");
  206.  
  207.         labelChTm1 = new JLabel();
  208.         labelChTm1.setBounds(20, 90, 400, 50);
  209.         labelChTm1.setFont(new Font("Reklame Script", Font.BOLD, 10));
  210.         labelChTm1.setText("GK: MANUEK NEUER               GK: PETR CECH                GK: IKER CASILLAS");
  211.  
  212.         labelChTm2 = new JLabel();
  213.         labelChTm2.setBounds(20, 120, 400, 50);
  214.         labelChTm2.setFont(new Font("Reklame Script", Font.BOLD, 10));
  215.         labelChTm2.setText("DEF:                                GK:                                GK:");
  216.  
  217.         labelChTm3 = new JLabel();
  218.         labelChTm3.setBounds(20, 150, 400, 50);
  219.         labelChTm3.setFont(new Font("Reklame Script", Font.BOLD, 14));
  220.         labelChTm3.setText("MID1:                                GK:                                GK:");
  221.  
  222.         labelChTm4 = new JLabel();
  223.         labelChTm4.setBounds(20, 180, 400, 50);
  224.         labelChTm4.setFont(new Font("Reklame Script", Font.BOLD, 14));
  225.         labelChTm4.setText("MID2:                                GK:                                GK:");
  226.  
  227.         labelChTm5 = new JLabel();
  228.         labelChTm5.setBounds(20, 210, 400, 50);
  229.         labelChTm5.setFont(new Font("Reklame Script", Font.BOLD, 14));
  230.         labelChTm5.setText("STRIKE:                                GK:                                GK:");
  231.  
  232.         buttonChTm1 = new JButton();
  233.         buttonChTm1.setText("ALPHA");
  234.         buttonChTm1.setBounds(150, 100, 90, 30);
  235.         buttonChTm1.setLocation(20, 250);
  236.  
  237.         buttonChTm2 = new JButton();
  238.         buttonChTm2.setText("BETA");
  239.         buttonChTm2.setBounds(150, 100, 90, 30);
  240.         buttonChTm2.setLocation(130, 250);
  241.  
  242.         buttonChTm3 = new JButton();
  243.         buttonChTm3.setText("CHARLIE");
  244.         buttonChTm3.setBounds(150, 100, 90, 30);
  245.         buttonChTm3.setLocation(220, 250);
  246.  
  247.         buttonChTm4 = new JButton();
  248.         buttonChTm4.setText("DELTA");
  249.         buttonChTm4.setBounds(150, 100, 90, 30);
  250.         buttonChTm4.setLocation(300, 250);
  251.  
  252.         buttonChTm5 = new JButton();
  253.         buttonChTm5.setText("ECHO");
  254.         buttonChTm5.setBounds(150, 100, 90, 30);
  255.         buttonChTm5.setLocation(400, 250);
  256.  
  257.         panelChTm.add(labelChTm1);
  258.         panelChTm.add(labelChTm2);
  259.         panelChTm.add(labelChTm3);
  260.         panelChTm.add(labelChTm4);
  261.         panelChTm.add(labelChTm5);
  262.         panelChTm.add(labelChTm6);
  263.         panelChTm.add(buttonChTm1);
  264.         panelChTm.add(buttonChTm2);
  265.         panelChTm.add(buttonChTm3);
  266.         panelChTm.add(buttonChTm4);
  267.         panelChTm.add(buttonChTm5);
  268.  
  269.         //Everything for play panel
  270.         panelPlay = new JPanel();
  271.         panelPlay.setBounds(0, 0, 0, 0);
  272.         panelPlay.setLayout(null);
  273.         panelPlay.setSize(600, 600);
  274.         panelPlay.setBackground(Color.LIGHT_GRAY);
  275.  
  276.         labelPlay1 = new JLabel();
  277.         labelPlay1.setBounds(80, 20, 400, 50);
  278.         labelPlay1.setFont(new Font("Reklame Script", Font.PLAIN, 20));
  279.         labelPlay1.setText("Login if you have an existing account");
  280.  
  281.         panelPlay.add(labelPlay1);
  282.         panelPlay.setVisible(false);
  283.         frameReg.add(panelPlay);
  284.         //framePlay.add(panelPlay);
  285.  
  286.         frameReg.show();
  287.  
  288.         System.out.println("Establishing connection. Please wait ...");
  289.         try {
  290.             socket = new Socket(serverName, serverPort);
  291.             System.out.println("Connected: " + socket);
  292.             start();
  293.         } catch (UnknownHostException uhe) {
  294.             System.out.println("Host unknown: " + uhe.getMessage());
  295.         } catch (IOException ioe) {
  296.             System.out.println("Unexpected exception: " + ioe.getMessage());
  297.         }
  298.     }
  299.  
  300.     public void run() {
  301.         while (thread != null) {
  302.             try {
  303.                 if (!loginFlag && teamChose) {
  304.                     System.out.println("loginFlag false && teamChose true");
  305.                     //panelChTm.setVisible(false);
  306.                     //frameReg.setVisible(false);
  307.                     //panelPlay.add(labelPlay1);
  308.                     //framePlay.add(panelPlay);
  309.                     //frameReg.show();
  310.                     //teamChose = false;
  311.                     panelChTm.setVisible(false);
  312.                     frameReg.add(panelPlay);
  313.                     System.out.println("last e kaj hche");
  314.                     JOptionPane.showMessageDialog(panelLog, "LALALALLALALA");
  315.                 } else if (loginFlag) {
  316.                     System.out.println("login flag true.");
  317.                     panelLog.setVisible(false);
  318.                     frameReg.add(panelChTm);
  319.  
  320.                     buttonChTm1.addActionListener(new ActionListener() {
  321.                         @Override
  322.                         public void actionPerformed(ActionEvent ae) {
  323.                             teamChoose += " alpha";
  324.                             //System.out.println("team choose ta ai khne print krtesi"+teamChoose);
  325.                             try {
  326.                                 streamOut.writeUTF(teamChoose);
  327.                                 streamOut.flush();
  328.                             } catch (IOException ex) {
  329.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  330.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  331.                             }
  332.                             teamChose = true;
  333.                             loginFlag = false;
  334.                             //panelChTm.setVisible(false);
  335.                             //frameReg.add(panelPlay);
  336.                             //run();
  337.                         }
  338.                     });
  339.                     buttonChTm2.addActionListener(new ActionListener() {
  340.                         @Override
  341.                         public void actionPerformed(ActionEvent ae) {
  342.                             teamChoose += " beta";
  343.                             try {
  344.                                 streamOut.writeUTF(teamChoose);
  345.                                 streamOut.flush();
  346.                             } catch (IOException ex) {
  347.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  348.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  349.                             }
  350.                             teamChose = true;
  351.                             loginFlag = false;
  352.                             run();
  353.                         }
  354.                     });
  355.                     buttonChTm3.addActionListener(new ActionListener() {
  356.                         @Override
  357.                         public void actionPerformed(ActionEvent ae) {
  358.                             teamChoose += " charlie";
  359.                             try {
  360.                                 streamOut.writeUTF(teamChoose);
  361.                                 streamOut.flush();
  362.                             } catch (IOException ex) {
  363.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  364.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  365.                             }
  366.                             teamChose = true;
  367.                             loginFlag = false;
  368.                             run();
  369.                         }
  370.                     });
  371.                     buttonChTm4.addActionListener(new ActionListener() {
  372.                         @Override
  373.                         public void actionPerformed(ActionEvent ae) {
  374.                             teamChoose += " delta";
  375.                             try {
  376.                                 streamOut.writeUTF(teamChoose);
  377.                                 streamOut.flush();
  378.                             } catch (IOException ex) {
  379.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  380.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  381.                             }
  382.                             teamChose = true;
  383.                             loginFlag = false;
  384.                             run();
  385.                         }
  386.                     });
  387.                     buttonChTm5.addActionListener(new ActionListener() {
  388.                         @Override
  389.                         public void actionPerformed(ActionEvent ae) {
  390.                             teamChoose += " echo";
  391.                             try {
  392.                                 streamOut.writeUTF(teamChoose);
  393.                                 streamOut.flush();
  394.                             } catch (IOException ex) {
  395.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  396.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  397.                             }
  398.                             teamChose = true;
  399.                             loginFlag = false;
  400.                             run();
  401.                         }
  402.                     });
  403.  
  404.                 } else {
  405.                     buttonLog1.addActionListener(new ActionListener() {
  406.  
  407.                         @Override
  408.                         public void actionPerformed(ActionEvent ae) {
  409.                             //buttonLog1.setBackground(Color.GRAY);
  410.                             userNameLog = textLog1.getText();
  411.                             passwordLog = textLog2.getText();
  412.                             userNameLog += " " + passwordLog + " user";
  413.                             System.out.println("check krtesi userlog: " + userNameLog);
  414.  
  415.                             try {
  416.                                 streamOut.writeUTF(userNameLog);
  417.                                 streamOut.flush();
  418.  
  419.                             } catch (IOException ex) {
  420.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  421.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  422.                             }
  423.                         }
  424.                     });
  425.                     buttonLog2.addActionListener(new ActionListener() {
  426.                         @Override
  427.                         public void actionPerformed(ActionEvent ae) {
  428.                             //buttonLog2.setBackground(Color.GRAY);
  429.                             //System.out.println("register button clicked.");
  430.                             panelLog.setVisible(false);
  431.                             frameReg.add(panelReg);
  432.  
  433.                             try {
  434.                                 streamOut.writeUTF(registerLog);//register
  435.                                 streamOut.flush();
  436.  
  437.                             } catch (IOException ex) {
  438.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  439.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  440.                             }
  441.                         }
  442.                     });
  443.                     buttonReg1.addActionListener(new ActionListener() {
  444.                         @Override
  445.                         public void actionPerformed(ActionEvent ae) {
  446.                             //buttonReg1.setBackground(Color.GRAY);
  447.                             //System.out.println("register button clicked.");
  448.                             panelReg.setVisible(false);
  449.                             frameReg.add(panelLog);
  450.                             panelLog.setVisible(true);
  451.  
  452.                             firstNameReg = textReg1.getText();
  453.                             userNameReg = textReg2.getText();
  454.                             passwordReg = textReg3.getText();
  455.                             //teamNameReg = textReg4.getText();
  456.                             allRegInfo += " " + firstNameReg + " " + userNameReg + " " + passwordReg + " registered";
  457.                             System.out.println("First name: " + firstNameReg + " User: " + userNameReg + " Password: " + passwordReg);
  458.  
  459.                             try {
  460.                                 streamOut.writeUTF(allRegInfo);//registered
  461.                                 streamOut.flush();
  462.  
  463.                             } catch (IOException ex) {
  464.                                 Logger.getLogger(TCPclient.class.getName()).log(Level.SEVERE, null, ex);
  465.                                 stop();//THIS STOP() IS VERy IMPORTATN X_X
  466.                             }
  467.                         }
  468.                     });
  469.                 }
  470.                 streamOut.writeUTF(console.readLine());
  471.                 streamOut.flush();
  472.             } catch (IOException ioe) {
  473.                 System.out.println("Sending error: " + ioe.getMessage());
  474.                 stop();
  475.             }
  476.         }
  477.     }
  478.  
  479.     public void handle(String msg) {
  480.         System.out.println("Prottek bar check krtesi msg: " + msg);
  481.         if (msg.equals("matched")) {
  482.             System.out.println("Server sent *" + msg + "*");
  483.         } else if (msg.endsWith("failed")) {
  484.             JOptionPane.showMessageDialog(panelLog, msg);
  485.             System.err.println("LogIn failed");
  486.         } else if (msg.endsWith("successful")) {
  487.             //JOptionPane.showMessageDialog(panelLog, "Login successful. Welcome");
  488.             int input = JOptionPane.showOptionDialog(null, "Login Successful", "The title", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
  489.  
  490.             if (input == JOptionPane.OK_OPTION) {
  491.                 panelChTm.setVisible(false);
  492.                 panelLog.setVisible(false);
  493.                 panelPlay.setVisible(true);
  494.                
  495.                 System.out.println(">>>>>>ok hche");
  496.             }
  497.             loginFlag = true;
  498.             System.out.println(">>>>>>>>>> client er handle kaj krtese");
  499.             //run();
  500.         } else if (msg.equals("check")) {
  501.             JOptionPane.showMessageDialog(panelLog, "Checking this ");
  502.         } else if (msg.equals(".bye")) {
  503.             System.out.println("Good bye. Press RETURN to exit ...");
  504.             stop();
  505.         } else {
  506.             System.out.println("else activate hoise... msg: " + msg);
  507.         }
  508.     }
  509.  
  510.     public void start() throws IOException {
  511.         console = new DataInputStream(System.in);
  512.         streamOut = new DataOutputStream(socket.getOutputStream());
  513.         if (thread == null) {
  514.             client = new ChatClientThread(this, socket);
  515.             thread = new Thread(this);
  516.             thread.start();
  517.         }
  518.     }
  519.  
  520.     public void stop() {
  521.         if (thread != null) {
  522.             thread.stop();
  523.             thread = null;
  524.         }
  525.         try {
  526.             if (console != null) {
  527.                 console.close();
  528.             }
  529.             if (streamOut != null) {
  530.                 streamOut.close();
  531.             }
  532.             if (socket != null) {
  533.                 socket.close();
  534.             }
  535.         } catch (IOException ioe) {
  536.             System.out.println("Error closing ...");
  537.         }
  538.         client.close();
  539.         client.stop();
  540.     }
  541.  
  542.     public static void main(String args[]) throws SQLException, ClassNotFoundException {
  543.         TCPclient client = null;
  544.         client = new TCPclient("localhost", 2000);
  545.  
  546.         /*Connection conn = null;
  547.          try {
  548.          Class.forName("com.mysql.jdbc.Driver");
  549.          conn = (Connection) DriverManager.getConnection(ConnString, UserName, Password);
  550.          System.out.println("Connected");
  551.          Statement st = (Statement) conn.createStatement();
  552.          String insert = "INSERT INTO `team` (`team_id`, `team_name`, `gk`, `def`, `mid1`, `mid2`, `strike`) "
  553.                  + "VALUES ('1', 'alpha', 'a', 'f', 'a', 'cvb', 'b');";
  554.          st.executeUpdate(insert);
  555.          } catch (SQLException e) {
  556.          System.err.println(e);
  557.          }*/
  558.     }
  559.  
  560. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement