From ee8e1d78cfc0bdd66f08dec561611619eba512e8 Mon Sep 17 00:00:00 2001 From: esoe Date: Tue, 27 Sep 2022 17:45:36 +0300 Subject: [PATCH] qq --- src/main/java/ru/molokoin/App.java | 2 +- src/main/java/ru/molokoin/ExchangeServer.java | 135 ++++++----- .../java/ru/molokoin/MainFrameController.java | 15 +- src/main/java/ru/molokoin/SystemInfo.java | 13 -- src/main/java/ru/molokoin/UploadServer.java | 220 ------------------ .../classes/ru/molokoin/ExchangeServer.class | Bin 4442 -> 4588 bytes .../ru/molokoin/MainFrameController.class | Bin 1528 -> 1707 bytes target/classes/ru/molokoin/SystemInfo.class | Bin 561 -> 0 bytes .../molokoin/{ => example}/UploadServer.class | Bin 7260 -> 7276 bytes 9 files changed, 88 insertions(+), 297 deletions(-) delete mode 100644 src/main/java/ru/molokoin/SystemInfo.java delete mode 100644 src/main/java/ru/molokoin/UploadServer.java delete mode 100644 target/classes/ru/molokoin/SystemInfo.class rename target/classes/ru/molokoin/{ => example}/UploadServer.class (97%) diff --git a/src/main/java/ru/molokoin/App.java b/src/main/java/ru/molokoin/App.java index 3ada3e9..bb7a7ec 100644 --- a/src/main/java/ru/molokoin/App.java +++ b/src/main/java/ru/molokoin/App.java @@ -9,7 +9,7 @@ import javafx.stage.Stage; /** - * JavaFX App + * */ public class App extends Application { diff --git a/src/main/java/ru/molokoin/ExchangeServer.java b/src/main/java/ru/molokoin/ExchangeServer.java index 64d33a5..fdaa8ec 100644 --- a/src/main/java/ru/molokoin/ExchangeServer.java +++ b/src/main/java/ru/molokoin/ExchangeServer.java @@ -16,15 +16,17 @@ public class ExchangeServer extends Thread{ private int port = 8081; private int num = 0; public static boolean isActive; - public ServerSocket serverSocket; - public Socket socket; + public static ServerSocket serverSocket; + public static Socket socket; - ExchangeServer(){ + ExchangeServer() throws Exception{ isActive = true; + serverSocket = new ServerSocket(port); } - ExchangeServer (int port){ + ExchangeServer (int port) throws Exception{ isActive = true; setPort(port); + serverSocket = new ServerSocket(port); } /** * @return the port @@ -39,85 +41,98 @@ public class ExchangeServer extends Thread{ this.port = port; } //осановка сервера - public void finish(){ + public void finish() throws Exception{ isActive = false; } + public void connect() throws Exception{} + //запуск сервера @Override public void run(){ System.out.printf("%s started... \n", Thread.currentThread().getName()); - try (ServerSocket serverSocket = new ServerSocket(port)) { + try { System.out.println("Server started at port: " + port + " ..."); + do { + if (isActive){ + // ожидаем подключения + Socket socket = serverSocket.accept(); + System.out.println("Client connected ..."); + num++; - while (isActive) { - // ожидаем подключения - Socket socket = serverSocket.accept(); - System.out.println("Client connected ..."); - num++; - - // для подключившегося клиента открываем потоки - // чтения и записи - try (BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)); - PrintWriter output = new PrintWriter(socket.getOutputStream())) { + // для подключившегося клиента открываем потоки + // чтения и записи + try (BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)); + PrintWriter output = new PrintWriter(socket.getOutputStream())) { - // ждем первой строки запроса - while (!input.ready()) ; + // ждем первой строки запроса + while (!input.ready()); - // считываем и печатаем все что было отправлено клиентом - System.out.println(); - String firstLine = null; - String querry = null; - while (input.ready()) { - String line = input.readLine(); - if (firstLine == null){ - firstLine = line; - if(firstLine.startsWith("GET")){ - querry = "GET"; - } - if(firstLine.startsWith("POST")){ - querry = "POST"; + // считываем и печатаем все что было отправлено клиентом + System.out.println(); + String firstLine = null; + String querry = null; + while (input.ready()) { + String line = input.readLine(); + if (firstLine == null){ + firstLine = line; + if(firstLine.startsWith("GET")){ + querry = "GET"; + } + if(firstLine.startsWith("POST")){ + querry = "POST"; + } + System.out.println("firstLine: " + firstLine); + System.out.println("querry: " + querry); } - System.out.println("firstLine: " + firstLine); - System.out.println("querry: " + querry); + //System.out.println(line); } - //System.out.println(line); - } - // отправляем ответ - System.out.println("отправка ответа от сервера:"); - String path = new File("").getAbsolutePath(); - String fileName = "upload.http"; - path = path + "/src/main/webapp/"; - File file = new File(path + fileName); - //String text = ""; - try (BufferedReader br = new BufferedReader(new FileReader(file))){ - String line; - while ((line = br.readLine()) != null) { - System.out.println(line); - output.println(line); - //text = text + " " + line; + // отправляем ответ + System.out.println("отправка ответа от сервера:"); + String path = new File("").getAbsolutePath(); + String fileName = "upload.http"; + path = path + "/src/main/webapp/"; + File file = new File(path + fileName); + //String text = ""; + try (BufferedReader br = new BufferedReader(new FileReader(file))){ + String line; + while ((line = br.readLine()) != null) { + System.out.println(line); + output.println(line); + //text = text + " " + line; + } + output.flush(); + } + catch (IOException e) { + e.printStackTrace(); } - output.flush(); - } - catch (IOException e) { - e.printStackTrace(); - } - // по окончанию выполнения блока try-with-resources потоки, - // а вместе с ними и соединение будут закрыты - System.out.println("Client disconnected!"); - System.out.println("num: " + num); + // по окончанию выполнения блока try-with-resources потоки, + // а вместе с ними и соединение будут закрыты + System.out.println("Client disconnected!"); + System.out.println("num: " + num); + } } - } - System.out.printf("%s finished... \n", Thread.currentThread().getName()); + else { + System.out.printf("%s finished... \n", Thread.currentThread().getName()); + serverSocket.close(); + socket.close(); + return; //завершение потока + } + } while (true); + //serverSocket.close(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { - new ExchangeServer().start(); + try { + new ExchangeServer().start(); + } catch (Exception e) { + System.out.println(e); + } } } diff --git a/src/main/java/ru/molokoin/MainFrameController.java b/src/main/java/ru/molokoin/MainFrameController.java index 67a5a8e..fc5573d 100644 --- a/src/main/java/ru/molokoin/MainFrameController.java +++ b/src/main/java/ru/molokoin/MainFrameController.java @@ -19,7 +19,11 @@ public class MainFrameController implements Initializable{ @Override public void initialize(URL location, ResourceBundle resources) { System.out.println("Инициализация компонентов интерфейса ..."); - server = new ExchangeServer(); + try { + server = new ExchangeServer(); + } catch (Exception ex) { + System.out.println(ex); + } } @FXML @@ -28,10 +32,15 @@ public class MainFrameController implements Initializable{ btn.setText("STOP"); server.start(); - }else { - btn.setText("START"); + + }else { + btn.setText("START"); + try { server.finish(); + } catch (Exception ex) { + System.out.println(ex); } + } } } diff --git a/src/main/java/ru/molokoin/SystemInfo.java b/src/main/java/ru/molokoin/SystemInfo.java deleted file mode 100644 index 9def5ed..0000000 --- a/src/main/java/ru/molokoin/SystemInfo.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.molokoin; - -public class SystemInfo { - - public static String javaVersion() { - return System.getProperty("java.version"); - } - - public static String javafxVersion() { - return System.getProperty("javafx.version"); - } - -} \ No newline at end of file diff --git a/src/main/java/ru/molokoin/UploadServer.java b/src/main/java/ru/molokoin/UploadServer.java deleted file mode 100644 index 368d7e7..0000000 --- a/src/main/java/ru/molokoin/UploadServer.java +++ /dev/null @@ -1,220 +0,0 @@ -package ru.molokoin; - -/** - UploadServer program - simple file upload web-server - Author: Denis Volkov (c) 2007 - For information and support visit http://www.denvo.ru - - This program is FREEWARE, you are free to use any part of code - as well as whole program in your development provided that you - remain original copyrights and site name in your source. - - The product is distributed "as is". The author of the Product will - not be liable for any consequences, loss of profit or any other kind - of loss, that may occur while using the product itself and/or together - with any other software. - -*/ - -import java.net.*; -import java.io.*; -import java.security.*; -import java.util.*; -import java.util.regex.*; -import java.nio.charset.*; - -public class UploadServer extends Thread -{ - private final static String httpHeader = "HTTP/1.1 200 OK\r\n" - + "Content-Type: text/html\r\n" - + "\r\n"; - private final static String uploadFormString = httpHeader - + "
\r\n" - + "\r\n" - + "\r\n" - + "
\r\n\r\n"; - - private final Charset streamCharset = Charset.forName("ISO-8859-1"); - - private ServerSocket serverSocket; - private Socket clientSocket; - - UploadServer(int port) throws Exception - { - serverSocket = new ServerSocket(port); - System.err.println("Server ready @" + port); - } - - public void run() - { - while(true) - { - try - { - clientSocket = serverSocket.accept(); - System.err.println("Client connection accepted from " - + clientSocket.getInetAddress().toString()); - // Read and process data from socket - processConnection(); - } - catch(Exception e) - { - System.err.println("Exception in run's main loop"); - e.printStackTrace(); - } - // Close socket - try - { - clientSocket.close(); - } - catch(Exception e) { } - System.err.println("Client connection closed"); - } - } - - private void processConnection() throws Exception - { - InputStream inStream = clientSocket.getInputStream(); - BufferedReader in = new BufferedReader(new InputStreamReader(inStream, streamCharset)); - OutputStream out = clientSocket.getOutputStream(); - // Read requiest header - String headerLine, firstLine = null; - Map headerData = new TreeMap(); - Pattern headerPattern = Pattern.compile("([^\\:]+)\\:(.*)"); - while((headerLine = in.readLine()).length() > 0) - { - if(firstLine == null) - firstLine = headerLine; - else - { - Matcher m = headerPattern.matcher(headerLine); - if(m.matches()) - { - headerData.put(m.group(1).trim(), m.group(2).trim()); - } - } - System.out.println("HEADER: " + headerLine); - } - // Process first line of request - if(firstLine.startsWith("GET")) - { - System.out.println("Send upload form"); - // Show upload form - out.write(uploadFormString.getBytes()); - } - else if(firstLine.startsWith("POST")) - { - // Get body info - int contentLength = Integer.parseInt((String)(headerData.get("Content-Length"))); - String contentType = (String)(headerData.get("Content-Type")); - String boundary = "\r\n--" + contentType.substring(contentType.indexOf("boundary=") + 9) + "--"; - System.out.println("File upload, reading body: " + contentLength + " bytes"); - // Prepare to reading - Pattern fileNamePattern = Pattern.compile("filename=\"([^\"]+)\""); - OutputStreamWriter writer = null; - MessageDigest digestMD5 = MessageDigest.getInstance("MD5"); - String fileName = null; - String prevBuffer = ""; - char[] buffer = new char[16 << 10]; - int totalLength = contentLength; - // Reading loop - while(contentLength > 0) - { - if(writer == null) - { - // Read strings - String bodyLine = in.readLine(); - contentLength -= bodyLine.length() + 2; - // Find name of file - if(bodyLine.length() > 0) - { - Matcher m = fileNamePattern.matcher(bodyLine); - if(m.find()) - { - fileName = m.group(1); - } - } - else if(fileName != null) - { - OutputStream stream = new FileOutputStream(fileName); - if(digestMD5 != null) - stream = new DigestOutputStream(stream, digestMD5); - writer = new OutputStreamWriter(stream, streamCharset); - } - else - throw new RuntimeException("Name of uploaded file not found"); - } - else - { - // Read data from stream - int readLength = Math.min(contentLength, buffer.length); - readLength = in.read(buffer, 0, readLength); - if(readLength < 0) - break; - contentLength -= readLength; - // Find boundary string - String curBuffer = new String(buffer, 0, readLength); - String bothBuffers = prevBuffer + curBuffer; - int boundaryPos = bothBuffers.indexOf(boundary); - if(boundaryPos == -1) - { - writer.write(prevBuffer, 0, prevBuffer.length()); - prevBuffer = curBuffer; - } - else - { - writer.write(bothBuffers, 0, boundaryPos); - break; - } - } - // Write stats - System.out.print("Read: " + (totalLength - contentLength) - + " Remains: " + contentLength + " Total: " + totalLength - + " bytes \r"); - } - System.out.println("Done "); - writer.close(); - // Finalize digest calculation - byte[] md5Sum = digestMD5.digest(); - StringBuffer md5SumString = new StringBuffer(); - for(int n = 0; n < md5Sum.length; ++ n) - md5SumString.append(printByte(md5Sum[n])); - // Output client info - String answer = httpHeader + "

Upload completed, " + totalLength - + " bytes, MD5 sum: " + md5SumString.toString() + "" - + "

Next file\r\n\r\n"; - out.write(answer.getBytes()); - } - } - - private static String printByte(byte b) - { - int bi = ((int)b) & 0xFF; - if(bi < 16) - return "0" + Integer.toHexString(bi); - else - return Integer.toHexString(bi); - } - - public static void main(String[] args) - { - try - { - if(args.length < 1) - { - System.out.println("Usage: UploadServer "); - int port = 8081; - UploadServer server = new UploadServer(port); - server.start(); - return; - } - UploadServer server = new UploadServer(Integer.parseInt(args[0])); - server.start(); - } - catch(Exception e) - { - System.err.println("Error in main"); - e.printStackTrace(); - } - } -} diff --git a/target/classes/ru/molokoin/ExchangeServer.class b/target/classes/ru/molokoin/ExchangeServer.class index 5240a0cf5552997fab0164de60fa63ddcc0db613..5a1271ec2e521ac8cd1b3863f88bf5e5b97f8c15 100644 GIT binary patch literal 4588 zcmai2dw5gj8UKB0nv*7{EiFT-?CLhBf9?+-=IDO!IZ2vgdG~ zcbmI5@6GB^(j2b?aV3v*w zRF;9_b(F#*vw#lGna$PVMVW?+6lP5e&WCxpL|D|4=fV|rYvul>I(+aeRJO$u#>z}z zw_$dLyW`Zlx-A(A$Jd6i!bULJDugE~TD zXs?xY1c*uR)UiRpYPRL#2?^*;IyU1jfftcfqQ&#Rvvbo)JTJQGsU`6keO#LhHzO)2 zHBh4(+k7_acMYKSr5CezK9r(+x93Ka~J zqFZ!R9vVdz9ki4ofs}@%!hDAl&snof=1y~`6;4FMW^{?OPV3kXQ=xQC*RstF>p6}U z6Gb<2lng=xmbf>gaCOcB=LkOkW$}FkJLLLKv8hAJ>yGX%b!#2)!SwQ1V4SntKB z804!uI=j61jDo)>W~MC>6Rh>(DF*HKjA5DsvU-}fA0In)-}v!UyT=cX4~-ukKUiyT z42=(S+ga3}x|gfnJeKdlpoY)##mPtBvRIr7JgdM;y&rAzc}~X{L_x7{Yj-*s&sfH) zu+{6umxw2miYLR-re4cRiN0UfF^I1)ZTiFUjM2fMzM?oErsyS^& zn)||hNp~3CECS6M4)Ap-Mwd^B7w`@7;5T_|(t`q@@gn}cQ$9mFUPL9`*AvgAd&OPD zIVbKI05X4k?BOL$Zfna9%98Oj(@@C~OBQxVl+a6i+5)7g>t3T?R`*xoxHP za4O#rNMx{tE-Zera`7WhCp-E4MaN%l7u(q-+4{O<>)+2wv3xA@&2Wd!E$lRAPQ$kV z(N?|SOhWW^CNpNl5RG`1CqmW!rJ~;fP8`iV_U2_p zT9oG4C}{J=lnT@07S%IeiwbY-zFi}gd8v(M!o!u%{Ywh4nUH|s-(8BBLEqEx$DIf_VV z6h`REEVc}xZv^QP^atIe7?7=9Blt+LG~mwSzI_w_A%`p;R6&mlYJ=D)+k1lEfafIc z2zY~@fT#N5EIzRhTJ^(0jjJbet0#h59_OctGvFx#=)iwcwza~xE%51y=LGUTLLSBb zQ1vq-_*@pB4|=P=7%UT|1KuNeo)@dX>Rb$Zg|7G{Q0AQQX3(dCeihUmeP0L#d?Wa} zs9HXVYRU;zP)?v!hJ%4}Di#V>oSb+gP@2V|K=}#WBAbT?aYN8AORv2Q_>Twmfd3?X z0X^s+L{-2a(4XguLlz@)><{>}I3|jG&vuBT?++Yz&8E8?PX$U(V73T5F^C!Mvhv!i zhT{SEiL*g5$l<}WSFdb132$TjAj%sWpNF@hQKYzqSO^-9Pj}vMT%@0zCUh7UKN`Zz zS^VTs8=ZaZ5HuB1yVM@W>2md?dXi(S%Bn2JuuGj*Z!&-r>TOpk$91j+t_2)xTpL}R zcwS=Hp)sa0a2;y+oB3MYh#-FmwPF!g;3jl(mSBb6#osCS<5oPx-MzRCkK%SbjyCK= zJD$Z#b|4)%zy|*yR^updjbRO5#ag^Yx_`5{zk`j+hfS&io7Ls)(OcPthuCj#fT5!7 zt+#RB&;EHAwi5X^b%agxF>F^avB5o!w5tXEt~;>9wGKO78!5b>NqrY1E?=uW;ri%2$Y7 zW)-CV6=!8c`wV`K-@r%AE%+_@l@ocTeWOC9`7FrY3ZgE>Yxo`f#OB8DIaBxpZTl+b zUORzh@MusPdNmxe{~{XO2K*N_8Xn=_JGhA7@-t|hKoXVjrgg~j-~B~w9s$mvVgq;1 zz`vM7dHDpZsQ>@+5Ikd^2{cZNjfZ6DQ*9i}%Fdvy)tsAy4CvPRZl19H*Gq zj6#J*@TV;PJP5zkF9zw~4v|V))^a{`PS91;Kw$6g!vlQS9>gr{DJu3g_y_*U^9s7= XHN25CBmY0AT|*U>!oPUv!khmCgFaq8 literal 4442 zcma)9Yj{)T9sj+jNlucUrZiknK`qjX5@9Iwl*dY+Ng(j4EXpi@Ld$ZSH>gqF#%6HW!VB^g+NI%+a=(SXBwk+e3!}1O#)iRVQ)!AcbKG`+~kNzns&V_*F9(u z@MZEO6-6Y@mONY#PsZ*0sH1x31}a^WikU%_Agm#T@&E)TXz;=(XOlFj?re$%KLP^f zP4T3;I@{H5TCI`x1d)ZCQqf3aL&S>9b$-)hcg8aU)0#fo3xwjSUNLh+ka}*@P=#9r z)QoAbah#xTE6fO!4)Jvmb*7W3t!y%Y8K_oq$0#qh?9SL`mxh_BAyq0%4^4E)Atd4ZiMWaaxBc9ww(s?jc%oiB%#BnrA4Gma8v(plI zhrojBB4v3An~SzwybXCsqh&RyV7MoanJqyq#3C8_TU0D&PK{)xt7LIDo`{*2ANLDP zanr2ex2lL;B{SBj3ZfCqq>$xQGX_u@y zF*uU9S@NzCm_3&CkCY)f*J)^x(eT?TSAq2VdJP*SSk-ZFA}PJ_poTWE%6yS%)J!vb z#uozYRG3>nemul*E=k0h2vyNkGRY({V-lr`&#_(#kzAbZ=rAoawvL4@3;tmNy>PZ7 zna<{O(LD~L9WfPAX5~nX9DN#0F!&*6QV|!!RDi}n7acSN(24CT;sVoMNjzugu~=61 zEp{Xsi&(KG?mDAk2ND9_^{vac&SSrFy_hWG$Wt;?w<0OSn-Z9l55P@|Kbl#_ehYR= zc1!xyr6jv+d&A5PDx|Xu-f=2*qZPMJOZsJ(hDY!yJwq2XXYFCnF&m3~P<%qT8GK&q z+e4?1=o>}jqS~wB3-}^^z`hXM?R3OVGCdxb=}|6mKdIqMPWDI&+4}t0PrBtxTZ1@& zr&WAqRM&7bOv6EZRUqi}m(0ev&9*gWS#0v-YfSPr%`L5dd_$nLBW`7Esm7@CooT#uuBkkb}jhp?D`C{R(Kv7+@|5#EQ7nC)x=^(ubE`=c0Lp&(A+ zB^kk!fgwK4D@m()Jr!<^KIm6eH$YwfaxXx-g=j=oisSIzm9$ZlIav{44jXL#+ zys0!?M2>Ae5{tED(`n1hWK1@tDa97C*So}y+Do{s;->{^vI3fUv9njiQ!I}@skq!} zC@i(;j#euYrMF)l=@+qhX1HZc_oJW4dCklAnZa2j*G`D;lwrn97r%br1S z!__mo!N_Z!H=aXt)1~K@5(xss$tCY>$LYl(q69bDn2-r(Acr*bfH~Mfx4ZY4M^4#} zhEX^X5m4G$+JYw|x{F*x-HOQ)E_2+nDv~a|5o9W`XI2;AWBG)UQ6^0J`HP0XIx%(1 ziLfHpHa;!JkHN*7Ye{9Ts3~!gWc0JEPTGv=6j{P|niqueBp4U6qGun zhBA&S|M@cF{y5H>NzVep#F}1I)KuJd=px3~lw8C_&&!y6o(BqaekW15{Cdb#iVA)w zV*;k2lDnEK08=rID=GYzyzq8%E8M9ZOL)!H9Bv)aQ0aiyi!@YH!&GXY=4hGZN*dNu z>6ptn(FLE#>#OG|jq%o8!1z;~xZr)x=JX=4-n5nw?_@f}oG zT?E8848%7KGRljts9M@MYfLboDhTjCO>cyW|8x&-57&BL#q73{OQ_Fb zZc7gLZWK*oRUa0%NjrP-nboA~Lt|TbNiUYly&N70H|4N8hqXDhb}Lh7=djW6NMW0~ zQPXyT0e+ZK7KT?CzCLVe>%-PI-IGJ42itnl)r+*D_95f!WqYyP@at+0j~y9$k5Y2j zCyanFg5B66x1TUd^}sc()k}?l9tb~`!qeM*^a|?H{c`xRK8}X985P%t{;m6S_=!Gl0E^`2nQqK8 zLUQSMmU^h)DAz;R5Y)?!P&X>{kY0X*D-JoFm&YMJltZsH71*?(Nsr0klY$Q2k27r+cM7pW&7Iyt+^7;~@2s&v7| z#l=DK9GlKY(Ji_;t`!4f0GDu3yer;gMebFC%4CkFvPfCPafY%-+0U_3IiwuoI7#VN zx=CN+w4KYSx3 zW0lkSUNJ+7JH5CBtCTR?W*Hm7UU3z_#B1!z2gPF;0G*5H#X7u>H`u+8iDu$`gIp*1 z?Ee*KrNsFM{Mwn_ib1@^nMS-X(5By_jHny9`x?d(d%43=A)cg6$y-6(UR=lT5F$zs ze$SbpG>EB~{vnpD=yCoQ4q*ubD#Y-HiuS^Mi^}UAA7GM-1N?hm{?a;7b_27AkV5!l zm|Xh8_i&NC1HcW09^%dolrH8_RyM?@8~Xo+NvM~6Lzw;Xu%$s%p)@%BT;}5to zv+@_PFfl37A<@Ldt-r{X@w7C>&6n@I=bZOE-}(Lwd>%A@|NZ_GxWk*aajcdN(oC9+ zQ&bqqENwgQo#Kwu+$`2Mw%vwT&aUa)P>7u-7FrE=*V}s6^na;~dDU%6<9~hqbXj50 z@|?!oskUz(glvP~nlzLxsf0W+H4d%bf3O>Fi^Luw~EIZG$H~)mc;+ zIvs6!dt1#-lV?2l+giG`q!6;~+DgZ6*`&sVg1+y1w%hUyGOU`^84}BV&)MrLw#iH1 z2xa`a(3gV`XoO@Jmyfsm+YDOgzb8d1=96Gn#OrwgfQ<4uD*0?LOjw(Bz(xv7e_x;sy?BGbM zG)Yx*UnvL7MCSt*J`wMP(H8+#x#R;@4jJo8lI}^Ca94% delta 418 zcmX|-$xZ@65QhJr85|e~a9B0Cf{8@jQE*p8#SK|zPToet$t48l;LWo~(-(aL4_+iO zW8%RFF!6mn7-KOQQ|Ye1zV7P!(@);7Zsp_W?HxcCdP{i~__t8tb#X$QS0Tf#AcI92 zS%%o%Rm`Pg3CsLbOlYeNF5Spg4F&7il(E5?6c%&X;(bygv&|ssMycFx-&Ik-7=zrb zSw`*JQjo;HiUah}6HUu(IOIr0kvF8I&#PPJ*?G~d8|LXnjo(Ypo)d@^K!{gd!J8H- z0U_Fb4h_SN2!ecJ$Yz#KJ=8R}%1#T;c1u`a3<${MX(Vglv#_zTiD z76L0a)*cXPmw~*E9TF)UmwS&0I*iW$*kRj~=y)2WUjt(BqaVE(zz{{8T%|BVQ%4<- akIf6e546D~$_3z>hM{ zZBaCKGjr$MbLPy<$LHHSfMXmONDylN+@7k5x>wS(yUST1rWf8&8AuVzV|U@&6W1Hr zSN*XV1cc0q^ki^KNH$wNLh4N23KL1>EToYklpN`a%lWh~{2RAF5rm4P2JWQi`cl^` zFcsX%8KLgPyLSkA?cEdpOe&91ZMK~CFx|kH-l&ts2Eo#Bdl3;$Y+}nm_0QI)l_`#CUX#VdSV?-!um*L}To-B3=#R&SgCYW6{_Xpx!>a9!bQ?@k`hv1v> z-NBLctvDK7*_?@U`sfAOXMQALa@60Nn&)Um1kMGnawww2h!!`(A7)p|uc$mR@>`t= V)rnA3kJ0SJXv`lCVK3~r{{`uabqfFh diff --git a/target/classes/ru/molokoin/UploadServer.class b/target/classes/ru/molokoin/example/UploadServer.class similarity index 97% rename from target/classes/ru/molokoin/UploadServer.class rename to target/classes/ru/molokoin/example/UploadServer.class index 7b45696fa5fb7f5ed73575a7001a6add6126ca3c..f55fa7994d1ae82713e2828ba405766f697163dc 100644 GIT binary patch delta 71 zcmca(@y0^=)W2Q(7#JAL8SB{@m>3xpic0l!^K3x(ic0l!^Kr?NkpKV_ CBoYq*