Client and server now include a 1-byte stream ID alongside the 16-byte session ID (17 bytes total) so multiple logical streams can be multiplexed per session. Client: propagate streamID through connection helpers and send sessionID+streamID when establishing DTLS connections; default stream 0 for the first connection and subsequent goroutines pass incremental stream IDs. Server: read 17-byte header, split into sessionID and streamID, and track connections as streamEntry {id, conn} rather than a plain conn slice. AddConn/RemoveConn signatures updated to accept stream IDs; new logic evicts existing connection with the same stream ID. backendReaderLoop uses a local round-robin index (removed atomic usage) and closes connections on write errors. Also adjusted per-stream read deadlines and cleaned up connection closing in Cleanup().
Introduce multi-user proxy sessions: add an English README and update the Russian README. Server: implement SessionManager and UserSession to aggregate DTLS streams by a 16-byte session ID, create a single UDP backend per session, and deliver backend->client traffic using round-robin across active DTLS streams. Simplify per-connection logic (read session ID after DTLS handshake, reuse backend, improved accept/handshake/error handling). Client: add -session-id flag, generate or parse a 16-byte UUID, send the session ID immediately after establishing each DTLS stream, and propagate sessionID through connection loops. These changes improve stability (prevent endpoint thrashing) and enable multiple simultaneous users per proxy server.