codacy: minor fixes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 294d524..c8e9333 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1772,14 +1772,6 @@
 
 			endif()
 
-			if (UNIX)
-				create_test_app(test-fuzxy "test-apps/fuzxy.c"
-					""
-					""
-					""
-					""
-					"")
-			endif()
 		endif()
 
 		#
diff --git a/README.md b/README.md
index b0ccd4a..1e7ab63 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Travis Build Status](https://travis-ci.org/warmcat/libwebsockets.svg)](https://travis-ci.org/warmcat/libwebsockets) [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/qfasji8mnfnd2r8t?svg=true)](https://ci.appveyor.com/project/lws-team/libwebsockets) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3576/badge.svg)](https://scan.coverity.com/projects/3576) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2266/badge)](https://bestpractices.coreinfrastructure.org/projects/2266)
+[![Travis Build Status](https://travis-ci.org/warmcat/libwebsockets.svg)](https://travis-ci.org/warmcat/libwebsockets) [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/qfasji8mnfnd2r8t?svg=true)](https://ci.appveyor.com/project/lws-team/libwebsockets) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3576/badge.svg)](https://scan.coverity.com/projects/3576) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2266/badge)](https://bestpractices.coreinfrastructure.org/projects/2266) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/144fb195a83046e484a75c8b4c6cfc99)](https://www.codacy.com/app/lws-team/libwebsockets?utm_source=github.com&utm_medium=referral&utm_content=warmcat/libwebsockets&utm_campaign=Badge_Grade)
 
 ![overview](./doc-assets/lws-overview.svg)
 
diff --git a/READMEs/README.lws-meta.md b/READMEs/README.lws-meta.md
deleted file mode 100644
index dbca4c0..0000000
--- a/READMEs/README.lws-meta.md
+++ /dev/null
@@ -1,192 +0,0 @@
-# lws-meta protocol
-
-lws-meta is a lightweight ws subprotocol that accepts other ws connections
-to the same server inside it and multiplexes their access to the connection.
-
-```
-  Client                                                    Server
- 
-  conn1: \                                                / :conn1
-  conn2:  =   mux ------ lws-meta ws protocol ----- mux  =  :conn2
-  conn3: /                                                \ :conn3
-```
-
-You may have n client ws connections back to the server, but you now
-only have one tcp connection (and one SSL wrapper if using SSL) instead
-of n of those.
-
-If you currently make multiple ws connections back to the server, so you
-can have different protocols active in one webpage, this if for you.
-
- - The subprotocol code for the connections inside a lws-meta connection
-   need zero changes from being a normal ws connection.  It is unaware
-   it is inside an lws-meta parent connection.
-
- - The traffic on the lws-meta connection is indistinguishable from
-   standard ws traffic, so intermediaries won't object to it
-
- - The multiplexing is done in the protocol, **not by an extension**.  So
-   it's compatible with all browsers.
-
- - Javascript helper code is provided to very simply use lws-meta
-   protocol instead of direct connections.  The lws test server has
-   been converted to use this by default.
-
-# Converting your server
-
-1) include the provided lws-meta plugin (plugins/protocl_lws_meta.c) as an
-active protocol for your server.  You can do that using runtime plugins, or
-include the plugin sources into your server at build-time.  The lws test
-server uses the latter approach.
-
-That's all you need to do on the server side.
-
-# Converting your browser JS
-
-1) import lws-common.js
-
-2) Instantiate a parent lws-meta connection object
-
-```
-var lws_meta = new lws_meta_ws();
-```
-
-3) Connect the lws-meta object to your server
-
-```
-lws_meta.new_parent(get_appropriate_ws_url("?mirror=" + mirror_name));
-```
-
-4) Convert your actual ws connections to go via the lws_meta object
-
-```
-var my_ws = lws_meta.new_ws("", "dumb-increment-protocol");
-```
-
-The first arg is the URL path, the second arg is the ws protocol you want.
-
-That's it.  my_ws will get `onopen()`, `onmessage()` etc calls as before.
-
-# lws-meta wire protocol
-
-lws-meta works by adding some bytes at the start of a message indicating
-which channel the message applies to.
-
-Channel messages are atomic on the wire.  The reason is if we tried to
-intersperse other channel fragments between one channels message fragments,
-an intermediary would observe violations of the ws framing rule about
-having to start a message with TEXT or BINARY, and use only CONTINUATION
-for the subsequent fragments.  Eg
-
-```
-  [ ch1 TEXT NOFIN ] [ ch2 BINARY FIN ] [ ch1 CONTINUATION FIN ]
-```
-
-is illegal to an observer that doesn't understand lws-meta headers in the
-packet payloads.  So to avoid this situation, only complete messages may
-be sent from one subchannel in each direction at a time.
-
-Consequently, only the first fragment of each message is modified to
-have the extra two bytes identifying the subchannel it is aimed at, since
-the rest of the message from the same subchannel is defined to follow.
-
-If it makes latencies, modify the protocol sending large messages to
-send smaller messages, so the transmission of messages from other channels
-can be sent inbetween the smaller messages.
-
-## lws-meta commands
-
-1) CSTRING indicates a string terminated by 0x00 byte
-
-2) Channel IDs are sent with 0x20 added to them, to guarantee valid UTF-8
-
-### 0x41: RX: LWS_META_CMD_OPEN_SUBCHANNEL
-
-   - CSTRING: protocol name
-   - CSTRING: url
-   - CSTRING: cookie (7 bytes max)
-
-Client is requesting to open a new channel with the given protocol name,
-at the given url.  The cookie (eg, channel name) is only used in
-LWS_META_CMD_OPEN_RESULT, when the channel id is assigned, so it is
-applied to the right channel.
-
-### 0x42: TX: LWS_META_CMD_OPEN_RESULT
-
-   - CSTRING cookie
-   - BYTE channel id (0 indicates failed)
-   - CSTRING: selected protocol name
-
-The server is informing the client of the results of a previous
-open request.  The cookie the client sent to identify the request
-is returned along with a channel id to be used subsequently.  If
-the channel ID is 0 (after subtracting the transport offset of
-0x20) then the open request has failed.
-
-### 0x43: TX: LWS_META_CMD_CLOSE_NOTIFY
-
-   - BYTE channel id
-   - BYTE: payload length + 0x20
-   - BYTE: close code MSB
-   - BYTE: close code LSB
-   - PAYLOAD: payload (< 123 bytes)
-
-Server notifies the client that a child has closed, for whatever reason.
-
-### 0x44: RX: LWS_META_CMD_CLOSE_RQ
-   - BYTE: channel id
-   - BYTE: payload length + 0x20
-   - BYTE: close code MSB
-   - BYTE: close code LSB
-   - PAYLOAD: payload (< 123 bytes)
-
-The client requests to close a child connection
-
-### 0x45: TX: LWS_META_CMD_WRITE
-
-   - BYTE: channel id
-
-Normal write of payload n from lws-meta perspective is actually
-LWS_META_CMD_WRITE, channel id, then (n - 2) bytes of payload
-
-The command only appears at the start of a message, continuations do
-not have the command.
-
-## Protocol Notes
-
- - Once the subchannel is up, overhead is only +2 bytes per message
-
- - Close reasons are supported in both directions
-
- - Ping and Pong are only supported at the lws-meta level, using normal ws ping and pong packets.
-
- - Only the final close of the tcp lws-meta connection itself goes out as
-   a normal ws close frame.  Subchannels close is done in a normal TEXT
-   message using LWS_META_CMD_CLOSE_RQ and then the close packet payload.
-   This is so intermediaries do not mistake subchannel closures for the
-   tcp / ws link going down.
-
-   Messages that start with LWS_META_CMD_OPEN_SUBCHANNEL only contain those
-   commands but may contain any number of them for the whole duration of the
-   message.  The lws-meta js support collects child open requests made before
-   the parent lws-meta connection is open, and dumps them all in a single
-   message when it does open.
-
-   Messages that start with LWS_META_CMD_OPEN_RESULT or LWS_META_CMD_CLOSE_NOTIFY
-   only contain those two commands, but they may contain any number of them
-   for the whole duration of the message.
-
-
-# Current Implemention Limitations
-
- - only server side is supported in lws.  The client side JS for
-   a browser is supported.
-
- - max number of child connections per parent at the moment is 8
-
- - child connection URL paramter when opening the connection is
-   ignored
-
- - there is no ah attached when the child connections are
-   established inside the lws-meta parent.  So header access
-   functions will fail.
diff --git a/lib/core/connect.c b/lib/core/connect.c
index 2b6517c..7dd2a5e 100644
--- a/lib/core/connect.c
+++ b/lib/core/connect.c
@@ -138,7 +138,7 @@
 	 * role finalization
 	 */
 
-	if (wsi && !wsi->user_space && i->userdata) {
+	if (!wsi->user_space && i->userdata) {
 		wsi->user_space_externally_allocated = 1;
 		wsi->user_space = i->userdata;
 	}
@@ -155,7 +155,7 @@
 	 * role finalization
 	 */
 
-	if (wsi && !wsi->user_space && i->userdata) {
+	if (!wsi->user_space && i->userdata) {
 		wsi->user_space_externally_allocated = 1;
 		wsi->user_space = i->userdata;
 	}
diff --git a/lib/core/context.c b/lib/core/context.c
index cdd1b87..ba133eb 100644
--- a/lib/core/context.c
+++ b/lib/core/context.c
@@ -832,9 +832,6 @@
 
 	lwsl_info("Initial logging level %d\n", log_level);
 	lwsl_info("Libwebsockets version: %s\n", library_version);
-#if defined(GCC_VER)
-	lwsl_info("Compiled with  %s\n", GCC_VER);
-#endif
 
 #ifdef LWS_WITH_IPV6
 	if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DISABLE_IPV6))
@@ -1241,7 +1238,6 @@
 lws_context_deprecate(struct lws_context *context, lws_reload_func cb)
 {
 	struct lws_vhost *vh = context->vhost_list, *vh1;
-	struct lws *wsi;
 
 	/*
 	 * "deprecation" means disable the context from accepting any new
@@ -1255,7 +1251,8 @@
 	/* for each vhost, close his listen socket */
 
 	while (vh) {
-		wsi = vh->lserv_wsi;
+		struct lws *wsi = vh->lserv_wsi;
+
 		if (wsi) {
 			wsi->socket_is_permanently_unusable = 1;
 			lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "ctx deprecate");
@@ -1631,11 +1628,12 @@
 lws_context_destroy3(struct lws_context *context)
 {
 	struct lws_context **pcontext_finalize = context->pcontext_finalize;
-	struct lws_context_per_thread *pt;
 	int n;
 
 	for (n = 0; n < context->count_threads; n++) {
-		pt = &context->pt[n];
+#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)
+		struct lws_context_per_thread *pt = &context->pt[n];
+#endif
 
 		if (context->event_loop_ops->destroy_pt)
 			context->event_loop_ops->destroy_pt(context, n);
@@ -1666,7 +1664,6 @@
 #if defined(LWS_WITH_PEER_LIMITS)
 	uint32_t nu;
 #endif
-	int n;
 
 	lwsl_info("%s: ctx %p\n", __func__, context);
 
@@ -1729,12 +1726,14 @@
 			return;
 		}
 
-	if (!context->pt[0].event_loop_foreign)
+	if (!context->pt[0].event_loop_foreign) {
+		int n;
 		for (n = 0; n < context->count_threads; n++)
 			if (context->pt[n].inside_service) {
 				lws_context_unlock(context); /* } context --- */
 				return;
 			}
+	}
 
 	lws_context_unlock(context); /* } context ------------------- */
 
@@ -1750,7 +1749,6 @@
 {
 	volatile struct lws_foreign_thread_pollfd *ftp, *next;
 	volatile struct lws_context_per_thread *vpt;
-	struct lws_context_per_thread *pt;
 	struct lws_vhost *vh = NULL;
 	struct lws wsi;
 	int n, m;
@@ -1796,7 +1794,7 @@
 #endif
 
 	while (m--) {
-		pt = &context->pt[m];
+		struct lws_context_per_thread *pt = &context->pt[m];
 		vpt = (volatile struct lws_context_per_thread *)pt;
 
 		ftp = vpt->foreign_pfd_list;
diff --git a/lib/core/libwebsockets.c b/lib/core/libwebsockets.c
index 8666733..10b9ab9 100644
--- a/lib/core/libwebsockets.c
+++ b/lib/core/libwebsockets.c
@@ -1709,7 +1709,8 @@
 	    wsi->rxflow_change_to)
 		goto skip;
 
-	wsi->rxflow_change_to = LWS_RXFLOW_PENDING_CHANGE | !wsi->rxflow_bitmap;
+	wsi->rxflow_change_to = LWS_RXFLOW_PENDING_CHANGE |
+				(!wsi->rxflow_bitmap);
 
 	lwsl_info("%s: %p: bitmap 0x%x: en 0x%x, ch 0x%x\n", __func__, wsi,
 		  wsi->rxflow_bitmap, en, wsi->rxflow_change_to);
@@ -1850,7 +1851,9 @@
 
 		lwsl_info(" Proxy auth in use\n");
 
+#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)
 		proxy = p + 1;
+#endif
 	} else
 		vhost->proxy_basic_auth_token[0] = '\0';
 
@@ -1997,7 +2000,9 @@
 lwsl_timestamp(int level, char *p, int len)
 {
 #ifndef LWS_PLAT_OPTEE
+#ifndef _WIN32_WCE
 	time_t o_now = time(NULL);
+#endif
 	unsigned long long now;
 	struct tm *ptm = NULL;
 #ifndef WIN32
@@ -2132,9 +2137,7 @@
 lwsl_hexdump_level(int hexdump_level, const void *vbuf, size_t len)
 {
 	unsigned char *buf = (unsigned char *)vbuf;
-	unsigned int n, m, start;
-	char line[80];
-	char *p;
+	unsigned int n;
 
 	if (!lwsl_visible(hexdump_level))
 		return;
@@ -2148,8 +2151,8 @@
 	_lws_log(hexdump_level, "\n");
 
 	for (n = 0; n < len;) {
-		start = n;
-		p = line;
+		unsigned int start = n, m;
+		char line[80], *p = line;
 
 		p += sprintf(p, "%04X: ", start);
 
@@ -2558,6 +2561,8 @@
 	struct sockaddr_storage sin;
 	struct sockaddr *v;
 
+	memset(&sin, 0, sizeof(sin));
+
 #if defined(LWS_WITH_UNIX_SOCK)
 	if (LWS_UNIX_SOCK_ENABLED(vhost)) {
 		v = (struct sockaddr *)&serv_unix;
@@ -3659,9 +3664,10 @@
 lws_stats_log_dump(struct lws_context *context)
 {
 	struct lws_vhost *v = context->vhost_list;
-	int n, m;
-
-	(void)m;
+	int n;
+#if defined(LWS_WITH_PEER_LIMITS)
+	int m;
+#endif
 
 	if (!context->updated)
 		return;
diff --git a/lib/core/service.c b/lib/core/service.c
index 9e6c5e7..0954c23 100644
--- a/lib/core/service.c
+++ b/lib/core/service.c
@@ -232,7 +232,9 @@
 __lws_service_timeout_check(struct lws *wsi, time_t sec)
 {
 	struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi];
+#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)
 	int n = 0;
+#endif
 
 	(void)n;
 
@@ -244,9 +246,11 @@
 	    lws_compare_time_t(wsi->context, sec, wsi->pending_timeout_set) >
 			       wsi->pending_timeout_limit) {
 
+#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)
 		if (wsi->desc.sockfd != LWS_SOCK_INVALID &&
 		    wsi->position_in_fds_table >= 0)
 			n = pt->fds[wsi->position_in_fds_table].events;
+#endif
 
 		lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_C_TIMEOUTS, 1);
 
diff --git a/lib/misc/base64-decode.c b/lib/misc/base64-decode.c
index 64b84d7..de2efc8 100644
--- a/lib/misc/base64-decode.c
+++ b/lib/misc/base64-decode.c
@@ -55,12 +55,11 @@
 {
 	unsigned char triple[3];
 	int i;
-	int len;
 	int line = 0;
 	int done = 0;
 
 	while (in_len) {
-		len = 0;
+		int len = 0;
 		for (i = 0; i < 3; i++) {
 			if (in_len) {
 				triple[i] = *in++;
diff --git a/lib/misc/daemonize.c b/lib/misc/daemonize.c
index 807ca0f..c4bf28c 100644
--- a/lib/misc/daemonize.c
+++ b/lib/misc/daemonize.c
@@ -24,7 +24,7 @@
 
 #include "core/private.h"
 
-int pid_daemon;
+unsigned int pid_daemon;
 static char *lock_path;
 
 int get_daemonize_pid()
@@ -35,9 +35,6 @@
 static void
 child_handler(int signum)
 {
-	int fd, len, sent;
-	char sz[20];
-
 	switch (signum) {
 
 	case SIGALRM: /* timed out daemonizing */
@@ -47,9 +44,12 @@
 	case SIGUSR1: /* positive confirmation we daemonized well */
 
 		if (lock_path) {
+			char sz[20];
+			int len, sent;
+
 			/* Create the lock file as the current user */
 
-			fd = lws_open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640);
+			int fd = lws_open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640);
 			if (fd < 0) {
 				fprintf(stderr,
 				   "unable to create lock file %s, code=%d (%s)\n",
@@ -98,19 +98,22 @@
 {
 	struct sigaction act;
 	pid_t sid, parent;
-	int n, fd, ret;
-	char buf[10];
 
 	/* already a daemon */
 //	if (getppid() == 1)
 //		return 1;
 
 	if (_lock_path) {
-		fd = lws_open(_lock_path, O_RDONLY);
+		int n;
+
+		int fd = lws_open(_lock_path, O_RDONLY);
 		if (fd >= 0) {
+			char buf[10];
+
 			n = read(fd, buf, sizeof(buf));
 			close(fd);
 			if (n) {
+				int ret;
 				n = atoi(buf);
 				ret = kill(n, 0);
 				if (ret >= 0) {
@@ -141,7 +144,7 @@
 
 	/* Fork off the parent process */
 	pid_daemon = fork();
-	if (pid_daemon < 0) {
+	if ((int)pid_daemon < 0) {
 		fprintf(stderr, "unable to fork daemon, code=%d (%s)",
 		    errno, strerror(errno));
 		exit(9);
diff --git a/lib/misc/jws/jwk.c b/lib/misc/jws/jwk.c
index 3a34690..fca8346 100644
--- a/lib/misc/jws/jwk.c
+++ b/lib/misc/jws/jwk.c
@@ -158,7 +158,7 @@
 lws_jwk_export(struct lws_jwk *s, int private, char *p, size_t len)
 {
 	char *start = p, *end = &p[len - 1];
-	int n, m, limit = LWS_COUNT_RSA_ELEMENTS;
+	int n, limit = LWS_COUNT_RSA_ELEMENTS;
 
 	/* RFC7638 lexicographic order requires
 	 *  RSA: e -> kty -> n
@@ -202,6 +202,8 @@
 			limit = JWK_KEY_N + 1;
 
 		for (n = 0; n < limit; n++) {
+			int m;
+
 			if (!s->el.e[n].buf)
 				continue;
 			lwsl_info("%d: len %d\n", n, s->el.e[n].len);
diff --git a/lib/misc/jws/jws.c b/lib/misc/jws/jws.c
index 72cfc98..ae68dc8 100644
--- a/lib/misc/jws/jws.c
+++ b/lib/misc/jws/jws.c
@@ -255,7 +255,7 @@
 
 	/* 2) find length of first, hdr, block */
 
-	while (in[pos] != '.' && pos < (int)len)
+	while (pos < (int)len && in[pos] != '.')
 		pos++;
 	if (pos == (int)len)
 		return -1;
diff --git a/lib/misc/romfs.c b/lib/misc/romfs.c
index 099bf7d..3f120bf 100644
--- a/lib/misc/romfs.c
+++ b/lib/misc/romfs.c
@@ -119,15 +119,16 @@
 romfs_lookup(romfs_t romfs, romfs_inode_t start, const char *path)
 {
 	romfs_inode_t level, i = start, i_in;
-	const char *p, *n, *cp;
+	const char *p, *cp;
 	uint32_t next_be;
 
 	if (start == (romfs_inode_t)romfs)
 		i = skip_and_pad((romfs_inode_t)romfs);
 	level = i;
 	while (i != (romfs_inode_t)romfs) {
+		const char *n = ((const char *)i) + sizeof(*i);
+
 		p = path;
-		n = ((const char *)i) + sizeof(*i);
 		i_in = i;
 
 		set_cache(i, sizeof(*i));
@@ -142,7 +143,7 @@
 			cp++;
 		}
 
-		while (*p && *p == '/' && p[1] == '/')
+		while (*p == '/' && p[1] == '/')
 			p++;
 
 		if (!*cp && (!*p || *p == '/') &&
@@ -165,7 +166,7 @@
 		if (!*p && *cp == '/')
 			return NULL;
 
-		while (*p && *p == '/' && p[1] == '/')
+		while (*p == '/' && p[1] == '/')
 			p++;
 
 		if (*p == '/' && !*cp) {
diff --git a/lib/misc/sha-1.c b/lib/misc/sha-1.c
index 2e4db52..898f3f4 100644
--- a/lib/misc/sha-1.c
+++ b/lib/misc/sha-1.c
@@ -236,18 +236,14 @@
 void
 sha1_loop(struct sha1_ctxt *ctxt, const unsigned char *input, size_t len)
 {
-	size_t gaplen;
-	size_t gapstart;
 	size_t off;
-	size_t copysiz;
 
 	off = 0;
 
 	while (off < len) {
-		gapstart = COUNT % 64;
-		gaplen = 64 - gapstart;
+		size_t gapstart = COUNT % 64, gaplen = 64 - gapstart,
+		       copysiz = (gaplen < len - off) ? gaplen : len - off;
 
-		copysiz = (gaplen < len - off) ? gaplen : len - off;
 		memcpy(&ctxt->m.b8[gapstart], &input[off], copysiz);
 		COUNT += (unsigned char)copysiz;
 		COUNT %= 64;
diff --git a/lib/misc/threadpool/threadpool.c b/lib/misc/threadpool/threadpool.c
index c050c4a..10a007d 100644
--- a/lib/misc/threadpool/threadpool.c
+++ b/lib/misc/threadpool/threadpool.c
@@ -966,7 +966,6 @@
 {
 	enum lws_threadpool_task_status status;
 	struct lws_threadpool *tp;
-	char buf[160];
 
 	*task = wsi->tp_task;
 	if (!*task)
@@ -978,6 +977,7 @@
 
 	if (status == LWS_TP_STATUS_FINISHED ||
 	    status == LWS_TP_STATUS_STOPPED) {
+		char buf[160];
 
 		pthread_mutex_lock(&tp->lock); /* ================ tpool lock */
 		__lws_threadpool_task_dump(*task, buf, sizeof(buf));
diff --git a/lib/plat/esp32/esp32-helpers.c b/lib/plat/esp32/esp32-helpers.c
index 11eda87..a2fa5d2 100644
--- a/lib/plat/esp32/esp32-helpers.c
+++ b/lib/plat/esp32/esp32-helpers.c
@@ -543,7 +543,6 @@
 	struct lws_group_member *mem;
 	int n;
 #endif
-	char slot[8];
 	nvs_handle nvh;
 	uint32_t use;
 
@@ -587,6 +586,8 @@
 				(uint8_t *)&event->event_info.got_ip.ip_info.gw);
 
 		if (!nvs_open("lws-station", NVS_READWRITE, &nvh)) {
+			char slot[8];
+
 			lws_snprintf(slot, sizeof(slot) - 1, "%duse", try_slot);
 			use = 0;
 			nvs_get_u32(nvh, slot, &use);
@@ -1154,6 +1155,7 @@
 	nvs_close(nvh);
 	if (n == 3) {
 		lwsl_notice("%s: certs exist\n", __func__);
+		free(buf);
 		return 0; /* certs already exist */
 	}
 
diff --git a/lib/plat/optee/lws-plat-optee.c b/lib/plat/optee/lws-plat-optee.c
index 84d78bd..913d0b1 100644
--- a/lib/plat/optee/lws-plat-optee.c
+++ b/lib/plat/optee/lws-plat-optee.c
@@ -44,10 +44,12 @@
 LWS_VISIBLE int
 lws_send_pipe_choked(struct lws *wsi)
 {
-	struct lws *wsi_eff = wsi;
+	struct lws *wsi_eff;
 
 #if defined(LWS_WITH_HTTP2)
 	wsi_eff = lws_get_network_wsi(wsi);
+#else
+	wsi_eff = wsi;
 #endif
 
 	/* the fact we checked implies we avoided back-to-back writes */
diff --git a/lib/plat/unix/unix-caps.c b/lib/plat/unix/unix-caps.c
index 1b7489c..82b0e2b 100644
--- a/lib/plat/unix/unix-caps.c
+++ b/lib/plat/unix/unix-caps.c
@@ -46,10 +46,6 @@
 void
 lws_plat_drop_app_privileges(const struct lws_context_creation_info *info)
 {
-#if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP)
-	int n;
-#endif
-
 	if (info->gid && info->gid != -1)
 		if (setgid(info->gid))
 			lwsl_warn("setgid: %s\n", strerror(LWS_ERRNO));
@@ -75,10 +71,12 @@
 			_lws_plat_apply_caps(CAP_EFFECTIVE, info->caps,
 					     info->count_caps);
 
-			if (info->count_caps)
+			if (info->count_caps) {
+				int n;
 				for (n = 0; n < info->count_caps; n++)
 					lwsl_notice("   RETAINING CAPABILITY %d\n",
 						    (int)info->caps[n]);
+			}
 #endif
 
 		} else
diff --git a/lib/plat/unix/unix-sockets.c b/lib/plat/unix/unix-sockets.c
index bd4c4a6..693efd2 100644
--- a/lib/plat/unix/unix-sockets.c
+++ b/lib/plat/unix/unix-sockets.c
@@ -31,10 +31,12 @@
 lws_send_pipe_choked(struct lws *wsi)
 {
 	struct lws_pollfd fds;
-	struct lws *wsi_eff = wsi;
+	struct lws *wsi_eff;
 
 #if defined(LWS_WITH_HTTP2)
 	wsi_eff = lws_get_network_wsi(wsi);
+#else
+	wsi_eff = wsi;
 #endif
 
 	/* the fact we checked implies we avoided back-to-back writes */
diff --git a/lib/plat/windows/windows-service.c b/lib/plat/windows/windows-service.c
index cf8c9a3..a6adefb 100644
--- a/lib/plat/windows/windows-service.c
+++ b/lib/plat/windows/windows-service.c
@@ -34,7 +34,7 @@
 	struct lws *wsi;
 	unsigned int i;
 	DWORD ev;
-	int n, m;
+	int n;
 
 	/* stay dead once we are dead */
 	if (context == NULL || !context->vhost_list)
@@ -58,6 +58,7 @@
 		if (lws_service_flag_pending(context, tsi)) {
 			/* any socket with events to service? */
 			for (n = 0; n < (int)pt->fds_count; n++) {
+				int m;
 				if (!pt->fds[n].revents)
 					continue;
 
@@ -125,7 +126,7 @@
 
 	ev = WSAWaitForMultipleEvents(1, &pt->events, FALSE, timeout_ms, FALSE);
 	if (ev == WSA_WAIT_EVENT_0) {
-		unsigned int eIdx, err;
+		unsigned int eIdx;
 
 		WSAResetEvent(pt->events);
 
@@ -134,6 +135,8 @@
 			pt->context->tls_ops->fake_POLLIN_for_buffered(pt);
 
 		for (eIdx = 0; eIdx < pt->fds_count; ++eIdx) {
+			unsigned int err;
+
 			if (WSAEnumNetworkEvents(pt->fds[eIdx].fd, 0,
 					&networkevents) == SOCKET_ERROR) {
 				lwsl_err("WSAEnumNetworkEvents() failed "
diff --git a/lib/plat/windows/windows-sockets.c b/lib/plat/windows/windows-sockets.c
index c168a52..bf09350 100644
--- a/lib/plat/windows/windows-sockets.c
+++ b/lib/plat/windows/windows-sockets.c
@@ -6,10 +6,12 @@
 
 LWS_VISIBLE int
 lws_send_pipe_choked(struct lws *wsi)
-{	struct lws *wsi_eff = wsi;
+{	struct lws *wsi_eff;
 
 #if defined(LWS_WITH_HTTP2)
 	wsi_eff = lws_get_network_wsi(wsi);
+#else
+	wsi_eff = wsi;
 #endif
 	/* the fact we checked implies we avoided back-to-back writes */
 	wsi_eff->could_have_pending = 0;
diff --git a/lib/roles/h1/ops-h1.c b/lib/roles/h1/ops-h1.c
index 29bc6aa..3c21564 100644
--- a/lib/roles/h1/ops-h1.c
+++ b/lib/roles/h1/ops-h1.c
@@ -677,7 +677,6 @@
 		size_t o = sizeof(mtubuf) - LWS_PRE -
 			   LWS_HTTP_CHUNK_HDR_MAX_SIZE -
 			   LWS_HTTP_CHUNK_TRL_MAX_SIZE;
-		char c[LWS_HTTP_CHUNK_HDR_MAX_SIZE + 2];
 
 		n = lws_http_compression_transform(wsi, buf, len, wp, &out, &o);
 		if (n)
@@ -691,6 +690,7 @@
 			return olen;
 
 		if (wsi->http.comp_ctx.chunking) {
+			char c[LWS_HTTP_CHUNK_HDR_MAX_SIZE + 2];
 			/*
 			 * this only needs dealing with on http/1.1 to allow
 			 * pipelining
@@ -798,7 +798,7 @@
 		return 1;
 	}
 
-	lws_role_transition(wsi, LWSIFR_SERVER, type & LWS_ADOPT_ALLOW_SSL ?
+	lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ?
 			    LRS_SSL_INIT : LRS_HEADERS, &role_ops_h1);
 
 	if (!vh_prot_name)
diff --git a/lib/roles/h2/hpack.c b/lib/roles/h2/hpack.c
index 843bda9..93e5e58 100644
--- a/lib/roles/h2/hpack.c
+++ b/lib/roles/h2/hpack.c
@@ -489,7 +489,7 @@
 			 int lws_hdr_index, char *arg, int len)
 {
 	struct hpack_dynamic_table *dyn;
-	int new_index, n;
+	int new_index;
 
 	/* dynamic table only belongs to network wsi */
 	wsi = lws_get_network_wsi(wsi);
@@ -522,7 +522,7 @@
 	       dyn->used_entries &&
 	       dyn->virtual_payload_usage + hdr_len + len >
 				dyn->virtual_payload_max + 1024) {
-		n = (dyn->pos - dyn->used_entries) % dyn->num_entries;
+		int n = (dyn->pos - dyn->used_entries) % dyn->num_entries;
 		if (n < 0)
 			n += dyn->num_entries;
 		lws_dynamic_free(dyn, n);
diff --git a/lib/roles/h2/http2.c b/lib/roles/h2/http2.c
index 22a6435..69f2df2 100644
--- a/lib/roles/h2/http2.c
+++ b/lib/roles/h2/http2.c
@@ -1181,7 +1181,6 @@
 lws_h2_parse_end_of_frame(struct lws *wsi)
 {
 	struct lws_h2_netconn *h2n = wsi->h2.h2n;
-	struct lws_h2_protocol_send *pps;
 	struct lws *eff_wsi = wsi;
 	const char *p;
 	int n;
@@ -1215,6 +1214,7 @@
 #if !defined(LWS_NO_CLIENT)
 		if (wsi->client_h2_alpn &&
 		    !(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) {
+			struct lws_h2_protocol_send *pps;
 
 			/* migrate original client ask on to substream 1 */
 
@@ -1499,10 +1499,13 @@
 	case LWS_H2_FRAME_TYPE_PING:
 		if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) { // ack
 		} else {/* they're sending us a ping request */
-			lwsl_info("rx ping, preparing pong\n");
-			pps = lws_h2_new_pps(LWS_H2_PPS_PONG);
+			struct lws_h2_protocol_send *pps =
+					lws_h2_new_pps(LWS_H2_PPS_PONG);
 			if (!pps)
 				return 1;
+
+			lwsl_info("rx ping, preparing pong\n");
+
 			memcpy(pps->u.ping.ping_payload, h2n->ping_payload, 8);
 			lws_pps_schedule(wsi, pps);
 		}
@@ -2193,7 +2196,6 @@
 {
 	unsigned char *oldbuf = buf;
 	lws_filepos_t body_chunk_len;
-	int m;
 
 	// lwsl_notice("%s: h2 path: wsistate 0x%x len %d\n", __func__,
 	//		wsi->wsistate, (int)len);
@@ -2209,6 +2211,8 @@
 	 * case.
 	 */
 	while (len) {
+		int m;
+
 		/*
 		 * we were accepting input but now we stopped doing so
 		 */
diff --git a/lib/roles/h2/ops-h2.c b/lib/roles/h2/ops-h2.c
index fa1fd93..3639b86 100644
--- a/lib/roles/h2/ops-h2.c
+++ b/lib/roles/h2/ops-h2.c
@@ -511,12 +511,13 @@
 rops_init_vhost_h2(struct lws_vhost *vh,
 		   const struct lws_context_creation_info *info)
 {
-	int n;
-
 	vh->h2.set = vh->context->set;
-	if (info->http2_settings[0])
+	if (info->http2_settings[0]) {
+		int n;
+
 		for (n = 1; n < LWS_H2_SETTINGS_LEN; n++)
 			vh->h2.set.s[n] = info->http2_settings[n];
+	}
 
 	return 0;
 }
@@ -766,8 +767,6 @@
 
 	p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD);
 	if (p && !strcmp(p, "POST")) {
-		const struct lws_protocols *pp;
-		const char *name;
 		const struct lws_http_mount *hit =
 				lws_find_mount(wsi,
 					lws_hdr_simple_ptr(wsi,
@@ -779,7 +778,9 @@
 			    lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH),
 			    hit, hit ? hit->origin : "null");
 		if (hit) {
-			name = hit->origin;
+			const struct lws_protocols *pp;
+			const char *name = hit->origin;
+
 			if (hit->protocol)
 				name = hit->protocol;
 
@@ -871,6 +872,11 @@
 			w = w->h2.sibling_list;
 		}
 
+		if (!w) {
+			wa = &wsi->h2.child_list;
+			goto next_child;
+		}
+
 		w->h2.requested_POLLOUT = 0;
 		lwsl_info("%s: child %p (wsistate 0x%x)\n", __func__, w,
 			  w->wsistate);
diff --git a/lib/roles/http/client/client.c b/lib/roles/http/client/client.c
index 42fc739..09acfbc 100644
--- a/lib/roles/http/client/client.c
+++ b/lib/roles/http/client/client.c
@@ -673,7 +673,7 @@
 	int n, port = 0, ssl = 0;
 	int close_reason = LWS_CLOSE_STATUS_PROTOCOL_ERR;
 	const char *prot, *ads = NULL, *path, *cce = NULL;
-	struct allocated_headers *ah = NULL;
+	struct allocated_headers *ah;
 	struct lws *w = lws_client_wsi_effective(wsi);
 	char *p, *q;
 	char new_path[300];
diff --git a/lib/roles/http/server/access-log.c b/lib/roles/http/server/access-log.c
index 07e6207..8b8beae 100644
--- a/lib/roles/http/server/access-log.c
+++ b/lib/roles/http/server/access-log.c
@@ -40,16 +40,16 @@
 void
 lws_prepare_access_log_info(struct lws *wsi, char *uri_ptr, int uri_len, int meth)
 {
+	char da[64], uri[256];
+	const char *pa, *me;
+	time_t t = time(NULL);
+	int l = 256, m;
 #ifdef LWS_WITH_IPV6
 	char ads[INET6_ADDRSTRLEN];
 #else
 	char ads[INET_ADDRSTRLEN];
 #endif
-	char da[64], uri[256];
-	const char *pa, *me;
 	struct tm *tmp;
-	time_t t = time(NULL);
-	int l = 256, m;
 
 	if (!wsi->vhost)
 		return;
@@ -62,73 +62,72 @@
 		lws_access_log(wsi);
 
 	wsi->http.access_log.header_log = lws_malloc(l, "access log");
-	if (wsi->http.access_log.header_log) {
+	if (!wsi->http.access_log.header_log)
+		return;
 
-		tmp = localtime(&t);
-		if (tmp)
-			strftime(da, sizeof(da), "%d/%b/%Y:%H:%M:%S %z", tmp);
-		else
-			strcpy(da, "01/Jan/1970:00:00:00 +0000");
+	tmp = localtime(&t);
+	if (tmp)
+		strftime(da, sizeof(da), "%d/%b/%Y:%H:%M:%S %z", tmp);
+	else
+		strcpy(da, "01/Jan/1970:00:00:00 +0000");
 
-		pa = lws_get_peer_simple(wsi, ads, sizeof(ads));
-		if (!pa)
-			pa = "(unknown)";
+	pa = lws_get_peer_simple(wsi, ads, sizeof(ads));
+	if (!pa)
+		pa = "(unknown)";
 
-		if (wsi->http2_substream)
-			me = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD);
-		else
-			me = method_names[meth];
-		if (!me)
-			me = "(null)";
+	if (wsi->http2_substream)
+		me = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD);
+	else
+		me = method_names[meth];
+	if (!me)
+		me = "(null)";
 
-		m = uri_len;
-		if (m > (int)sizeof(uri) - 1)
-			m = sizeof(uri) - 1;
+	m = uri_len;
+	if (m > (int)sizeof(uri) - 1)
+		m = sizeof(uri) - 1;
 
-		strncpy(uri, uri_ptr, m);
-		uri[m] = '\0';
+	strncpy(uri, uri_ptr, m);
+	uri[m] = '\0';
 
-		lws_snprintf(wsi->http.access_log.header_log, l,
-			 "%s - - [%s] \"%s %s %s\"",
-			 pa, da, me, uri,
-			 hver[wsi->http.request_version]);
+	lws_snprintf(wsi->http.access_log.header_log, l,
+		 "%s - - [%s] \"%s %s %s\"",
+		 pa, da, me, uri, hver[wsi->http.request_version]);
 
-		//lwsl_notice("%s\n", wsi->http.access_log.header_log);
+	//lwsl_notice("%s\n", wsi->http.access_log.header_log);
 
-		l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT);
-		if (l) {
-			wsi->http.access_log.user_agent = lws_malloc(l + 2, "access log");
-			if (!wsi->http.access_log.user_agent) {
-				lwsl_err("OOM getting user agent\n");
-				lws_free_set_NULL(wsi->http.access_log.header_log);
-				return;
-			}
-
-			lws_hdr_copy(wsi, wsi->http.access_log.user_agent,
-					l + 1, WSI_TOKEN_HTTP_USER_AGENT);
-
-			for (m = 0; m < l; m++)
-				if (wsi->http.access_log.user_agent[m] == '\"')
-					wsi->http.access_log.user_agent[m] = '\'';
+	l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT);
+	if (l) {
+		wsi->http.access_log.user_agent = lws_malloc(l + 2, "access log");
+		if (!wsi->http.access_log.user_agent) {
+			lwsl_err("OOM getting user agent\n");
+			lws_free_set_NULL(wsi->http.access_log.header_log);
+			return;
 		}
-		l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER);
-		if (l) {
-			wsi->http.access_log.referrer = lws_malloc(l + 2, "referrer");
-			if (!wsi->http.access_log.referrer) {
-				lwsl_err("OOM getting user agent\n");
-				lws_free_set_NULL(wsi->http.access_log.user_agent);
-				lws_free_set_NULL(wsi->http.access_log.header_log);
-				return;
-			}
-			lws_hdr_copy(wsi, wsi->http.access_log.referrer,
-					l + 1, WSI_TOKEN_HTTP_REFERER);
 
-			for (m = 0; m < l; m++)
-				if (wsi->http.access_log.referrer[m] == '\"')
-					wsi->http.access_log.referrer[m] = '\'';
-		}
-		wsi->access_log_pending = 1;
+		lws_hdr_copy(wsi, wsi->http.access_log.user_agent,
+				l + 1, WSI_TOKEN_HTTP_USER_AGENT);
+
+		for (m = 0; m < l; m++)
+			if (wsi->http.access_log.user_agent[m] == '\"')
+				wsi->http.access_log.user_agent[m] = '\'';
 	}
+	l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER);
+	if (l) {
+		wsi->http.access_log.referrer = lws_malloc(l + 2, "referrer");
+		if (!wsi->http.access_log.referrer) {
+			lwsl_err("OOM getting user agent\n");
+			lws_free_set_NULL(wsi->http.access_log.user_agent);
+			lws_free_set_NULL(wsi->http.access_log.header_log);
+			return;
+		}
+		lws_hdr_copy(wsi, wsi->http.access_log.referrer,
+				l + 1, WSI_TOKEN_HTTP_REFERER);
+
+		for (m = 0; m < l; m++)
+			if (wsi->http.access_log.referrer[m] == '\"')
+				wsi->http.access_log.referrer[m] = '\'';
+	}
+	wsi->access_log_pending = 1;
 }
 
 
diff --git a/lib/roles/http/server/ranges.c b/lib/roles/http/server/ranges.c
index f69c33c..56ba748 100644
--- a/lib/roles/http/server/ranges.c
+++ b/lib/roles/http/server/ranges.c
@@ -67,11 +67,10 @@
 lws_ranges_next(struct lws_range_parsing *rp)
 {
 	static const char * const beq = "bytes=";
-	char c;
 
 	while (1) {
 
-		c = rp->buf[rp->pos];
+		char c = rp->buf[rp->pos];
 
 		switch (rp->state) {
 		case LWSRS_SYNTAX:
diff --git a/lib/roles/http/server/server.c b/lib/roles/http/server/server.c
index fe022fc..f98f25e 100644
--- a/lib/roles/http/server/server.c
+++ b/lib/roles/http/server/server.c
@@ -307,7 +307,7 @@
 {
 	struct lws_vhost *vhost = context->vhost_list;
 	const char *p;
-	int n, m, colon;
+	int n, colon;
 
 	n = (int)strlen(servername);
 	colon = n;
@@ -335,7 +335,7 @@
 	 */
 	vhost = context->vhost_list;
 	while (vhost) {
-		m = (int)strlen(vhost->name);
+		int m = (int)strlen(vhost->name);
 		if (port && port == vhost->listen_port &&
 		    m <= (colon - 2) &&
 		    servername[colon - m - 1] == '.' &&
@@ -1202,7 +1202,7 @@
 	    hit->origin_protocol == LWSMPRO_HTTP)  {
 		struct lws_client_connect_info i;
 		struct lws *cwsi;
-		char ads[96], rpath[256], *pcolon, *pslash, *p, unix_skt = 0;
+		char ads[96], rpath[256], *pcolon, *pslash, unix_skt = 0;
 		int n, na;
 
 		memset(&i, 0, sizeof(i));
@@ -1258,7 +1258,7 @@
 		lws_clean_url(rpath);
 		na = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_URI_ARGS);
 		if (na) {
-			p = rpath + strlen(rpath);
+			char *p = rpath + strlen(rpath);
 			*p++ = '?';
 			lws_hdr_copy(wsi, p, &rpath[sizeof(rpath) - 1] - p,
 				     WSI_TOKEN_HTTP_URI_ARGS);
@@ -1485,8 +1485,6 @@
 		}
 
 		if (wsi->http.rx_content_length > 0) {
-			struct lws_tokens ebuf;
-			int m;
 
 			lwsi_set_state(wsi, LRS_BODY);
 			lwsl_info("%s: %p: LRS_BODY state set (0x%x)\n",
@@ -1502,12 +1500,18 @@
 			 */
 
 			while (1) {
+				struct lws_tokens ebuf;
+				int m;
+
 				ebuf.len = (int)lws_buflist_next_segment_len(
-						&wsi->buflist, (uint8_t **)&ebuf.token);
+						&wsi->buflist,
+						(uint8_t **)&ebuf.token);
 				if (!ebuf.len)
 					break;
-				lwsl_notice("%s: consuming %d\n", __func__, (int)ebuf.len);
-				m = lws_read_h1(wsi, (uint8_t *)ebuf.token, ebuf.len);
+				lwsl_notice("%s: consuming %d\n", __func__,
+							(int)ebuf.len);
+				m = lws_read_h1(wsi, (uint8_t *)ebuf.token,
+						ebuf.len);
 				if (m < 0)
 					return -1;
 
@@ -1588,7 +1592,7 @@
 						    &role_ops_raw_skt);
 				lws_header_table_detach(wsi, 1);
 
-				if (m == 2 && (wsi->protocol->callback)(wsi,
+				if (wsi->protocol->callback(wsi,
 						LWS_CALLBACK_RAW_RX,
 						wsi->user_space, obuf, olen))
 					return 1;
diff --git a/lib/roles/raw-skt/ops-raw-skt.c b/lib/roles/raw-skt/ops-raw-skt.c
index f229493..da7424a 100644
--- a/lib/roles/raw-skt/ops-raw-skt.c
+++ b/lib/roles/raw-skt/ops-raw-skt.c
@@ -152,7 +152,7 @@
 		wsi->udp = lws_malloc(sizeof(*wsi->udp), "udp struct");
 #endif
 
-	lws_role_transition(wsi, 0, type & LWS_ADOPT_ALLOW_SSL ? LRS_SSL_INIT :
+	lws_role_transition(wsi, 0, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT :
 				LRS_ESTABLISHED, &role_ops_raw_skt);
 
 	if (vh_prot_name)
diff --git a/lib/roles/ws/client-ws.c b/lib/roles/ws/client-ws.c
index cc45da7..0d88f47 100644
--- a/lib/roles/ws/client-ws.c
+++ b/lib/roles/ws/client-ws.c
@@ -309,7 +309,7 @@
 		}
 		while (*pc && *pc++ != ',')
 			;
-		while (*pc && *pc == ' ')
+		while (*pc == ' ')
 			pc++;
 	}
 
diff --git a/lib/roles/ws/server-ws.c b/lib/roles/ws/server-ws.c
index b572b94..2d6df72 100644
--- a/lib/roles/ws/server-ws.c
+++ b/lib/roles/ws/server-ws.c
@@ -104,7 +104,7 @@
 				continue;
 		}
 
-		while (args && *args && *args == ' ')
+		while (args && *args == ' ')
 			args++;
 
 		/* check a client's extension against our support */
@@ -643,7 +643,7 @@
 	if (avail > len)
 		avail = (unsigned int)len;
 
-	if (avail <= 0)
+	if (!avail)
 		return 0;
 
 	ebuf.token = (char *)buffer;
diff --git a/lib/tls/mbedtls/lws-genrsa.c b/lib/tls/mbedtls/lws-genrsa.c
index 70a9fcf..6c89fa7 100644
--- a/lib/tls/mbedtls/lws-genrsa.c
+++ b/lib/tls/mbedtls/lws-genrsa.c
@@ -36,8 +36,6 @@
 LWS_VISIBLE int
 lws_genrsa_create(struct lws_genrsa_ctx *ctx, struct lws_genrsa_elements *el)
 {
-	int n;
-
 	memset(ctx, 0, sizeof(*ctx));
 	ctx->ctx = lws_zalloc(sizeof(*ctx->ctx), "genrsa");
 	if (!ctx->ctx)
@@ -46,6 +44,8 @@
 	mbedtls_rsa_init(ctx->ctx, MBEDTLS_RSA_PKCS_V15, 0);
 
 	{
+		int n;
+
 		mbedtls_mpi *mpi[LWS_COUNT_RSA_ELEMENTS] = {
 			&ctx->ctx->E, &ctx->ctx->N, &ctx->ctx->D, &ctx->ctx->P,
 			&ctx->ctx->Q, &ctx->ctx->DP, &ctx->ctx->DQ,
diff --git a/lib/tls/mbedtls/mbedtls-client.c b/lib/tls/mbedtls/mbedtls-client.c
index 833e58d..84270c1 100644
--- a/lib/tls/mbedtls/mbedtls-client.c
+++ b/lib/tls/mbedtls/mbedtls-client.c
@@ -30,7 +30,6 @@
 int
 lws_ssl_client_bio_create(struct lws *wsi)
 {
-	X509_VERIFY_PARAM *param;
 	char hostname[128], *p;
 	const char *alpn_comma = wsi->context->tls.alpn_default;
 	struct alpn_ctx protos;
@@ -63,7 +62,7 @@
 		SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback);
 
 	if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) {
-		param = SSL_get0_param(wsi->tls.ssl);
+		X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl);
 		/* Enable automatic hostname checks */
 	//	X509_VERIFY_PARAM_set_hostflags(param,
 	//				X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
diff --git a/lib/tls/openssl/openssl-client.c b/lib/tls/openssl/openssl-client.c
index 13ddd5e..6931f15 100644
--- a/lib/tls/openssl/openssl-client.c
+++ b/lib/tls/openssl/openssl-client.c
@@ -90,9 +90,6 @@
 int
 lws_ssl_client_bio_create(struct lws *wsi)
 {
-#if defined LWS_HAVE_X509_VERIFY_PARAM_set1_host
-	X509_VERIFY_PARAM *param;
-#endif
 	char hostname[128], *p;
 #if defined(LWS_HAVE_SSL_set_alpn_protos) && \
     defined(LWS_HAVE_SSL_get0_alpn_selected)
@@ -139,7 +136,8 @@
 
 #if defined LWS_HAVE_X509_VERIFY_PARAM_set1_host
 	if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) {
-		param = SSL_get0_param(wsi->tls.ssl);
+		X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl);
+
 		/* Enable automatic hostname checks */
 		X509_VERIFY_PARAM_set_hostflags(param,
 						X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
diff --git a/lib/tls/openssl/ssl.c b/lib/tls/openssl/ssl.c
index 8e25a17..a3b0589 100644
--- a/lib/tls/openssl/ssl.c
+++ b/lib/tls/openssl/ssl.c
@@ -644,7 +644,7 @@
 		size_t klen = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x509), NULL);
 		uint8_t *tmp, *ptmp;
 
-		if (klen <= 0 || klen > len)
+		if (!klen || klen > len)
 			return -1;
 
 		tmp = (uint8_t *)OPENSSL_malloc(klen);
diff --git a/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c b/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c
index 8e9a454..6a30f15 100644
--- a/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c
+++ b/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c
@@ -140,8 +140,8 @@
 			break;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE,
+			      pmsg->len, LWS_WRITE_TEXT);
 		if (m < (int)pmsg->len) {
 			lwsl_err("ERROR %d writing to ws socket\n", m);
 			return -1;
diff --git a/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md b/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md
index 1e0dbbf..d583462 100644
--- a/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md
+++ b/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md
@@ -5,7 +5,7 @@
 It asks the minimal dbus ws proxy application to connect to libwebsockets.org
 over the mirror protocol.  And it proxies back the ASCII packets used to
 communicate the mirror sample drawing vectors over dbus to this test client
-if you draw on the mirror example app at https://libwebsockets.org/testserver/
+if you draw on the [mirror example app](https://libwebsockets.org/testserver/)
 in a browser.
 
 ## build
diff --git a/minimal-examples/dbus-server/minimal-dbus-ws-proxy/protocol_lws_minimal_dbus_ws_proxy.c b/minimal-examples/dbus-server/minimal-dbus-ws-proxy/protocol_lws_minimal_dbus_ws_proxy.c
index 5a61ed5..5607a1b 100644
--- a/minimal-examples/dbus-server/minimal-dbus-ws-proxy/protocol_lws_minimal_dbus_ws_proxy.c
+++ b/minimal-examples/dbus-server/minimal-dbus-ws-proxy/protocol_lws_minimal_dbus_ws_proxy.c
@@ -488,7 +488,7 @@
 
 	memset(conn_wspctx, 0, sizeof(*conn_wspctx));
 
-	conn_wspctx->ctx.tsi = conn_wspctx->ctx.tsi;
+	conn_wspctx->ctx.tsi = wspctx->ctx.tsi;
 	conn_wspctx->ctx.vh = wspctx->ctx.vh;
 	conn_wspctx->ctx.conn = conn;
 	conn_wspctx->vhd = vhd; /* let accepted connections also know the vhd */
@@ -708,7 +708,8 @@
 			    pmsg->first, pmsg->final);
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len, flags);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE,
+			      pmsg->len, flags);
 		if (m < (int)pmsg->len) {
 			lwsl_err("ERROR %d writing to ws socket\n", m);
 			return -1;
diff --git a/minimal-examples/http-server/minimal-http-server-dynamic/minimal-http-server-dynamic.c b/minimal-examples/http-server/minimal-http-server-dynamic/minimal-http-server-dynamic.c
index 351b5c1..ee12ccd 100644
--- a/minimal-examples/http-server/minimal-http-server-dynamic/minimal-http-server-dynamic.c
+++ b/minimal-examples/http-server/minimal-http-server-dynamic/minimal-http-server-dynamic.c
@@ -79,7 +79,7 @@
 			return 1;
 
 		pss->times = 0;
-		pss->budget = atoi(in + 1);
+		pss->budget = atoi((char *)in + 1);
 		pss->content_lines = 0;
 		if (!pss->budget)
 			pss->budget = 10;
diff --git a/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/lws-common.js b/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/lws-common.js
index f0c5b92..4203c82 100644
--- a/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/lws-common.js
+++ b/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/lws-common.js
@@ -13,26 +13,73 @@
  *
  */
 
-function lws_gray_out(vis, options) {
+function gsize(ptype)
+{
+	var h = document.compatMode === "CSS1Compat" &&
+		!window.opera ?
+			document.documentElement.clientHeight :
+						document.body.clientHeight;
+	var w = document.compatMode === "CSS1Compat" &&
+		!window.opera ? 
+			document.documentElement.clientWidth :
+						document.body.clientWidth;
+	var pageWidth, pageHeight, t;
 
-	var options = options || {};
+	if (document.body && 
+		    (document.body.scrollWidth || document.body.scrollHeight)) {
+		t = document.body.scrollWidth;
+		pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px");
+		t = document.body.scrollHeight;
+		pageHeight = (h > t) ? ("" + h + "px") : ("" + (t) + "px");
+	} else if (document.body.offsetWidth) {
+		t = document.body.offsetWidth;
+		pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px");
+		t = document.body.offsetHeight;
+		pageHeight =(h > t) ? ("" + h + "px") : ("" + (t) + "px");
+	} else {
+		pageWidth = "100%";
+		pageHeight = "100%";
+	}
+	return (ptype === 1) ? pageWidth : pageHeight;
+}
+
+function addEvent( obj, type, fn ) {
+	if ( obj.attachEvent ) {
+		obj["e" + type + fn] = fn;
+		obj[type+fn] = function() { obj["e" + type + fn]( window.event );};
+		obj.attachEvent("on" + type, obj[type + fn]);
+	} else
+		obj.addEventListener(type, fn, false);
+}
+
+function removeEvent( obj, type, fn ) {
+	if ( obj.detachEvent ) {
+		obj.detachEvent("on" + type, obj[type + fn]);
+		obj[type + fn] = null;
+	} else
+		obj.removeEventListener(type, fn, false);
+}
+
+function lws_gray_out(vis, _options) {
+
+	var options = _options || {};
 	var zindex = options.zindex || 50;
 	var opacity = options.opacity || 70;
 	var opaque = (opacity / 100);
-	var bgcolor = options.bgcolor || '#000000';
-	var dark = document.getElementById('darkenScreenObject');
+	var bgcolor = options.bgcolor || "#000000";
+	var dark = document.getElementById("darkenScreenObject");
 
 	if (!dark) {
 		var tbody = document.getElementsByTagName("body")[0];
-		var tnode = document.createElement('div');
-		tnode.style.position = 'absolute';
-		tnode.style.top = '0px';
-		tnode.style.left = '0px';
-		tnode.style.overflow = 'hidden';
-		tnode.style.display ='none';
-		tnode.id = 'darkenScreenObject';
+		var tnode = document.createElement("div");
+		tnode.style.position = "absolute";
+		tnode.style.top = "0px";
+		tnode.style.left = "0px";
+		tnode.style.overflow = "hidden";
+		tnode.style.display ="none";
+		tnode.id = "darkenScreenObject";
 		tbody.appendChild(tnode);
-		dark = document.getElementById('darkenScreenObject');
+		dark = document.getElementById("darkenScreenObject");
 	}
 	if (vis) {
 		dark.style.opacity = opaque;
@@ -42,7 +89,7 @@
 		dark.style.backgroundColor = bgcolor;
 		dark.style.width = gsize(1);
 		dark.style.height = gsize(0);
-		dark.style.display ='block';
+		dark.style.display = "block";
 		addEvent(window, "resize",
 			function() {
 				dark.style.height = gsize(0);
@@ -50,7 +97,7 @@
 			}
 		);
 	} else {
-		dark.style.display = 'none';
+		dark.style.display = "none";
 		removeEvent(window, "resize",
 			function() {
 				dark.style.height = gsize(0);
@@ -60,338 +107,13 @@
 	}
 }
 
-function gsize(ptype)
-{
-	var h = document.compatMode == 'CSS1Compat' &&
-		!window.opera ?
-			document.documentElement.clientHeight :
-						document.body.clientHeight;
-	var w = document.compatMode == 'CSS1Compat' &&
-		!window.opera ? 
-			document.documentElement.clientWidth :
-						document.body.clientWidth;
-	if (document.body && 
-		    (document.body.scrollWidth || document.body.scrollHeight)) {
-		var pageWidth = (w > (t = document.body.scrollWidth)) ?
-					("" + w + "px") : ("" + (t) + "px");
-		var pageHeight = (h > (t = document.body.scrollHeight)) ?
-					("" + h + "px") : ("" + (t) + "px");
-	} else if (document.body.offsetWidth) {
-		var pageWidth = (w > (t = document.body.offsetWidth)) ?
-					("" + w + "px") : ("" + (t) + "px");
-		var pageHeight =(h > (t = document.body.offsetHeight)) ?
-					("" + h + "px") : ("" + (t) + "px");
-	} else {
-		var pageWidth = '100%';
-		var pageHeight = '100%';
-	}
-	return (ptype == 1) ? pageWidth : pageHeight;
-}
-
-function addEvent( obj, type, fn ) {
-	if ( obj.attachEvent ) {
-		obj['e' + type + fn] = fn;
-		obj[type+fn] = function() { obj['e' + type+fn]( window.event );}
-		obj.attachEvent('on' + type, obj[type + fn]);
-	} else
-		obj.addEventListener(type, fn, false);
-}
-
-function removeEvent( obj, type, fn ) {
-	if ( obj.detachEvent ) {
-		obj.detachEvent('on' + type, obj[type + fn]);
-		obj[type + fn] = null;
-	} else
-		obj.removeEventListener(type, fn, false);
-}
-
 /*
  * end of grayOut related stuff
  */
  
-/*
- * lws-meta helpers
- */
-
-var lws_meta_cmd = {
-	OPEN_SUBCHANNEL: 0x41,
-	/**< Client requests to open new subchannel
-	 */
-	OPEN_RESULT: 0x42,
-	/**< Result of client request to open new subchannel */
-	CLOSE_NOT: 0x43,
-	CLOSE_RQ: 0x44,
-	/**< client requests to close a subchannel */
-	WRITE: 0x45,
-	/**< connection writes something to specific channel index */
-	RX: 0x46,
-};
-
-function new_ws(urlpath, protocol)
-{
-	if (typeof MozWebSocket != "undefined")
-		return new MozWebSocket(urlpath, protocol);
-
-	return new WebSocket(urlpath, protocol);
-}
-
-function lws_meta_ws() {
-	var real;
-	
-	var channel_id_to_child;
-	var pending_children;
-	var active_children;
-}
-
-function lws_meta_ws_child() {
-	var onopen;
-	var onmessage;
-	var onclose;
-	
-	var channel_id;
-	
-	var subprotocol;
-	var suburl;
-	var cookie;
-	
-	var extensions;
-	
-	var parent;
-}
-
-lws_meta_ws_child.prototype.send = function(data)
-{
-
-	if (typeof data == "string") {
-		data = String.fromCharCode(lws_meta_cmd.WRITE) +
-			String.fromCharCode(this.channel_id) +
-			data;
-		
-		return this.parent.real.send(data);
-	}
-	
-	{
-
-		var ab = new Uint8Array(data.length + 2);
-
-		ab[0] = lws_meta_cmd.WRITE;
-		ab[1] = this.channel_id;
-		ab.set(data, 2);
-	
-		return this.parent.real.send(ab);
-	}
-}
-
-lws_meta_ws_child.prototype.close = function(close_code, close_string)
-{
-	var pkt = new Uint8Array(129), m = 0, pkt1;
-	
-	pkt[m++] = lws_meta_cmd.CLOSE_RQ;
-	pkt[m++] = this.channel_id;
-	
-	pkt[m++] = close_string.length + 0x20;
-	
-	pkt[m++] = close_code / 256;
-	pkt[m++] = close_code % 256;
-	
-	for (i = 0; i < close_string.length; i++)
-		pkt[m++] = close_string.charCodeAt(i);
-	
-	pkt1 = new Uint8Array(m);
-	for (n = 0; n < m; n++)
-		pkt1[n] = pkt[n];
-		
-	this.parent.real.send(pkt1.buffer);
-}
-
-/* make a real ws connection using lws_meta*/
-lws_meta_ws.prototype.new_parent = function(urlpath)
-{
-	var n, i, m = 0, pkt1;
-	
-	this.ordinal = 1;
-	this.pending_children = [];
-	this.active_children = [];
-	this.real = new_ws(urlpath, "lws-meta");
-	
-	this.real.binaryType = 'arraybuffer';
-	this.real.myparent = this;
-
-	this.real.onopen = function() {
-		pkt = new Uint8Array(1024);
-			var n, i, m = 0, pkt1;
-		console.log("real open - pending children " + this.myparent.pending_children.length);
-		for (n = 0; n < this.myparent.pending_children.length; n++) {
-		
-			var p = this.myparent.pending_children[n];
-		
-			pkt[m++] = lws_meta_cmd.OPEN_SUBCHANNEL;
-			for (i = 0; i < p.subprotocol.length; i++)
-				pkt[m++] = p.subprotocol.charCodeAt(i);
-			pkt[m++] = 0;
-			for (i = 0; i < p.suburl.length; i++)
-				pkt[m++] = p.suburl.charCodeAt(i);
-			pkt[m++] = 0;
-			for (i = 0; i < p.cookie.length; i++)
-				pkt[m++] = p.cookie.charCodeAt(i);
-			pkt[m++] = 0;
-		}
-		
-		pkt1 = new Uint8Array(m);
-		for (n = 0; n < m; n++)
-			pkt1[n] = pkt[n];
-		
-		console.log(this.myparent.pending_children[0].subprotocol);
-		console.log(pkt1);
-		
-		this.send(pkt1.buffer);
-	}
-
-
-	this.real.onmessage = function(msg) {
-	
-		if (typeof msg.data != "string") {
-			var ba = new Uint8Array(msg.data), n = 0;
-			
-			while (n < ba.length) {
-
-				switch (ba[n++]) {
-				case lws_meta_cmd.OPEN_RESULT:
-				{
-					var m = 0, cookie = "", protocol = "", ch = 0;
-					var ws = this.myparent;
-					/* cookie NUL
-					 * channel index + 0x20
-					 * protocol NUL
-					 */
-					 while (ba[n])
-					 	cookie = cookie + String.fromCharCode(ba[n++]);
-					 n++;
-					 ch = ba[n++];
-					 
-					 while (ba[n])
-					 	protocol = protocol + String.fromCharCode(ba[n++]);
-					 	
-					console.log("open result " + cookie + " " + protocol + " " + ch + " pending len " + ws.pending_children.length);
-					
-					for (m = 0; m < ws.pending_children.length; m++) {
-						if (ws.pending_children[m].cookie == cookie) {
-							var newchild = ws.pending_children[m];
-			
-							/* found it */
-							ws.pending_children[m].channel_id = ch;
-							/* add to active children array */
-							ws.active_children.push(ws.pending_children[m]);
-							/* remove from pending children array */
-							ws.pending_children.splice(m, 1);
-							
-							newchild.parent = ws;
-							newchild.extensions = this.extensions;
-							
-							newchild.onopen();
-							
-							console.log("made active " + cookie);
-							break;
-						}
-					}
-					break;
-				}
-	
-				case lws_meta_cmd.CLOSE_NOT:
-				{
-					var code = 0, str = "", ch = 0, m, le;
-					var ba = new Uint8Array(msg.data);
-					/*
-					 * BYTE: channel
-					 * BYTE: MSB status code
-					 * BYTE: LSB status code
-					 * BYTES: rest of message is close status string
-					 */
-					 
-					 ch = ba[n++];
-					 le = ba[n++] - 0x20;
-					 code = ba[n++] * 256;
-					 code += ba[n++];
-					 
-					 while (le--)
-					 	str += String.fromCharCode(ba[n++]);
-					 	
-					console.log("channel id " + ch + " code " + code + " str " + str + " len " + str.length);
-					 	
-					for (m = 0; m < this.myparent.active_children.length; m++)
-						if (this.myparent.active_children[m].channel_id == ch) {
-							var child = this.myparent.active_children[m];
-							var ms = new CloseEvent("close", { code:code, reason:str } );
-							
-							/* reply with close ack */
-							this.send(msg.data);
-							
-							if (child.onclose)
-								child.onclose(ms);
-							
-							this.myparent.active_children.splice(m, 1);
-							break;
-						}
-
-				}
-				} // switch
-			}
-		} else {
-			if (msg.data.charCodeAt(0) == lws_meta_cmd.WRITE ) {
-				var ch = msg.data.charCodeAt(1), m, ms;
-				var ws = this.myparent, ms;
-								
-				for (m = 0; m < ws.active_children.length; m++) {
-					if (ws.active_children[m].channel_id == ch) {
-						ms = new MessageEvent("WebSocket", { data: msg.data.substr(2, msg.data.length - 2) } );
-						if (ws.active_children[m].onmessage)
-							ws.active_children[m].onmessage(ms);
-						break;
-					}
-				}
-			}
-		}
-	}
-	this.real.onclose = function() {
-		var ws = this.myparent, m;
-		for (m = 0; m < ws.active_children.length; m++) {
-			var child = ws.active_children[m];
-			var ms = new CloseEvent("close", { code:1000, reason:"parent closed" } );
-			
-			if (child.onclose)
-				child.onclose(ms);
-		}
-	}
-
-}
-
-
-
-/* make a child connection using existing lws_meta real ws connection */
-lws_meta_ws.prototype.new_ws = function(suburl, protocol)
-{
-	var ch = new lws_meta_ws_child();
-	
-	ch.suburl = suburl;
-	ch.subprotocol = protocol;
-	ch.cookie = "C" + this.ordinal++;
-	
-	this.pending_children.push(ch);
-	
-	if (this.real.readyState == 1)
-		this.real.onopen();
-	
-	return ch;
-}
-
-
-/*
- * end of lws-meta helpers
- */
- 
 function lws_san(s)
 {
-	if (s.search("<") != -1)
+	if (s.search("<") !== -1)
 		return "invalid string";
 	
 	return s;
diff --git a/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/test.html b/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/test.html
index 91c6dc2..69147b9 100644
--- a/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/test.html
+++ b/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/test.html
@@ -555,37 +555,13 @@
 	console.log(mirror_name);
 	
 
-/*
- * if using lws-meta to carry the other ws connections, declare the
- * parent connection object and start its connection to the server.
- *
- * These helpers are defined in lws-common.js
- */
-
-var use_lws_meta = 0, lws_meta;
-
-if (use_lws_meta) {
-	lws_meta = new lws_meta_ws();
-	lws_meta.new_parent(get_appropriate_ws_url("?mirror=" + mirror_name));
-}
-
-
 document.getElementById("number").textContent = get_appropriate_ws_url(mirror_name);
 
 /* dumb increment protocol */
 
-	/*
-	 * to connect via an lws-meta connection, start the connection using
-	 * lws_meta.new_ws().  To connect by independent connection, start
-	 * the connection using just new_ws()
-	 */
-	
 	var socket_di;
 	
-	if (use_lws_meta)
-		socket_di = lws_meta.new_ws("", "dumb-increment-protocol");
-	else
-		socket_di = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol");
+	socket_di = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol");
 
 	try {
 		socket_di.onopen = function() {
@@ -609,10 +585,7 @@
 	
 	var socket_status, jso, s;
 
-	if (use_lws_meta)
-		socket_status = lws_meta.new_ws("", "lws-status");
-	else
-		socket_status = new_ws(get_appropriate_ws_url(""), "lws-status");
+	socket_status = new_ws(get_appropriate_ws_url(""), "lws-status");
 
 	try {
 		socket_status.onopen = function() {
@@ -681,10 +654,7 @@
 var socket_ot;
 
 function ot_open() {
-	if (use_lws_meta)
-		socket_ot = lws_meta.new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol");
-	else
-		socket_ot = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol");
+	socket_ot = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol");
 
 	console.log("ot_open");
 
@@ -732,11 +702,7 @@
 	var pending = "";
 	var lm_timer;
 
-	if (use_lws_meta)
-		socket_lm = lws_meta.new_ws(get_appropriate_ws_url("?mirror=" + mirror_name),
-			"lws-mirror-protocol");
-	else
-		socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name),
+	socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name),
 			"lws-mirror-protocol");
 	try {
 		socket_lm.onopen = function() {
diff --git a/minimal-examples/http-server/minimal-http-server-form-post-file/minimal-http-server-form-post-file.c b/minimal-examples/http-server/minimal-http-server-form-post-file/minimal-http-server-form-post-file.c
index d58d892..f0a0b9c 100644
--- a/minimal-examples/http-server/minimal-http-server-form-post-file/minimal-http-server-form-post-file.c
+++ b/minimal-examples/http-server/minimal-http-server-form-post-file/minimal-http-server-form-post-file.c
@@ -49,7 +49,6 @@
 	       char *buf, int len, enum lws_spa_fileupload_states state)
 {
 	struct pss *pss = (struct pss *)data;
-	int n;
 
 	switch (state) {
 	case LWS_UFS_OPEN:
@@ -68,6 +67,8 @@
 	case LWS_UFS_FINAL_CONTENT:
 	case LWS_UFS_CONTENT:
 		if (len) {
+			int n;
+
 			pss->file_length += len;
 
 			n = write(pss->fd, buf, len);
diff --git a/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c b/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c
index 5bdf1be..2850d04 100644
--- a/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c
+++ b/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c
@@ -37,6 +37,7 @@
 callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason,
 		  void *user, void *in, size_t len)
 {
+	const char *cp = (const char *)in;
 
 	switch (reason) {
 
@@ -93,7 +94,7 @@
 	case LWS_CALLBACK_RAW_RX:
 		lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len);
 		while (len--)
-			putchar(*((const char *)in++));
+			putchar(*cp++);
 		fflush(stdout);
 		break;
 
diff --git a/minimal-examples/selftests-library.sh b/minimal-examples/selftests-library.sh
index 88677c8..5cce94d 100755
--- a/minimal-examples/selftests-library.sh
+++ b/minimal-examples/selftests-library.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 
 if [ -z "$1" -o -z "$2" ] ; then
 	echo "required args missing"
diff --git a/minimal-examples/selftests.sh b/minimal-examples/selftests.sh
index ea8ceeb..d7992ce 100755
--- a/minimal-examples/selftests.sh
+++ b/minimal-examples/selftests.sh
@@ -1,4 +1,4 @@
-#/bin/bash
+#!/bin/bash
 #
 # run this from your build dir having configured
 # -DLWS_WITH_MINIMAL_EXAMPLES=1 to get all the examples
diff --git a/minimal-examples/ws-client/minimal-ws-client-echo/protocol_lws_minimal_client_echo.c b/minimal-examples/ws-client/minimal-ws-client-echo/protocol_lws_minimal_client_echo.c
index 3114907..1b09150 100644
--- a/minimal-examples/ws-client/minimal-ws-client-echo/protocol_lws_minimal_client_echo.c
+++ b/minimal-examples/ws-client/minimal-ws-client-echo/protocol_lws_minimal_client_echo.c
@@ -161,7 +161,8 @@
 				    pmsg->first, pmsg->final);
 
 			/* notice we allowed for LWS_PRE in the payload already */
-			m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len, flags);
+			m = lws_write(wsi, ((unsigned char *)pmsg->payload) +
+				      LWS_PRE, pmsg->len, flags);
 			if (m < (int)pmsg->len) {
 				lwsl_err("ERROR %d writing to ws socket\n", m);
 				return -1;
diff --git a/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/protocol_lws_minimal_pmd_bulk.c b/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
index a1bb705..56c6f5b 100644
--- a/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
+++ b/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
@@ -228,7 +228,7 @@
 					return -1;
 				}
 				pss->position_rx += s;
-				in += s;
+				in = ((unsigned char *)in) + s;
 				len -= s;
 			}
 		} else {
diff --git a/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c b/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c
index 9d2a013..4c12321 100644
--- a/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c
+++ b/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c
@@ -214,8 +214,8 @@
 			goto skip;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE,
+			      pmsg->len, LWS_WRITE_TEXT);
 		if (m < (int)pmsg->len) {
 			pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock */
 			lwsl_err("ERROR %d writing to ws socket\n", m);
diff --git a/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c b/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c
index 8fba881..08e7bb2 100644
--- a/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c
+++ b/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c
@@ -133,8 +133,8 @@
 			break;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE,
+			      pmsg->len, LWS_WRITE_TEXT);
 		if (m < (int)pmsg->len) {
 			lwsl_err("ERROR %d writing to ws socket\n", m);
 			return -1;
diff --git a/minimal-examples/ws-server/minimal-ws-server-echo/protocol_lws_minimal_server_echo.c b/minimal-examples/ws-server/minimal-ws-server-echo/protocol_lws_minimal_server_echo.c
index fd10860..b7f784e 100644
--- a/minimal-examples/ws-server/minimal-ws-server-echo/protocol_lws_minimal_server_echo.c
+++ b/minimal-examples/ws-server/minimal-ws-server-echo/protocol_lws_minimal_server_echo.c
@@ -67,7 +67,7 @@
 				lws_get_protocol(wsi));
 	const struct msg *pmsg;
 	struct msg amsg;
-	int n, m, flags;
+	int n, flags;
 
 	switch (reason) {
 
@@ -104,6 +104,8 @@
 
 		lwsl_user("LWS_CALLBACK_SERVER_WRITEABLE\n");
 		do {
+			int m;
+
 			pmsg = lws_ring_get_element(pss->ring, &pss->tail);
 			if (!pmsg) {
 				lwsl_user(" (nothing in ring)\n");
@@ -115,7 +117,8 @@
 				    pmsg->first, pmsg->final);
 
 			/* notice we allowed for LWS_PRE in the payload already */
-			m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len, flags);
+			m = lws_write(wsi, ((unsigned char *)pmsg->payload) +
+				      LWS_PRE, pmsg->len, flags);
 			if (m < (int)pmsg->len) {
 				lwsl_err("ERROR %d writing to ws socket\n", m);
 				return -1;
diff --git a/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c b/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
index 33d4eed..679ea07 100644
--- a/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
+++ b/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/protocol_lws_minimal_pmd_bulk.c
@@ -186,7 +186,7 @@
 					return -1;
 				}
 				pss->position_rx += s;
-				in += s;
+				in = ((char *)in) + s;
 				len -= s;
 			}
 		} else {
diff --git a/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c b/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c
index 441951e..1f6025a 100644
--- a/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c
+++ b/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c
@@ -108,8 +108,8 @@
 			break;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, vhd->amsg.payload + LWS_PRE, vhd->amsg.len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) +
+			      LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT);
 		if (m < (int)vhd->amsg.len) {
 			lwsl_err("ERROR %d writing to ws socket\n", m);
 			return -1;
diff --git a/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c b/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c
index 0da2ff4..da93319 100644
--- a/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c
+++ b/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c
@@ -203,8 +203,8 @@
 			break;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) +
+			      LWS_PRE, pmsg->len, LWS_WRITE_TEXT);
 		if (m < (int)pmsg->len) {
 			lwsl_err("ERROR %d writing to ws socket\n", m);
 			return -1;
diff --git a/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c b/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c
index ab9b88d..61dcd2f 100644
--- a/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c
+++ b/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c
@@ -224,8 +224,8 @@
 		}
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, pmsg->payload + LWS_PRE, pmsg->len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE,
+			      pmsg->len, LWS_WRITE_TEXT);
 		if (m < (int)pmsg->len) {
 			pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */
 			lwsl_err("ERROR %d writing to ws socket\n", m);
diff --git a/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c b/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c
index 2d41257..2063671 100644
--- a/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c
+++ b/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c
@@ -102,8 +102,8 @@
 			break;
 
 		/* notice we allowed for LWS_PRE in the payload already */
-		m = lws_write(wsi, vhd->amsg.payload + LWS_PRE, vhd->amsg.len,
-			      LWS_WRITE_TEXT);
+		m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) +
+			      LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT);
 		if (m < (int)vhd->amsg.len) {
 			lwsl_err("ERROR %d writing to ws\n", m);
 			return -1;
diff --git a/plugins/generic-sessions/assets/lwsgs.css b/plugins/generic-sessions/assets/lwsgs.css
index dccfc2e..9dfde75 100644
--- a/plugins/generic-sessions/assets/lwsgs.css
+++ b/plugins/generic-sessions/assets/lwsgs.css
@@ -126,7 +126,7 @@
 }
 
 span.small {
-	style=\"font-size:8pt;
+	font-size:8pt;
 }
 
 .green {
diff --git a/plugins/generic-sessions/assets/lwsgs.js b/plugins/generic-sessions/assets/lwsgs.js
index 496005c..b9bfe16 100644
--- a/plugins/generic-sessions/assets/lwsgs.js
+++ b/plugins/generic-sessions/assets/lwsgs.js
@@ -390,7 +390,7 @@
 
 	if (!document.getElementById('cpassword').value ||
 	    !document.getElementById('cpassword2').value ||
-	    pwok == 0)
+	    pwok === 0)
 		en_change = 0;
 	
 	if (document.getElementById('showdel').checked)
@@ -432,7 +432,7 @@
 	else
 		document.getElementById('cforgot').style.display = "none";
 
-	if (pwok == 0)
+	if (pwok === 0)
 		op = '0.5';
 	else
 		op = '1.0';
@@ -445,7 +445,7 @@
 {
     var xmlHttp = new XMLHttpRequest();
     xmlHttp.onreadystatechange = function() { 
-        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
+        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
             lwsgs_user_check = xmlHttp.responseText;
 	    lwsgs_rupdate();
         }
@@ -458,7 +458,7 @@
 {
     var xmlHttp = new XMLHttpRequest();
     xmlHttp.onreadystatechange = function() { 
-        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
+        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
             lwsgs_email_check = xmlHttp.responseText;
 	    lwsgs_rupdate();
         }
@@ -547,7 +547,7 @@
 				wos = 0;
 			else {
 				wos++;
-				if (wos == 40) {
+				if (wos === 40) {
 					wos = 0;
 					r = r + ' ';
 				}
diff --git a/plugins/generic-table/assets/lwsgt.js b/plugins/generic-table/assets/lwsgt.js
index 9bd299f..dc93895 100644
--- a/plugins/generic-table/assets/lwsgt.js
+++ b/plugins/generic-table/assets/lwsgt.js
@@ -3,12 +3,12 @@
 	var pcol;
 	var u = document.URL;
 
-	if (u.substring(0, 5) == "https") {
+	if (u.substring(0, 5) === "https") {
 		pcol = "wss://";
 		u = u.substr(8);
 	} else {
 		pcol = "ws://";
-		if (u.substring(0, 4) == "http")
+		if (u.substring(0, 4) === "http")
 			u = u.substr(7);
 	}
 
@@ -25,7 +25,8 @@
 		if (!j.cols[n].hide)
 			m++;
 
-	s = "<tr><td colspan=\"" + m + "\" class=\"lwsgt_title\">" + ws.lwsgt_title + "</td></tr>"
+	s = "<tr><td colspan=\"" + m + "\" class=\"lwsgt_title\">" +
+		ws.lwsgt_title + "</td></tr>";
 
 	if (!!bc) {
 		s += "<tr><td colspan=\"" + m + "\" class=\"lwsgt_breadcrumbs\">";
@@ -34,7 +35,8 @@
 			if (!bc[n].url && bc[n].url !== "")
 				s += " " + lws_san(bc[n].name) + " ";
 			else {
-				s = s + "<a href=# id=\"bc_"+ ws.divname + ws.bcq + "\" h=\"" + ws.lwsgt_cb + "\" p=\""+ws.lwsgt_parent+"\" aa=\"="+
+				s += "<a href=# id=\"bc_"+ ws.divname + ws.bcq + "\" h=\"" +
+				    ws.lwsgt_cb + "\" p=\""+ws.lwsgt_parent+"\" aa=\"="+
 					lws_san(encodeURI(bc[n].url))+"\" m=\"-1\" n=\"-1\">" +
 					lws_san(bc[n].name) + "</a> ";
 				ws.bcq++;
@@ -45,18 +47,25 @@
 	s += "<tr>";
 	for (n = 0; n < j.cols.length; n++)
 		if (!j.cols[n].hide)
-			s = s + "<td class=\"lwsgt_hdr\">" + lws_san(j.cols[n].name) + "</td>";
+			s = s + "<td class=\"lwsgt_hdr\">" + lws_san(j.cols[n].name) +
+				"</td>";
 	
 	s += "</tr>";
 	
 	return s;
-} 
+}
+
+function lwsgt_click_callthru()
+{
+	window[this.getAttribute("h")](this.getAttribute("p"), this.getAttribute("aa"), this.getAttribute("m"), this.getAttribute("n"));
+	event.preventDefault();
+}
 
 function lwsgt_initial(title, pcol, divname, cb, gname)
 {
 	this.divname = divname;
 	
-	lws_gray_out(true,{'zindex':'499'});
+	lws_gray_out(true,{"zindex":"499"});
 
 	if (typeof MozWebSocket != "undefined")
 		this.lwsgt_ws = new MozWebSocket(lwsgt_get_appropriate_ws_url(), pcol);
@@ -71,7 +80,7 @@
 			lws_gray_out(false);
 		//	document.getElementById("debug").textContent =
 		//		"ws opened " + lwsgt_get_appropriate_ws_url();
-		}
+		};
 		this.lwsgt_ws.onmessage = function got_packet(msg) {
 			var s, m, n, j = JSON.parse(msg.data);
 			document.getElementById("debug").textContent = msg.data;
@@ -114,24 +123,20 @@
 				s = s + "</table>";
 				document.getElementById(this.divname).innerHTML = s;
 				for (n = 0; n < q; n++)
-					document.getElementById(this.divname + n).onclick = lwsgt_click_callthru;
+					document.getElementById(this.divname + n).onclick =
+						lwsgt_click_callthru;
 
 				for (n = 0; n < this.bcq; n++)
-					document.getElementById("bc_" + this.divname + n).onclick = lwsgt_click_callthru;
+					document.getElementById("bc_" + this.divname + n).onclick =
+						lwsgt_click_callthru;
 
 			}		
-		}
+		};
 		this.lwsgt_ws.onclose = function(){
-			lws_gray_out(true,{'zindex':'499'});
-		}
+			lws_gray_out(true,{"zindex":"499"});
+		};
 	} catch(exception) {
-		alert('<p>Error' + exception);  
+		alert("<p>Error" + exception);  
 	}
 }
 
-function lwsgt_click_callthru()
-{
-	window[this.getAttribute("h")](this.getAttribute("p"), this.getAttribute("aa"), this.getAttribute("m"), this.getAttribute("n"));
-	event.preventDefault();
-}
-
diff --git a/plugins/protocol_lws_server_status.c b/plugins/protocol_lws_server_status.c
index 24cdfdc..3ffdfde 100644
--- a/plugins/protocol_lws_server_status.c
+++ b/plugins/protocol_lws_server_status.c
@@ -27,11 +27,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
-struct lws_ss_load_sample {
-	time_t t;
-	int load_x100;
-};
-
 struct lws_ss_filepath {
 	struct lws_ss_filepath *next;
 	char filepath[128];
@@ -40,10 +35,6 @@
 struct lws_ss_dumps {
 	char buf[32768];
 	int length;
-
-	struct lws_ss_load_sample load[64];
-	int load_head;
-	int load_tail;
 };
 
 struct per_session_data__server_status {
@@ -110,7 +101,6 @@
 	}
 	n = lws_snprintf(p, l, "]}");
 	p += n;
-	l -= n;
 
 	v->d.length = p - (v->d.buf + LWS_PRE);
 
diff --git a/plugins/protocol_lws_sshd_demo.c b/plugins/protocol_lws_sshd_demo.c
index c09320f..a6117f4 100644
--- a/plugins/protocol_lws_sshd_demo.c
+++ b/plugins/protocol_lws_sshd_demo.c
@@ -242,7 +242,7 @@
 ssh_ops_is_pubkey_authorized(const char *username, const char *type,
 				 const uint8_t *peer, int peer_len)
 {
-	char *aps = NULL, *p, *ps;
+	char *aps, *p, *ps;
 	int n = (int)strlen(type), alen = 2048, ret = 2, len;
 	size_t s = 0;
 
diff --git a/plugins/server-status.js b/plugins/server-status.js
index f0080a5..24a7826 100644
--- a/plugins/server-status.js
+++ b/plugins/server-status.js
@@ -1,4 +1,4 @@
-(function () {
+(function() {
 
 /*
  * We display untrusted stuff in html context... reject anything
@@ -7,7 +7,7 @@
 
 function san(s)
 {
-	if (s.search("<") != -1)
+	if (s.search("<") !== -1)
 		return "invalid string";
 	
 	return s;
@@ -15,7 +15,7 @@
 
 function humanize(s)
 {
-	i = parseInt(s);
+	var i = parseInt(s, 10);
 	
 	if (i > 1000000000)
 		return (i / 1000000000).toFixed(3) + "G";
@@ -41,16 +41,16 @@
 	 * https:// url itself, otherwise unencrypted
 	 */
 
-	if (u.substring(0, 5) == "https") {
+	if (u.substring(0, 5) === "https") {
 		pcol = "wss://";
 		u = u.substr(8);
 	} else {
 		pcol = "ws://";
-		if (u.substring(0, 4) == "http")
+		if (u.substring(0, 4) === "http")
 			u = u.substr(7);
 	}
 
-	u = u.split('/');
+	u = u.split("/");
 
 	/* + "/xxx" bit is for IE10 workaround */
 
@@ -69,7 +69,7 @@
 		socket_status.onopen = function() {
 			document.getElementById("title").innerHTML = "Server Status (Active)";
 			lws_gray_out(false);
-		}
+		};
 
 		socket_status.onmessage =function got_packet(msg) {
 			var u, ci, n;
@@ -77,9 +77,9 @@
 			if (msg.data.length < 100)
 				return;
 			jso = JSON.parse(msg.data);
-			u = parseInt(san(jso.i.uptime));
+			u = parseInt(san(jso.i.uptime), 10);
 
-			if (parseInt(jso.i.contexts[0].deprecated) == 0)
+			if (parseInt(jso.i.contexts[0].deprecated, 10) === 0)
 				s = "<table><tr><td></td><td class=\"c0\">";
 			else
 				s = "<table><tr><td></td><td class=\"dc0\">";
@@ -107,14 +107,14 @@
 
 			for (ci = 0; ci < jso.i.contexts.length; ci++) {
 
-				if (parseInt(jso.i.contexts[ci].deprecated) == 0)
+				if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0)
 					s += "<tr><td></td><td class=\"c\">" +
 					  "Active Context</td><td>";
 				else
 					s += "<tr><td></td><td class=\"c1\">" +
 					  "Deprecated Context " + ci + "</td><td>";
 
-				  u = parseInt(san(jso.i.contexts[ci].context_uptime));
+				  u = parseInt(san(jso.i.contexts[ci].context_uptime), 10);
 	  			  s += "<span class=n>Uptime:</span> <span class=v>" +
 				  ((u / (24 * 3600)) | 0) + "d " +
 				  (((u % (24 * 3600)) / 3600) | 0) + "h " +
@@ -123,8 +123,8 @@
 				s = s +
 				  "<br>" +
 				  "<span class=n>Listening wsi:</span> <span class=v>" + san(jso.i.contexts[ci].listen_wsi) + "</span>, " +
-				  "<span class=n>Current wsi alive:</span> <span class=v>" + (parseInt(san(jso.i.contexts[ci].wsi_alive)) -
-				  							      parseInt(san(jso.i.contexts[ci].listen_wsi))) + "</span><br>" +
+				  "<span class=n>Current wsi alive:</span> <span class=v>" + (parseInt(san(jso.i.contexts[ci].wsi_alive), 10) -
+						  parseInt(san(jso.i.contexts[ci].listen_wsi), 10)) + "</span><br>" +
 			  	  "<span class=n>Total Rx:</span> <span class=v>" + humanize(san(jso.i.contexts[ci].rx)) +"</span>, " +
 			  	  "<span class=n>Total Tx:</span> <span class=v>" + humanize(san(jso.i.contexts[ci].tx)) +"</span><br>" +
 			  	  
@@ -144,7 +144,7 @@
 				
 				for (n = 0; n < jso.i.contexts[ci].pt.length; n++) {
 
-					if (parseInt(jso.i.contexts[ci].deprecated) == 0)
+					if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0)
 						s += "<tr><td>&nbsp;&nbsp;</td><td class=\"l\">service thread " + (n + 1);
 					else
 						s += "<tr><td>&nbsp;&nbsp;</td><td class=\"dl\">service thread " + (n + 1);
@@ -159,18 +159,18 @@
 	
 				}
 				for (n = 0; n < jso.i.contexts[ci].vhosts.length; n++) {
-					if (parseInt(jso.i.contexts[ci].deprecated) == 0)
+					if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0)
 						s += "<tr><td>&nbsp;&nbsp;</td><td class=\"l\">vhost " + (n + 1);
 					else
 						s += "<tr><td>&nbsp;&nbsp;</td><td class=\"dl\">vhost " + (n + 1);
 					s += "</td><td><span class=\"mountname\">";
-					if (jso.i.contexts[ci].vhosts[n].use_ssl == '1')
+					if (jso.i.contexts[ci].vhosts[n].use_ssl === "1")
 						s = s + "https://";
 					else
 						s = s + "http://";
 					s = s + san(jso.i.contexts[ci].vhosts[n].name) + ":" +
 						san(jso.i.contexts[ci].vhosts[n].port) + "</span>";
-					if (jso.i.contexts[ci].vhosts[n].sts == '1')
+					if (jso.i.contexts[ci].vhosts[n].sts === "1")
 						s = s + " (STS)";
 					s = s +"<br>" +
 					
@@ -196,7 +196,7 @@
 							"</span></td><td><span class=\"m2\">" +
 							san(jso.i.contexts[ci].vhosts[n].mounts[m].origin) +
 							"</span></td><td>";
-						if (parseInt(san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age)))
+						if (parseInt(san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age), 10))
 							s = s + "<span class=n>max-age:</span> <span class=v>" +
 							san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age) +
 							"</span>, <span class=n>reuse:</span> <span class=v>" +
@@ -205,7 +205,7 @@
 							san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_revalidate) +
 							"</span>, <span class=n>inter:</span> <span class=v>" +
 							san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_intermediaries);
-						s = s + "</span></td></tr>"
+						s = s + "</span></td></tr>";
 					}
 					s = s + "</table>";
 					s = s + "</td></tr>";
@@ -217,14 +217,14 @@
 			s = s + "</table>";
 			
 			document.getElementById("conninfo").innerHTML = s;
-		} 
+		};
 
 		socket_status.onclose = function(){
 			document.getElementById("title").innerHTML = "Server Status (Disconnected)";
-			lws_gray_out(true,{'zindex':'499'});
-		}
+			lws_gray_out(true,{"zindex":"499"});
+		};
 	} catch(exception) {
-		alert('<p>Error' + exception);  
+		alert("<p>Error" + exception);  
 	}
 }
 
@@ -232,10 +232,11 @@
 
 window.addEventListener("load", function() {
 
-	lws_gray_out(true,{'zindex':'499'});
+	lws_gray_out(true,{"zindex":"499"});
 	
 	ws_open_server_status();
 	
 }, false);
 
-})();
+}());
+
diff --git a/plugins/ssh-base/crypto/sc25519.c b/plugins/ssh-base/crypto/sc25519.c
index 072fff3..fdb5a80 100644
--- a/plugins/ssh-base/crypto/sc25519.c
+++ b/plugins/ssh-base/crypto/sc25519.c
@@ -180,11 +180,10 @@
 void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y)
 {
   uint32_t b = 0;
-  uint32_t t;
   int i;
   for(i=0;i<32;i++)
   {
-    t = x->v[i] - y->v[i] - b;
+    uint32_t t = x->v[i] - y->v[i] - b;
     r->v[i] = t & 255;
     b = (t >> 8) & 1;
   }
diff --git a/plugins/ssh-base/crypto/smult_curve25519_ref.c b/plugins/ssh-base/crypto/smult_curve25519_ref.c
index c514c8b..bd5250f 100644
--- a/plugins/ssh-base/crypto/smult_curve25519_ref.c
+++ b/plugins/ssh-base/crypto/smult_curve25519_ref.c
@@ -60,10 +60,10 @@
 static void mult(unsigned int out[32],const unsigned int a[32],const unsigned int b[32])
 {
   unsigned int i;
-  unsigned int j;
-  unsigned int u;
 
   for (i = 0;i < 32;++i) {
+    unsigned int j;
+    unsigned int u;
     u = 0;
     for (j = 0;j <= i;++j) u += a[j] * b[i - j];
     for (j = i + 1;j < 32;++j) u += 38 * a[j] * b[i + 32 - j];
diff --git a/scripts/libwebsockets.spec b/scripts/libwebsockets.spec
index e33fba7..d13616a 100644
--- a/scripts/libwebsockets.spec
+++ b/scripts/libwebsockets.spec
@@ -50,7 +50,6 @@
 /usr/bin/libwebsockets-test-server
 /usr/bin/libwebsockets-test-client
 /usr/bin/libwebsockets-test-sshd
-/usr/bin/libwebsockets-test-fuzxy
 /usr/bin/libwebsockets-test-lejp
 /usr/bin/libwebsockets-test-server-extpoll
 /usr/bin/lwsws
diff --git a/scripts/travis_control.sh b/scripts/travis_control.sh
index 41fc775..ef4b0ae 100755
--- a/scripts/travis_control.sh
+++ b/scripts/travis_control.sh
@@ -1,4 +1,4 @@
-#/bin/bash
+#!/bin/bash
 
 if [ "$COVERITY_SCAN_BRANCH" != 1 -a "$TRAVIS_OS_NAME" = "osx" ]; then
 	if [ "$LWS_METHOD" != "mbedtls" ] ; then
diff --git a/scripts/travis_install.sh b/scripts/travis_install.sh
index 724ced8..3956422 100755
--- a/scripts/travis_install.sh
+++ b/scripts/travis_install.sh
@@ -10,9 +10,9 @@
 	then
 		sudo apt-get install -y -qq realpath libjemalloc1 libev4 libuv-dev libdbus-1-dev
 		sudo apt-get remove python-six
-		sudo pip install six>=1.9
-		sudo pip install Twisted==16.0.0
-		sudo pip install pyopenssl>=0.14
+		sudo pip install "six>=1.9"
+		sudo pip install "Twisted==16.0.0"
+		sudo pip install "pyopenssl>=0.14"
 		sudo pip install autobahntestsuite
 		wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2
 		cd /
diff --git a/test-apps/fuzxy.c b/test-apps/fuzxy.c
deleted file mode 100644
index 9455cbb..0000000
--- a/test-apps/fuzxy.c
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
- * fuzzing proxy - network-level fuzzing injection proxy
- *
- * Copyright (C) 2016 Andy Green <andy@warmcat.com>
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation:
- *  version 2.1 of the License.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- *  MA	02110-1301  USA
- *
- *
- * fuzxy is designed to go on the client path
- *
- * [ client <-> fuzxy ] <-> server
- *
- * you can arrange that with, eg,
- *
- *  http_proxy=localhost:8880
- *
- * env var before starting the client.
- *
- * Even though he is on the client side, he is able to see and change traffic
- * in both directions, and so fuzz both the client and the server.
- */
-
-#if defined(_WIN32) && defined(EXTERNAL_POLL)
-#define WINVER 0x0600
-#define _WIN32_WINNT 0x0600
-#define poll(fdArray, fds, timeout)  WSAPoll((LPWSAPOLLFD)(fdArray), (ULONG)(fds), (INT)(timeout))
-#endif
-
-#include "lws_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <signal.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <errno.h>
-#include <libwebsockets.h>
-
-#ifdef _WIN32
-#include <io.h>
-#include "gettimeofday.h"
-#else
-#include <syslog.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#endif
-
-#if defined(__NetBSD__)
-#include <netinet/in.h>
-#endif
-
-#if defined(__sun)
-#include <strings.h> /* bzero */
-#endif
-
-#define MAX_FUZZ_BUF (1024 * 1024)
-
-enum types {
-	FZY_S_DEAD		= 0,
-	FZY_S_LISTENING		= 1,
-	FZY_S_ACCEPTED		= 2,
-	FZY_S_PROXIED		= 3,
-	FZY_S_ONWARD		= 4,
-};
-
-enum proxy_parser_states {
-	FZY_PP_CONNECT		= 0,
-	FZY_PP_ADDRESS		= 1,
-	FZY_PP_PORT		= 2,
-	FZY_PP_CRLFS		= 3,
-};
-
-enum fuzzer_parser_states {
-	FZY_FP_SEARCH		= 0,
-	FZY_FP_SEARCH2		= 1,
-	FZY_FP_INJECT_PREPARE	= 2,
-	FZY_FP_INJECT		= 3,
-	FZY_FP_PENDING		= 4,
-};
-
-struct ring {
-	char buf[4096];
-	int head;
-	int tail;
-};
-
-struct state {
-	enum types type;
-	enum proxy_parser_states pp;
-	int ppc;
-
-	struct ring in;
-
-	char address[256];
-	int port;
-
-	enum fuzzer_parser_states fp;
-	int fuzc;
-	int pending;
-
-	int twin; /* must be fixed up when arrays lose guys */
-	unsigned int outbound:1; /* from local -> remote */
-	unsigned int is_pending:1;
-
-	unsigned char buf[MAX_FUZZ_BUF];
-	unsigned int inject_len;
-};
-
-struct test {
-	const char *s[3];
-	int len[2];
-	unsigned int swallow:1;
-};
-
-int force_exit = 0;
-int which = 5;
-
-static const struct test tests[] = {
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-	    "{ 0xd9, 0x87, 0xd2, 0x88, 0xd2, (248){ 0x89, 0xd2 }, 0x0d, 0x0a },"
-	  }, { 0, 4 }, 1 },
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-	    "{ 0xd9, 0x87, 0xd2, 0x88, 0xd2, (1373){ 0x89, 0xd2 }, 0x0d, 0x0a },"
-	  }, { 0, 4 }, 1 },
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-	    "{ 0xd9, 0x87, 0xd2, 0x88, 0xd2, (16967){ 0x89, 0xd2 }, (87){ 0xe2, 0x82, 0xac }, 0x0d, 0x0a },"
-	  }, { 0, 4 }, 1 },
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-		"0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, "
-		"0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, "
-		"0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, "
-		"0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, "
-		"0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, "
-		"0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, "
-		"0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, "
-		"0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, "
-		"0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, "
-		"0xef, 0xbb, 0xbf, 0xc2, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, "
-		"0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, "
-		"0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, "
-		"0x3a, 0x20, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, "
-		"0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x0d, 0x0a, "
-	  }, { 0, 4 }, 1 },
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-		"(20){0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, "
-		"0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, "
-		"0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, "
-		"0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, "
-		"0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, "
-		"0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, "
-		"0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, "
-		"0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, "
-		"0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, "
-		"0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, "
-		"0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, "
-		"0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, "
-		"0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, "
-		"0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, "
-		"0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, "
-		"0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, "
-		"0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, "
-		"0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, "
-		"0xc2, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, "
-		"0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, "
-		"0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, "
-		"0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, "
-		"0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, "
-		"0x3a, 0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, "
-		"0x42, 0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, "
-		"0x69, 0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, "
-		"0x6b, 0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, "
-		"0x0a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, "
-		"0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, "
-		"0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, "
-		"0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, "
-		"0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, "
-		"0x3a, 0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, "
-		"0x42, 0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, "
-		"0x69, 0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, "
-		"0x6b, 0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, "
-		"0x0a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, "
-		"0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, "
-		"0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, "
-		"0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, "
-		"0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, "
-		"0x3a, 0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, "
-		"0x42, 0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, "
-		"0x69, 0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, "
-		"0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, "
-		"0x6b, 0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, "
-		"0x0a, 0xc0, 0x80, 0xef, 0xb7, 0x90, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, "
-		"0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, "
-		"0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, "
-		"0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, "
-		"0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, "
-		"0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, "
-		"0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, "
-		"0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, 0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, "
-		"0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, "
-		"0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, "
-		"0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, "
-		"0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, "
-		"0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, "
-		"0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, "
-		"0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, "
-		"0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, "
-		"0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, "
-		"0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, "
-		"0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, 0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, "
-		"0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, "
-		"0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, "
-		"0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, "
-		"0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, 0xc2, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, "
-		"0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, "
-		"0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, "
-		"0x61, 0x64, 0x0d, 0x0a, }"
-	}, { 0, 4 }, 1 },
-	{ { NULL, "\x0d\x0a\x0d\x0a",
-		"0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, "
-		"0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x77, 0x65, "
-		"0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, "
-		"0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x0d, 0x0a, 0x53, 0x65, "
-		"0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x4b, 0x65, 0x79, 0x3a, "
-		"0x20, 0x64, 0x47, 0x68, 0x6c, 0x49, 0x48, 0x4e, 0x68, 0x62, 0x58, 0x42, 0x73, 0x5a, 0x53, 0x42, "
-		"0x75, 0x62, 0x32, 0x35, 0x6a, 0x5a, 0x51, 0x3d, 0x3d, 0x0d, 0x0a, 0x4f, 0x72, 0x69, 0x67, 0x69, "
-		"0x6e, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, "
-		"0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x2d, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, "
-		"0x65, 0x74, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x33, 0x0d, 0x0a, "
-		"0xef, 0xbb, 0xbf, 0xc2, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x48, 0x54, "
-		"0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x32, "
-		"0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0d, 0x0a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, "
-		"0x3a, 0x20, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, "
-		"0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x0d, 0x0a, (2048){ 0x0d, 0x0a}"
-	  }, { 0, 4 }, 1 },
-};
-
-static int ring_size(struct ring *r)
-{
-	return sizeof(r->buf);
-}
-static int ring_used(struct ring *r)
-{
-	return (r->head - r->tail) & (ring_size(r) - 1);
-}
-static int ring_free(struct ring *r)
-{
-	return (ring_size(r) - 1) - ring_used(r);
-}
-static int ring_get_one(struct ring *r)
-{
-	int n = r->buf[r->tail] & 255;
-
-	if (r->tail == r->head)
-		return -1;
-
-	r->tail++;
-	if (r->tail == ring_size(r))
-		r->tail = 0;
-
-	return n;
-}
-
-static int hex(char c)
-{
-	if (c >= '0' && c <= '9')
-		return c -'0';
-	if (c >= 'a' && c <= 'f')
-		return c - 'a' + 10;
-	if (c >='A' && c <= 'F')
-		return c - 'A' + 10;
-
-	return -1;
-}
-
-static int
-fuzxy_tok(const char **src, unsigned char **buf, int *len)
-{
-	unsigned char *start;
-	unsigned int count, rlen;
-
-	while (**src) {
-
-		if (**src == ' ' || **src == ','  || **src == '\n') {
-			(*src)++;
-			continue;
-		}
-
-		if ((*src)[0] == '}') {
-			(*src)++;
-			return 0;
-		}
-
-		if ((*src)[0] == '0' && (*src)[1] == 'x') {
-			if (!len) {
-				lwsl_err("out of space\n");
-				return -1;
-			}
-
-			((*buf)++)[0] = (hex((*src)[2]) << 4) | hex((*src)[3]);
-			*src += 4;
-			(*len)--;
-		}
-
-		if (*src[0] == '(') {
-			start = *buf;
-			(*src)++;
-			count = atoi(*src) - 1;
-			lwsl_err("count %d\n", count);
-			while (**src && **src != ')')
-				(*src)++;
-			if (!(*src)[0]) {
-				lwsl_err("unexpected end in (\n");
-				return -1;
-			}
-			(*src)++;
-			while (**src == ' ')
-				(*src)++;
-			if (**src != '{') {
-				lwsl_err("missing {\n");
-
-				return -1;
-			}
-			(*src)++;
-			if (fuzxy_tok(src, buf, len))
-				return -1;
-			rlen = *buf - start;
-			while (count--) {
-				if (*len < (int)rlen) {
-					lwsl_err("out of space\n");
-					return -1;
-				}
-				memcpy(*buf, start, rlen);
-				*buf += rlen;
-				*len -= rlen;
-			}
-		}
-	}
-
-	return 0;
-}
-
-static int
-fuzxy_create_pattern(const char *src, unsigned char *buf, int len)
-{
-	unsigned char *old = buf;
-	int n;
-
-	while (*src && (*src == '{' || *src == ' '))
-		src++;
-
-	if (!*src)
-		return -1;
-
-	n = fuzxy_tok(&src, &buf, &len);
-	if (n)
-		return -1;
-
-	return buf - old;
-}
-
-void sighandler(int sig)
-{
-	force_exit = 1;
-}
-
-static struct option options[] = {
-	{ "help",	no_argument,		NULL, 'h' },
-	{ "debug",	required_argument,	NULL, 'd' },
-	{ "port",	required_argument,	NULL, 'p' },
-	{ "ssl",	no_argument,		NULL, 's' },
-	{ "allow-non-ssl",	no_argument,	NULL, 'a' },
-	{ "interface",	required_argument,	NULL, 'i' },
-	{ "closetest",	no_argument,		NULL, 'c' },
-	{ "libev",  no_argument,		NULL, 'e' },
-#ifndef LWS_NO_DAEMONIZE
-	{ "daemonize",	no_argument,		NULL, 'D' },
-#endif
-	{ "resource_path", required_argument,	NULL, 'r' },
-	{ NULL, 0, 0, 0 }
-};
-
-static struct pollfd pfd[128];
-static struct state state[128];
-static int pfds = 0;
-
-static void close_and_remove_fd(int index)
-{
-	int n;
-
-	lwsl_notice("%s: closing index %d\n", __func__, index);
-	close(pfd[index].fd);
-	pfd[index].fd = -1;
-
-	n = state[index].twin;
-	if (n) {
-		assert(state[n].twin == index);
-	}
-	state[index].type = FZY_S_DEAD;
-
-	if (index == pfds - 1) {
-		if (state[index].twin)
-			state[state[index].twin].twin = 0;
-		state[index].twin = 0;
-		goto bail;
-	}
-
-	/* swap the end guy into the deleted guy and trim back one */
-
-	if (state[pfds - 1].twin) {
-		state[state[pfds - 1].twin].twin = index;
-		if (n && n == pfds - 1)
-			n = index;
-	}
-
-	/* swap the last guy into dead guy's place and trim by one */
-	pfd[index] = pfd[pfds - 1];
-	state[index] = state[pfds - 1];
-
-	if (n) {
-		pfds--;
-		state[n].twin = 0;
-		close_and_remove_fd(n);
-		return;
-	}
-
-bail:
-	pfds--;
-}
-
-static void construct_state(int n, enum types s, int flags)
-{
-	memset(&state[n], 0, sizeof state[n]);
-	state[n].type = s;
-	pfd[n].events = flags | POLLHUP;
-}
-
-static int
-fuzxy_listen(const char *interface_name, int port, int *sockfd)
-{
-	struct sockaddr_in serv_addr4;
-	socklen_t len = sizeof(struct sockaddr);
-	struct sockaddr_in sin;
-	int n, opt = 1;
-
-	*sockfd = socket(AF_INET, SOCK_STREAM, 0);
-
-	if (*sockfd == -1) {
-		lwsl_err("ERROR opening socket\n");
-		goto bail1;
-	}
-
-	if (setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR,
-		       (const void *)&opt, sizeof(opt)) < 0) {
-		lwsl_err("unable to set listen socket options\n");
-		goto bail2;
-	}
-
-	bzero((char *) &serv_addr4, sizeof(serv_addr4));
-	serv_addr4.sin_addr.s_addr = INADDR_ANY;
-	serv_addr4.sin_family = AF_INET;
-
-	if (interface_name[0] &&
-	    lws_interface_to_sa(0, interface_name, (struct sockaddr_in *)
-				(struct sockaddr *)&serv_addr4,
-				sizeof(serv_addr4)) < 0) {
-		lwsl_err("Unable to find interface %s\n", interface_name);
-		goto bail2;
-	}
-
-	serv_addr4.sin_port = htons(port);
-
-	n = bind(*sockfd, (struct sockaddr *)&serv_addr4,
-				sizeof(serv_addr4));
-	if (n < 0) {
-		lwsl_err("ERROR on binding to port %d (%d %d)\n",
-			 port, n, errno);
-		goto bail2;
-	}
-
-	if (getsockname(*sockfd, (struct sockaddr *)&sin, &len) == -1)
-		lwsl_warn("getsockname: %s\n", strerror(errno));
-	else
-		port = ntohs(sin.sin_port);
-
-	listen(*sockfd, SOMAXCONN);
-
-	return 0;
-bail2:
-	close(*sockfd);
-bail1:
-	return -1;
-}
-
-
-static int fuzz(int n, char *out, int len)
-{
-	struct state *s = &state[n];
-	const struct test *t = &tests[which];
-	int m = 0;
-	int c;
-
-	while (m < len) {
-		switch (s->fp) {
-		case FZY_FP_SEARCH:
-			if (t->s[0] == NULL) {
-				s->fuzc = 0;
-				s->is_pending = 0;
-				s->fp = FZY_FP_SEARCH2;
-				goto search2;
-			}
-			c = ring_get_one(&state[s->twin].in);
-			if (c < 0)
-				return m;
-			if (c == tests[which].s[0][s->fuzc++]) {
-				if (s->fuzc == t->len[0]) {
-					s->fuzc = 0;
-					s->fp = FZY_FP_SEARCH2;
-				}
-			} else
-				s->fuzc = 0;
-			out[m++] = c;
-			break;
-
-		case FZY_FP_SEARCH2:
-search2:
-			if (tests[which].s[1] == NULL) {
-				s->fuzc = 0;
-				s->is_pending = 0;
-				s->fp = FZY_FP_INJECT_PREPARE;
-				goto inject;
-			}
-			c = ring_get_one(&state[s->twin].in);
-			if (c < 0)
-				return m;
-			if (c == tests[which].s[1][s->fuzc++]) {
-				if (s->fuzc == tests[which].len[1]) {
-					lwsl_notice("+++++++fuzzer hit...\n");
-					s->fuzc = 0;
-					s->fp = FZY_FP_INJECT_PREPARE;
-					s->is_pending = !t->swallow;
-					s->pending = c;
-					goto inject;
-				}
-			} else
-				s->fuzc = 0;
-			if (!t->swallow)
-				out[m++] = c;
-			break;
-
-		case FZY_FP_INJECT_PREPARE:
-inject:
-			s->inject_len = fuzxy_create_pattern(t->s[2],
-				s->buf, sizeof(s->buf));
-			if (s->inject_len == (unsigned int) -1)
-				return -1;
-			s->fp = FZY_FP_INJECT;
-			/* fallthru */
-
-		case FZY_FP_INJECT:
-			out[m++] = s->buf[s->fuzc++];
-			if (s->fuzc == (int)s->inject_len)
-				s->fp = FZY_FP_PENDING;
-			break;
-
-		case FZY_FP_PENDING:
-			if (s->is_pending)
-				out[m++] = s->pending;
-			s->fp = FZY_FP_SEARCH;
-			s->fuzc = 0;
-			break;
-		}
-	}
-
-	return m;
-}
-
-static int
-handle_accept(int n)
-{
-	struct addrinfo ai, *res, *result;
-	struct sockaddr_in serv_addr4;
-	struct state *s = &state[n];
-	void *p = NULL;
-	int m, sockfd;
-
-	while (1) {
-		m = ring_get_one(&s->in);
-		if (m < 0)
-			return 0;
-
-		switch (s->pp) {
-		case FZY_PP_CONNECT:
-			if (m != "CONNECT "[s->ppc++]) {
-				lwsl_notice("failed CONNECT match\n");
-				return 1;
-			}
-			if (s->ppc == 8) {
-				s->pp = FZY_PP_ADDRESS;
-				s->ppc = 0;
-			}
-			break;
-		case FZY_PP_ADDRESS:
-			if (m == ':') {
-				s->address[s->ppc++] = '\0';
-				s->pp = FZY_PP_PORT;
-				s->ppc = 0;
-				break;
-			}
-			if (m == ' ') {
-				s->address[s->ppc++] = '\0';
-				s->pp = FZY_PP_CRLFS;
-				s->ppc = 0;
-				break;
-			}
-
-
-			s->address[s->ppc++] = m;
-			if (s->ppc == sizeof(s->address)) {
-				lwsl_notice("Failed on address length\n");
-				return 1;
-			}
-			break;
-		case FZY_PP_PORT:
-			if (m == ' ') {
-				s->pp = FZY_PP_CRLFS;
-				s->ppc = 0;
-				break;
-			}
-			if (m >= '0' && m <= '9') {
-				s->port *= 10;
-				s->port += m - '0';
-				break;
-			}
-			return 1;
-
-		case FZY_PP_CRLFS:
-			if (m != "\x0d\x0a\x0d\x0a"[s->ppc++])
-				s->ppc = 0;
-			if (s->ppc != 4)
-				break;
-			s->type = FZY_S_PROXIED;
-
-			memset (&ai, 0, sizeof ai);
-			ai.ai_family = PF_UNSPEC;
-			ai.ai_socktype = SOCK_STREAM;
-
-			if (getaddrinfo(s->address, NULL, &ai, &result)) {
-				lwsl_notice("failed to lookup %s\n",
-					    s->address);
-				return 1;
-			}
-
-			res = result;
-			while (!p && res) {
-				switch (res->ai_family) {
-				case AF_INET:
-					p = &((struct sockaddr_in *)res->
-					      ai_addr)->sin_addr;
-					break;
-				}
-
-				res = res->ai_next;
-			}
-
-			if (!p) {
-				lwsl_notice("Failed to get address result %s\n",
-					    s->address);
-				freeaddrinfo(result);
-				return 1;
-			}
-
-			serv_addr4.sin_family = AF_INET;
-			serv_addr4.sin_addr = *((struct in_addr *)p);
-			serv_addr4.sin_port = htons(s->port);
-			bzero(&serv_addr4.sin_zero, 8);
-			freeaddrinfo(result);
-
-			lwsl_err("Conn %d req '%s' port %d\n", n,
-				 s->address, s->port);
-			/* we need to open the associated onward connection */
-			sockfd = socket(AF_INET, SOCK_STREAM, 0);
-			if (sockfd < 0) {
-				lwsl_err("Could not get socket\n");
-				return -1;
-			}
-
-			if (connect(sockfd, (struct sockaddr *)&serv_addr4,
-				    sizeof(struct sockaddr)) == -1 ||
-			    errno == EISCONN) {
-				close(sockfd);
-				lwsl_err("proxied onward connection failed\n");
-				return 1;
-			}
-			s->twin = pfds;
-			construct_state(pfds, FZY_S_ONWARD,
-					POLLOUT | POLLIN | POLLERR);
-			state[pfds].twin = n;
-			lwsl_notice("binding conns %d and %d\n", n, pfds);
-			state[pfds].outbound = s->outbound;
-			state[pfds].ppc = 0;
-			pfd[pfds++].fd = sockfd;
-
-			lwsl_notice("onward connection in progress\n");
-			if (ring_used(&s->in))
-				pfd[s->twin].events |= POLLOUT;
-			if (write(pfd[n].fd,
-				  "HTTP/1.0 200 \x0d\x0a\x0d\x0a", 17) < 17)
-				return 1;
-		}
-	}
-
-	return 0;
-}
-
-static void sigpipe_handler(int x)
-{
-}
-
-int
-main(int argc, char **argv)
-{
-	char interface_name[128] = "", interface_name_local[128] = "lo";
-	int port_local = 8880, accept_fd;
-	struct sockaddr_in cli_addr;
-	int debug_level = 7;
-	socklen_t clilen;
-	struct state *s;
-	char out[4096];
-	int opts = 0;
-	int n = 0, m;
-
-#ifndef _WIN32
-/* LOG_PERROR is not POSIX standard, and may not be portable */
-#ifdef __sun
-	int syslog_options = LOG_PID;
-#else
-	int syslog_options = LOG_PID | LOG_PERROR;
-#endif
-#endif
-#ifndef LWS_NO_DAEMONIZE
-	int daemonize = 0;
-#endif
-	signal(SIGPIPE, sigpipe_handler);
-
-	while (n >= 0) {
-		n = getopt_long(argc, argv, "eci:hsap:d:Dr:", options, NULL);
-		if (n < 0)
-			continue;
-		switch (n) {
-		case 'e':
-			opts |= LWS_SERVER_OPTION_LIBEV;
-			break;
-#ifndef LWS_NO_DAEMONIZE
-		case 'D':
-			daemonize = 1;
-			#if !defined(_WIN32) && !defined(__sun)
-			syslog_options &= ~LOG_PERROR;
-			#endif
-			break;
-#endif
-		case 'd':
-			debug_level = atoi(optarg);
-			break;
-		case 'p':
-			port_local = atoi(optarg);
-			break;
-		case 'i':
-			lws_strncpy(interface_name, optarg, sizeof interface_name);
-			break;
-		case 'h':
-			fprintf(stderr, "Usage: libwebsockets-test-fuzxy "
-					"[--port=<p>] [--ssl] "
-					"[-d <log bitfield>] "
-					"[--resource_path <path>]\n");
-			exit(1);
-		}
-	}
-
-#if !defined(LWS_NO_DAEMONIZE) && !defined(WIN32)
-	/*
-	 * normally lock path would be /var/lock/lwsts or similar, to
-	 * simplify getting started without having to take care about
-	 * permissions or running as root, set to /tmp/.lwsts-lock
-	 */
-	if (daemonize && lws_daemonize("/tmp/.lwsts-lock")) {
-		fprintf(stderr, "Failed to daemonize\n");
-		return 1;
-	}
-#endif
-
-	signal(SIGINT, sighandler);
-
-#ifndef _WIN32
-	/* we will only try to log things according to our debug_level */
-	setlogmask(LOG_UPTO (LOG_DEBUG));
-	openlog("fuzxy", syslog_options, LOG_DAEMON);
-#endif
-
-	/* tell the library what debug level to emit and to send it to syslog */
-	lws_set_log_level(debug_level, lwsl_emit_syslog);
-
-	lwsl_notice("libwebsockets fuzzing proxy - license LGPL2.1+SLE\n");
-	lwsl_notice("(C) Copyright 2016 Andy Green <andy@warmcat.com>\n");
-
-	/* listen on local side */
-
-	if (fuzxy_listen(interface_name, port_local, &pfd[pfds].fd)) {
-		lwsl_err("Failed to listen on local side\n");
-		goto bail1;
-	}
-	construct_state(pfds, FZY_S_LISTENING, POLLIN | POLLERR);
-	pfds++;
-
-	(void)interface_name_local;
-	lwsl_notice("Local side listening on %s:%u\n",
-		    interface_name_local, port_local);
-
-	while (!force_exit) {
-
-		m = poll(pfd, pfds, 50);
-		if (m < 0)
-			continue;
-		for (n = 0; n < pfds; n++) {
-			s = &state[n];
-			if (s->type == FZY_S_LISTENING &&
-			    (pfd[n].revents & POLLIN)) {
-				/* first do the accept entry */
-
-				clilen = sizeof(cli_addr);
-				accept_fd = accept(pfd[0].fd,
-					 (struct sockaddr *)&cli_addr, &clilen);
-				if (accept_fd < 0) {
-					if (errno == EAGAIN ||
-					    errno == EWOULDBLOCK)
-						continue;
-
-					lwsl_warn("ERROR on accept: %s\n",
-						  strerror(errno));
-					continue;
-				}
-				construct_state(pfds, FZY_S_ACCEPTED,
-						POLLIN | POLLERR);
-				state[pfds].outbound = n == 0;
-				state[pfds].pp = FZY_PP_CONNECT;
-				state[pfds].ppc = 0;
-				pfd[pfds++].fd = accept_fd;
-				lwsl_notice("new connect accepted\n");
-				continue;
-			}
-			if (pfd[n].revents & POLLIN) {
-				assert(ring_free(&s->in));
-				m = (ring_size(&s->in) - 1) -
-				    s->in.head;
-				if (s->in.head == ring_size(&s->in) - 1 &&
-				    s->in.tail)
-					m = 1;
-				m = read(pfd[n].fd, s->in.buf + s->in.head, m);
-//				lwsl_notice("read %d\n", m);
-				if (m <= 0) {
-					lwsl_err("Error on read\n");
-					goto drop;
-				}
-				s->in.head += m;
-				if (s->in.head == ring_size(&s->in))
-					s->in.head = 0;
-
-				switch (s->type) {
-				case FZY_S_ACCEPTED: /* parse proxy CONNECT */
-					if (handle_accept(n))
-						goto drop;
-					break;
-				case FZY_S_PROXIED:
-				case FZY_S_ONWARD:
-					if (ring_used(&s->in))
-						pfd[s->twin].events |= POLLOUT;
-					break;
-				default:
-					assert(0);
-					break;
-				}
-				if (s->in.head == s->in.tail) {
-					s->in.head = s->in.tail = 0;
-					pfd[n].events |= POLLIN;
-				}
-				if (!ring_free(&s->in))
-					pfd[n].events &= ~POLLIN;
-			}
-			if (pfd[n].revents & POLLOUT) {
-				switch (s->type) {
-				case FZY_S_PROXIED:
-				case FZY_S_ONWARD:
-					/*
-					 * draw down enough of the partner's
-					 * in ring to either exhaust it
-					 * or fill an output buffer
-					 */
-					m = fuzz(n, out, sizeof(out));
-					if (m < 0) {
-						lwsl_err("Error on fuzz\n");
-						goto drop;
-					}
-					lwsl_notice("got block %d\n", m);
-					if (m) {
-						m = write(pfd[n].fd, out, m);
-						if (m <= 0) {
-							lwsl_err("Error on write\n");
-							goto drop;
-						} else
-							pfd[s->twin].events &= ~POLLIN;
-					} else {
-						pfd[n].events &= ~POLLOUT;
-
-						if (ring_free(&state[s->twin].in))
-							pfd[s->twin].events |= POLLIN;
-					}
-
-					break;
-				default:
-					break;
-				}
-			}
-
-			continue;
-drop:
-			close_and_remove_fd(n);
-			n--; /* redo this slot */
-		}
-	}
-
-bail1:
-	lwsl_notice("%s exited cleanly\n", argv[0]);
-
-#ifndef _WIN32
-	closelog();
-#endif
-
-	return 0;
-}
diff --git a/test-apps/lws-common.js b/test-apps/lws-common.js
index f0c5b92..5d56ca2 100644
--- a/test-apps/lws-common.js
+++ b/test-apps/lws-common.js
@@ -13,26 +13,73 @@
  *
  */
 
-function lws_gray_out(vis, options) {
+function gsize(ptype)
+{
+	var h = document.compatMode === "CSS1Compat" &&
+		!window.opera ?
+			document.documentElement.clientHeight :
+						document.body.clientHeight;
+	var w = document.compatMode === "CSS1Compat" &&
+		!window.opera ? 
+			document.documentElement.clientWidth :
+						document.body.clientWidth;
+	var pageWidth, pageHeight, t;
 
-	var options = options || {};
+	if (document.body && 
+		    (document.body.scrollWidth || document.body.scrollHeight)) {
+		t = document.body.scrollWidth;
+		pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px");
+		t = document.body.scrollHeight;
+		pageHeight = (h > t) ? ("" + h + "px") : ("" + (t) + "px");
+	} else if (document.body.offsetWidth) {
+		t = document.body.offsetWidth;
+		pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px");
+		t = document.body.offsetHeight;
+		pageHeight =(h > t) ? ("" + h + "px") : ("" + (t) + "px");
+	} else {
+		pageWidth = "100%";
+		pageHeight = "100%";
+	}
+	return (ptype === 1) ? pageWidth : pageHeight;
+}
+
+function addEvent( obj, type, fn ) {
+	if ( obj.attachEvent ) {
+		obj["e" + type + fn] = fn;
+		obj[type+fn] = function() { obj["e" + type + fn]( window.event );};
+		obj.attachEvent("on" + type, obj[type + fn]);
+	} else
+		obj.addEventListener(type, fn, false);
+}
+
+function removeEvent( obj, type, fn ) {
+	if ( obj.detachEvent ) {
+		obj.detachEvent("on" + type, obj[type + fn]);
+		obj[type + fn] = null;
+	} else
+		obj.removeEventListener(type, fn, false);
+}
+
+function lws_gray_out(vis, _options) {
+
+	var options = _options || {};
 	var zindex = options.zindex || 50;
 	var opacity = options.opacity || 70;
 	var opaque = (opacity / 100);
-	var bgcolor = options.bgcolor || '#000000';
-	var dark = document.getElementById('darkenScreenObject');
+	var bgcolor = options.bgcolor || "#000000";
+	var dark = document.getElementById("darkenScreenObject");
 
 	if (!dark) {
 		var tbody = document.getElementsByTagName("body")[0];
-		var tnode = document.createElement('div');
-		tnode.style.position = 'absolute';
-		tnode.style.top = '0px';
-		tnode.style.left = '0px';
-		tnode.style.overflow = 'hidden';
-		tnode.style.display ='none';
-		tnode.id = 'darkenScreenObject';
+		var tnode = document.createElement("div");
+		tnode.style.position = "absolute";
+		tnode.style.top = "0px";
+		tnode.style.left = "0px";
+		tnode.style.overflow = "hidden";
+		tnode.style.display ="none";
+		tnode.id = "darkenScreenObject";
 		tbody.appendChild(tnode);
-		dark = document.getElementById('darkenScreenObject');
+		dark = document.getElementById("darkenScreenObject");
 	}
 	if (vis) {
 		dark.style.opacity = opaque;
@@ -42,7 +89,7 @@
 		dark.style.backgroundColor = bgcolor;
 		dark.style.width = gsize(1);
 		dark.style.height = gsize(0);
-		dark.style.display ='block';
+		dark.style.display = "block";
 		addEvent(window, "resize",
 			function() {
 				dark.style.height = gsize(0);
@@ -50,7 +97,7 @@
 			}
 		);
 	} else {
-		dark.style.display = 'none';
+		dark.style.display = "none";
 		removeEvent(window, "resize",
 			function() {
 				dark.style.height = gsize(0);
@@ -60,72 +107,9 @@
 	}
 }
 
-function gsize(ptype)
-{
-	var h = document.compatMode == 'CSS1Compat' &&
-		!window.opera ?
-			document.documentElement.clientHeight :
-						document.body.clientHeight;
-	var w = document.compatMode == 'CSS1Compat' &&
-		!window.opera ? 
-			document.documentElement.clientWidth :
-						document.body.clientWidth;
-	if (document.body && 
-		    (document.body.scrollWidth || document.body.scrollHeight)) {
-		var pageWidth = (w > (t = document.body.scrollWidth)) ?
-					("" + w + "px") : ("" + (t) + "px");
-		var pageHeight = (h > (t = document.body.scrollHeight)) ?
-					("" + h + "px") : ("" + (t) + "px");
-	} else if (document.body.offsetWidth) {
-		var pageWidth = (w > (t = document.body.offsetWidth)) ?
-					("" + w + "px") : ("" + (t) + "px");
-		var pageHeight =(h > (t = document.body.offsetHeight)) ?
-					("" + h + "px") : ("" + (t) + "px");
-	} else {
-		var pageWidth = '100%';
-		var pageHeight = '100%';
-	}
-	return (ptype == 1) ? pageWidth : pageHeight;
-}
-
-function addEvent( obj, type, fn ) {
-	if ( obj.attachEvent ) {
-		obj['e' + type + fn] = fn;
-		obj[type+fn] = function() { obj['e' + type+fn]( window.event );}
-		obj.attachEvent('on' + type, obj[type + fn]);
-	} else
-		obj.addEventListener(type, fn, false);
-}
-
-function removeEvent( obj, type, fn ) {
-	if ( obj.detachEvent ) {
-		obj.detachEvent('on' + type, obj[type + fn]);
-		obj[type + fn] = null;
-	} else
-		obj.removeEventListener(type, fn, false);
-}
-
 /*
  * end of grayOut related stuff
  */
- 
-/*
- * lws-meta helpers
- */
-
-var lws_meta_cmd = {
-	OPEN_SUBCHANNEL: 0x41,
-	/**< Client requests to open new subchannel
-	 */
-	OPEN_RESULT: 0x42,
-	/**< Result of client request to open new subchannel */
-	CLOSE_NOT: 0x43,
-	CLOSE_RQ: 0x44,
-	/**< client requests to close a subchannel */
-	WRITE: 0x45,
-	/**< connection writes something to specific channel index */
-	RX: 0x46,
-};
 
 function new_ws(urlpath, protocol)
 {
@@ -134,264 +118,10 @@
 
 	return new WebSocket(urlpath, protocol);
 }
-
-function lws_meta_ws() {
-	var real;
-	
-	var channel_id_to_child;
-	var pending_children;
-	var active_children;
-}
-
-function lws_meta_ws_child() {
-	var onopen;
-	var onmessage;
-	var onclose;
-	
-	var channel_id;
-	
-	var subprotocol;
-	var suburl;
-	var cookie;
-	
-	var extensions;
-	
-	var parent;
-}
-
-lws_meta_ws_child.prototype.send = function(data)
-{
-
-	if (typeof data == "string") {
-		data = String.fromCharCode(lws_meta_cmd.WRITE) +
-			String.fromCharCode(this.channel_id) +
-			data;
-		
-		return this.parent.real.send(data);
-	}
-	
-	{
-
-		var ab = new Uint8Array(data.length + 2);
-
-		ab[0] = lws_meta_cmd.WRITE;
-		ab[1] = this.channel_id;
-		ab.set(data, 2);
-	
-		return this.parent.real.send(ab);
-	}
-}
-
-lws_meta_ws_child.prototype.close = function(close_code, close_string)
-{
-	var pkt = new Uint8Array(129), m = 0, pkt1;
-	
-	pkt[m++] = lws_meta_cmd.CLOSE_RQ;
-	pkt[m++] = this.channel_id;
-	
-	pkt[m++] = close_string.length + 0x20;
-	
-	pkt[m++] = close_code / 256;
-	pkt[m++] = close_code % 256;
-	
-	for (i = 0; i < close_string.length; i++)
-		pkt[m++] = close_string.charCodeAt(i);
-	
-	pkt1 = new Uint8Array(m);
-	for (n = 0; n < m; n++)
-		pkt1[n] = pkt[n];
-		
-	this.parent.real.send(pkt1.buffer);
-}
-
-/* make a real ws connection using lws_meta*/
-lws_meta_ws.prototype.new_parent = function(urlpath)
-{
-	var n, i, m = 0, pkt1;
-	
-	this.ordinal = 1;
-	this.pending_children = [];
-	this.active_children = [];
-	this.real = new_ws(urlpath, "lws-meta");
-	
-	this.real.binaryType = 'arraybuffer';
-	this.real.myparent = this;
-
-	this.real.onopen = function() {
-		pkt = new Uint8Array(1024);
-			var n, i, m = 0, pkt1;
-		console.log("real open - pending children " + this.myparent.pending_children.length);
-		for (n = 0; n < this.myparent.pending_children.length; n++) {
-		
-			var p = this.myparent.pending_children[n];
-		
-			pkt[m++] = lws_meta_cmd.OPEN_SUBCHANNEL;
-			for (i = 0; i < p.subprotocol.length; i++)
-				pkt[m++] = p.subprotocol.charCodeAt(i);
-			pkt[m++] = 0;
-			for (i = 0; i < p.suburl.length; i++)
-				pkt[m++] = p.suburl.charCodeAt(i);
-			pkt[m++] = 0;
-			for (i = 0; i < p.cookie.length; i++)
-				pkt[m++] = p.cookie.charCodeAt(i);
-			pkt[m++] = 0;
-		}
-		
-		pkt1 = new Uint8Array(m);
-		for (n = 0; n < m; n++)
-			pkt1[n] = pkt[n];
-		
-		console.log(this.myparent.pending_children[0].subprotocol);
-		console.log(pkt1);
-		
-		this.send(pkt1.buffer);
-	}
-
-
-	this.real.onmessage = function(msg) {
-	
-		if (typeof msg.data != "string") {
-			var ba = new Uint8Array(msg.data), n = 0;
-			
-			while (n < ba.length) {
-
-				switch (ba[n++]) {
-				case lws_meta_cmd.OPEN_RESULT:
-				{
-					var m = 0, cookie = "", protocol = "", ch = 0;
-					var ws = this.myparent;
-					/* cookie NUL
-					 * channel index + 0x20
-					 * protocol NUL
-					 */
-					 while (ba[n])
-					 	cookie = cookie + String.fromCharCode(ba[n++]);
-					 n++;
-					 ch = ba[n++];
-					 
-					 while (ba[n])
-					 	protocol = protocol + String.fromCharCode(ba[n++]);
-					 	
-					console.log("open result " + cookie + " " + protocol + " " + ch + " pending len " + ws.pending_children.length);
-					
-					for (m = 0; m < ws.pending_children.length; m++) {
-						if (ws.pending_children[m].cookie == cookie) {
-							var newchild = ws.pending_children[m];
-			
-							/* found it */
-							ws.pending_children[m].channel_id = ch;
-							/* add to active children array */
-							ws.active_children.push(ws.pending_children[m]);
-							/* remove from pending children array */
-							ws.pending_children.splice(m, 1);
-							
-							newchild.parent = ws;
-							newchild.extensions = this.extensions;
-							
-							newchild.onopen();
-							
-							console.log("made active " + cookie);
-							break;
-						}
-					}
-					break;
-				}
-	
-				case lws_meta_cmd.CLOSE_NOT:
-				{
-					var code = 0, str = "", ch = 0, m, le;
-					var ba = new Uint8Array(msg.data);
-					/*
-					 * BYTE: channel
-					 * BYTE: MSB status code
-					 * BYTE: LSB status code
-					 * BYTES: rest of message is close status string
-					 */
-					 
-					 ch = ba[n++];
-					 le = ba[n++] - 0x20;
-					 code = ba[n++] * 256;
-					 code += ba[n++];
-					 
-					 while (le--)
-					 	str += String.fromCharCode(ba[n++]);
-					 	
-					console.log("channel id " + ch + " code " + code + " str " + str + " len " + str.length);
-					 	
-					for (m = 0; m < this.myparent.active_children.length; m++)
-						if (this.myparent.active_children[m].channel_id == ch) {
-							var child = this.myparent.active_children[m];
-							var ms = new CloseEvent("close", { code:code, reason:str } );
-							
-							/* reply with close ack */
-							this.send(msg.data);
-							
-							if (child.onclose)
-								child.onclose(ms);
-							
-							this.myparent.active_children.splice(m, 1);
-							break;
-						}
-
-				}
-				} // switch
-			}
-		} else {
-			if (msg.data.charCodeAt(0) == lws_meta_cmd.WRITE ) {
-				var ch = msg.data.charCodeAt(1), m, ms;
-				var ws = this.myparent, ms;
-								
-				for (m = 0; m < ws.active_children.length; m++) {
-					if (ws.active_children[m].channel_id == ch) {
-						ms = new MessageEvent("WebSocket", { data: msg.data.substr(2, msg.data.length - 2) } );
-						if (ws.active_children[m].onmessage)
-							ws.active_children[m].onmessage(ms);
-						break;
-					}
-				}
-			}
-		}
-	}
-	this.real.onclose = function() {
-		var ws = this.myparent, m;
-		for (m = 0; m < ws.active_children.length; m++) {
-			var child = ws.active_children[m];
-			var ms = new CloseEvent("close", { code:1000, reason:"parent closed" } );
-			
-			if (child.onclose)
-				child.onclose(ms);
-		}
-	}
-
-}
-
-
-
-/* make a child connection using existing lws_meta real ws connection */
-lws_meta_ws.prototype.new_ws = function(suburl, protocol)
-{
-	var ch = new lws_meta_ws_child();
-	
-	ch.suburl = suburl;
-	ch.subprotocol = protocol;
-	ch.cookie = "C" + this.ordinal++;
-	
-	this.pending_children.push(ch);
-	
-	if (this.real.readyState == 1)
-		this.real.onopen();
-	
-	return ch;
-}
-
-
-/*
- * end of lws-meta helpers
- */
  
 function lws_san(s)
 {
-	if (s.search("<") != -1)
+	if (s.search("<") !== -1)
 		return "invalid string";
 	
 	return s;
diff --git a/test-apps/test-client.c b/test-apps/test-client.c
index dbb8ead..675affa 100644
--- a/test-apps/test-client.c
+++ b/test-apps/test-client.c
@@ -83,12 +83,12 @@
 static uint8_t
 lws_poly_rand(struct lws_poly_gen *p)
 {
-	p->cyc[0] = p->cyc[0] & 1 ? (p->cyc[0] >> 1) ^ 0xb4bcd35c :
-				    p->cyc[0] >> 1;
-	p->cyc[0] = p->cyc[0] & 1 ? (p->cyc[0] >> 1) ^ 0xb4bcd35c :
-				    p->cyc[0] >> 1;
-	p->cyc[1] = p->cyc[1] & 1 ? (p->cyc[1] >> 1) ^ 0x7a5bc2e3 :
-				    p->cyc[1] >> 1;
+	p->cyc[0] = (p->cyc[0] & 1) ? (p->cyc[0] >> 1) ^ 0xb4bcd35c :
+				      p->cyc[0] >> 1;
+	p->cyc[0] = (p->cyc[0] & 1) ? (p->cyc[0] >> 1) ^ 0xb4bcd35c :
+				      p->cyc[0] >> 1;
+	p->cyc[1] = (p->cyc[1] & 1) ? (p->cyc[1] >> 1) ^ 0x7a5bc2e3 :
+				      p->cyc[1] >> 1;
 
 	return p->cyc[0] ^ p->cyc[1];
 }
diff --git a/test-apps/test-lejp.c b/test-apps/test-lejp.c
index c5fcdbc..ad5f8ee 100644
--- a/test-apps/test-lejp.c
+++ b/test-apps/test-lejp.c
@@ -52,11 +52,12 @@
 cb(struct lejp_ctx *ctx, char reason)
 {
 	char buf[1024], *p = buf, *end = &buf[sizeof(buf)];
-	int n;
 
 	if (reason & LEJP_FLAG_CB_IS_VALUE) {
 		p += lws_snprintf(p, p - end, "   value '%s' ", ctx->buf);
 		if (ctx->ipos) {
+			int n;
+
 			p += lws_snprintf(p, p - end, "(array indexes: ");
 			for (n = 0; n < ctx->ipos; n++)
 				p += lws_snprintf(p, p - end, "%d ", ctx->i[n]);
diff --git a/test-apps/test-sshd.c b/test-apps/test-sshd.c
index f673eb7..5eb9187 100644
--- a/test-apps/test-sshd.c
+++ b/test-apps/test-sshd.c
@@ -283,7 +283,7 @@
 ssh_ops_is_pubkey_authorized(const char *username, const char *type,
 				 const uint8_t *peer, int peer_len)
 {
-	char *aps = NULL, *p, *ps;
+	char *aps, *p, *ps;
 	int n = strlen(type), alen = 2048, ret = 2, len;
 	size_t s = 0;
 
@@ -458,7 +458,6 @@
 	struct sshd_instance_priv *priv = _priv;
 	struct lws_ring *r = priv->ring_stdout;
 	void *rp;
-	uint8_t buf[256], *p, *d;
 	size_t bytes;
 	int n, m;
 
@@ -481,6 +480,8 @@
 			break;
 		}
 		if (priv->pty_in_bloat_nl_to_crnl) {
+			uint8_t buf[256], *p, *d;
+
 			if (bytes != 1)
 				n = bytes / 2;
 			else
diff --git a/test-apps/test.js b/test-apps/test.js
index 9db5ee4..74bba69 100644
--- a/test-apps/test.js
+++ b/test-apps/test.js
@@ -1,23 +1,23 @@
 (function () {
 function check_file()
 {
-	var f = document.getElementById('file').files[0];
+	var f = document.getElementById("file").files[0];
 	var max_len = 100000;
 	var dis = 0;
 	
 	if (f) {
 		if (f.size >= max_len) {
 			dis = 1;
-			document.getElementById('file_info').innerHTML =
+			document.getElementById("file_info").innerHTML =
 				"<span style=\"color:red;font-weight:bold\">File larger than " +
 							max_len+"</span>";
 		} else
-			document.getElementById('file_info').innerHTML =
+			document.getElementById("file_info").innerHTML =
 				"File length "+f.size;
 	} else
 		dis = 1;
 	
-	document.getElementById('upload').disabled = dis;
+	document.getElementById("upload").disabled = dis;
 }
 
 /*
@@ -27,7 +27,7 @@
 
 function san(s)
 {
-	if (s.search("<") != -1)
+	if (s.search("<") !== -1)
 		return "invalid string";
 	
 	return s;
@@ -50,7 +50,7 @@
 			var dataProp = data[i].prop;
 			this.versionSearchString = data[i].versionSearch || data[i].identity;
 			if (dataString) {
-				if (dataString.indexOf(data[i].subString) != -1)
+				if (dataString.indexOf(data[i].subString) !== -1)
 					return data[i].identity;
 			}
 			else if (dataProp)
@@ -59,7 +59,7 @@
 	},
 	searchVersion: function (dataString) {
 		var index = dataString.indexOf(this.versionSearchString);
-		if (index == -1) return;
+		if (index === -1) return 0;
 		return parseFloat(dataString.substring(index +
 										this.versionSearchString.length + 1));
 	},
@@ -166,16 +166,16 @@
 	 * https:// url itself, otherwise unencrypted
 	 */
 
-	if (u.substring(0, 5) == "https") {
+	if (u.substring(0, 5) === "https") {
 		pcol = "wss://";
 		u = u.substr(8);
 	} else {
 		pcol = "ws://";
-		if (u.substring(0, 4) == "http")
+		if (u.substring(0, 4) === "http")
 			u = u.substr(7);
 	}
 
-	u = u.split('/');
+	u = u.split("/");
 
 	/* + "/xxx" bit is for IE10 workaround */
 
@@ -185,10 +185,10 @@
 var params = {};
 
 if (location.search) {
-    var parts = location.search.substring(1).split('&');
+    var parts = location.search.substring(1).split("&");
 
     for (var i = 0; i < parts.length; i++) {
-        var nv = parts[i].split('=');
+        var nv = parts[i].split("=");
         if (!nv[0]) continue;
         params[nv[0]] = nv[1] || true;
     }
@@ -213,20 +213,20 @@
 			document.getElementById("wsdi_status").innerHTML =
 				" <b>websocket connection opened</b><br>" +
 				san(socket_di.extensions);
-		} 
+		};
 
 		socket_di.onmessage =function got_packet(msg) {
 			document.getElementById("number").textContent = msg.data + "\n";
-		} 
+		};
 
 		socket_di.onclose = function(){
 			document.getElementById("wsdi_statustd").style.backgroundColor =
 																"#ff4040";
 			document.getElementById("wsdi_status").textContent =
 									" websocket connection CLOSED ";
-		}
+		};
 	} catch(exception) {
-		alert('<p>Error' + exception);  
+		alert("<p>Error" + exception);  
 	}
 }
 	
@@ -244,7 +244,7 @@
 			document.getElementById("s_status").innerHTML =
 				" <b>websocket connection opened</b><br>" +
 				san(socket_status.extensions);
-		} 
+		};
 
 		socket_status.onmessage =function got_packet(msg) {
 			var s;
@@ -253,7 +253,7 @@
 			
 			jso = JSON.parse(msg.data);
 			
-			if (jso.wss_over_h2 == "1")
+			if (jso.wss_over_h2 === "1")
 				document.getElementById("wstransport").innerHTML =
 										"<img src=\"./wss-over-h2.png\">";
 			
@@ -266,7 +266,7 @@
 			s="<table>";
 			var n;
 			for (n = 0; n < jso.conns.length; n++) {
-				var d = new Date(parseInt(jso.conns[n].time) * 1000);
+				var d = new Date(parseInt(jso.conns[n].time, 10) * 1000);
 				
 				s = s + "<tr><td class=l>client " + (n + 1) +
 				"</td><td><b>" + san(jso.conns[n].peer) +
@@ -277,16 +277,16 @@
 			s = s + "</table>";
 			
 			document.getElementById("conninfo").innerHTML = s;
-		} 
+		};
 
 		socket_status.onclose = function(){
 			document.getElementById("s_statustd").style.backgroundColor =
 																	"#ff4040";
 			document.getElementById("s_status").textContent =
 								" websocket connection CLOSED ";
-		}
+		};
 	} catch(exception) {
-		alert('<p>Error' + exception);  
+		alert("<p>Error" + exception);  
 	}
 }
 
@@ -296,14 +296,14 @@
 
 
 function junk() {
-	for(var word = ''; word.length < 9000; word += 'a'){}
+	for(var word = ""; word.length < 9000; word += "a"){}
 	socket_di.send(word);
 }
 
 function on_pmd() {
 	socket_status.send("{ \"RequestType\":\"DDoS\", \"blob\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAJbElEQVR4Xu2af4xUVxXHv+e9O0OhIEibgrRlF8rOG6CWKiumrUlTo6byj6mmNFta2DdQsRJJrP5j+0cnjSVp1BoSU1yzO28LEeL6h7GJNhpJNa2CBQ1gd9k3QPlRBU2LLV0W2p173zFvZvbtzOybmbd7J9DEd/+befece97nfe+95/4gxEWLAGlZx8aIAWqKIAYYA9QkoGkeKzAGqElA0zxWYAxQk4CmeazAGKAmAU3zWIExQE0CmuaxAmOAmgQ0zWMFxgA1CWiaxwqMAWoS0DRvrQJ3ujeb17Hrx6SuzLwV32x7VzO+1pj3HJprJue8BcBQCSONRzr+2RrHaO2OtHDc1wDcUwqOj0s7nWpVoDp+hOMeA5Au+zggbesuHX+Vti1VoOh3j4BxRxEf8xmVSbe3KlAdP2bOPUmEpaXviiGZsVbq+IsBxgCnpp9YgVPjNan2RwagmXMfUpnUAEAc9k6Rx8AHB0zzy3euU5nUXk02RXMzl+9Ssw8PYN06FeYvOkAmM5dfpzLWL6LGFXkSMR13jIAEmKXMpBM6AIXjeih+BVLqTEcSWfJ/T71ks4bZ9vAYgU1/epC2ZegAFLnhAogEM0tV5x1r/UcGKBw3UJ1sTyVwH8laZ5EU2DO4WCTFmXFbOTbnemxZdHnq9AAMvDVTjF4ObKVS7di8IvA97jOSArNsiLZ8oGBpW5HYRKrkB1IFcGwkiS2dhWkB7B1qE6Z5uiUAew7NEsk5o4EveEtgLw98TwngwIApRlcFoogBVnzdSArUAWg6+T4QS3U69Xi98eiqK7A4vnX1+YsldWbPJmSzk8fJa6FAP67FXTv9sVLZqU1k9rvHibGsmKQzBlTGeih0gqgcA69CFxaO+zKA+4uxEF6W3dbaSXFdA4Bmzt1DhK5SLHycTMd9n4A5pT9oSNqp0GXO1VagcFx/cphZhnZF2tasjwJAkRs+CqJPFvEBIzHA8a8ScQyMAdbbTGgJwAY7FS3LA3edXCyUbJoHitzwKIhK3Zb5ssykr5/Uha9BHigc9whQ3nHyu7DIDe8A0TY/OI/xtJexngnP5ocLRCRAkLLbas1KhOGps6lE2MxvOO6TBvBsMS7Pe8rbtHz7pLhavRLpdwtgCDCkzIS/o9Gff8pg/n55EtlRSqT7h+8B0xhs62AYvHJlf524QZ3duzs0pfCT7aj7gQNsmqPHH1V2qr9+ewBePHYXIICNHfsb1TNzw7Y6e343svdNWh35dpHyQL9iKUV5VGVSu+qt94tx7DrZCa8wA93pP0deiTR80fLDyACjOGthncgAp9FmqwG+CsbnynHkpW1Z04ip5Sai3x0CY3kpU+P9sjt9d6saaSlA9JybJWaMXARDyRFjLrZ1fNiqQLX8DAwmxai4CCAhzblzsWFhsH7W8lvM8eOiRSAGqIUvVqAmvhhgDFCbgKaDqY+B2ayBBV2fQJJnwzQlSL6HjcsvhMaRHUwG/2dXjjWMtXdwPjBjPryCARKXIcQ7sJd8EOn9fFuTbkCBCDOMUZw69596SXWVv4HB2bicXAClBARdwqm95+stEurFER1gz6GESM45DGBFmLNJW+C5E7cKUmfH68pkoh3rl046r8CL7s3CQ+hdFQY2KNvaXS94o8/\" }");
-	socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"283463389\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAGqAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArlviX43Pw78H3fipdHl1RreSGJLSKQRtK0kqxgBiDjlvSuprhvjNpmoav4INnpljPdznU9Ok8qCMu2xbuJmbA5wFBJPYA0AL4r+K2j+G/hxH8Rra0k1G3ureOezto3CPOXXcFBwcHbk9O1bmg+L9H12wW7juEimSygvrmAtlreOVCy7jjngN+VeOal4L8Vz3Wv8Ag99DvG0Hw5b317pEixMUupLpS0UUf94w5ZMD1FWdLfW/CFxqcF34S126l1vwxpttZfZdPllU3EUMitFIyqREcuOXIHXninYD0y8+KPgCwNkt34ntU/tCGO4tyA7BopPuOSBhQc8bsVYXxtpEc+tHULm2tbPRVheW5afIKyAkEjHy9OOTnNeEHQNX0bw/pTQaH4l0/W38NabbNCNFkvbS/kjgUeTMqrmF1bKncVx1rZ1Lwz4tuV1bVL3wpdSJDf8Ah+/urCGBmFzFAxaeOIf8tNv90ZzgDvRYD2fw34w8NeLoppvDurRXqwNslChlZD1GVYAj8q0rq9tLIRtd3CRCVxGhc4BY9Bn3rlfBl/Z61reqazp/g660q3kjhiW8u7SS0muyoOR5UiqwVc4DEc89q2fFQSTRprVtFk1VrjESWyjhmPQs38AHXdkYx60gNivPb74uwWXhPW/EX/CPzyXmjal/ZQ05Zh5k85ZFjCtjjcZFxxXXeGdO1LSdDtNP1bUPtt1CmJJvXngZ74HGcDOM4FeYXfhPXm+Nq28elXDeG7yaHXbi68s+SLmGORRGW6bi7RNjr8hoA6XU/i3p1pYeHr+w043a+INPk1NMziMQwIiNuY7T/fA/OtS8+J3gnSntLbWtftbO6u4IpxESzhA4BG5gMKPc4ryPSvBHipIvGdheaDei20HT7jRtB/ct/pMLzSSK0Yx8w8t4k47oaj8XaLqVglzJpmjeIbfV7rRLSAWw0WS/sdUdIiBFJsX9yQSVJZhgHPanYD1B/jD4PsfEWseHNdvo9Nm0q7itUeRiwn8yGOQN8q/IP3m3k9R1ra8ceLoPBfgzVfGTWpvYdMs3vPKSQL5qqucBsHGfXFebDwpq15YfE681LwvIuoaotuLdRbl/NK2EAKxHHzgSBxx3Bre+IukavqHwA1TRbPTbq41GXw75C2scTNM0vkAbAgGS2eMYzmgDt9c1xNF0CfXXiRlhjWQo8mwckDlsHHX0rMf4leCYNUg0O78QW0OoT+WogO4gO+Nql8bQTkYBIrjfFvjJfFvgjUfDeleE/Fq3s1qgQXHh68gQlXTI3PGBnr3rjdc0rWtM1K8Ph3QdeXVbq6tJW0250iS50/UGUIPN89V2wEYOSzfKVziiwHsPhL4k+GfGer6zoujXLvcaLcfZ5gyMA3yg7gSOmTj8K6qvPfh9aT6V418b2d3ot5bG81NL22uDZusE0Jt4l+WXGwkMrZUHI9K9CpAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVma34m8OeGvsf/CQ67YaZ/aNyllafa7hIvtFw/3Yk3EbnPZRyaANOiisbQfGfhHxTc39l4a8T6XqtxpUohvorO7jme1kOcLIFJKHg8HHQ0AbNFZ2u+ItA8MWa6j4j1qx0u1eVIFmvLhYUMjnCoGYgbieg6mi08R+H7/VrnQbLW7G41KzjSa4s47hWmhjb7rOgOVB7EjmgDRoorO1/wAQ6D4V0uXXPE2tWOladAVEt3ezrDChZgq5diAMkgDnqRQBo0UgORkUtABRVbUtT07RrCfVNWvreys7VDJPcTyCOONB1ZmPAHuaNO1LT9XsYNT0q9gvLO5QSQzwSB45EPRlYcEe4oAs0VT1fWNJ8P6Zcazrup2un2FonmT3V1KsUUS+rMxAA9zU9tc297bRXlnPHPBOiyxSxsGV0YZDAjggggg0AS0UUmRnGeaAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqrqGpWumQ+dcsQCcKBySaaTk7ITairstUVz3/AAmdh/z63H/jv+NH/CZ2H/Prcf8Ajv8AjW31ar/KZfWKfc6Giue/4TOw/wCfW4/8d/xo/wCEzsP+fW4/8d/xo+rVf5Q+sU+50NFc9/wmdh/z63H/AI7/AI0f8JnYf8+tx/47/jR9Wq/yh9Yp9zoaK57/AITOw/59bj/x3/GtDTNcstVLJBuWRRkow5xUyoVIK8kVGtCTsmaNFFFZGgUUUUAFFFFABXin7YfhS78TfAbxBeaUCup+HVj16ykUZaOS1cSkr7lVYfjXtdVtRsLXVLC50y+hWW3u4nhljboyMMEH8DQBxNz8UNOb4IH4tQyrHaz6AurREH7peEMg/wC+mAr52/Zu8OXnwh+KfhZtT3xn4seHLi9u1JO3+0Y5DcA/UxMwA9qxNG1PUX+COl/s0vcNJrFt46m8ITg9Xs7aYzE/TyvK9sGvaf2ptPTwl4J8LfEvS4WB+HGuWGolYx8xsg4imT6eU7E/SgBn7Qif8Jp8Ufhb8KU/eQTanJ4h1KP0gtgBG3/fbH8q6zw7rXw8j+M/jO3stIltPENlpdrNq2oSSnypbfLbAATgbcEk4rmPh40fj39pfx146jdZ7DwtYWnhrT5lOV8woJ7gA/70gH4Vm6DDpFx+0b8XLfX7mO30yXwzZpeTSSCNY4T5gdix4UAZ57UAbEH7S2r67YyeJfAvwY8TeIfDCFzHq0UkcX2iNTgyRRN8zrwcHIzXK/tQ+P8Aw78Sf2QNf8X+Grh3sriWzVllXZJDIt5EHjcdmB6irvg3wv8AtE/BnwxZ6B4BPhj4ieEbGEDSkkujZXv2Xqi7yDG+FxghuRiuE+Mvivwf4x/Y78djw34Tl8MXVtq8EOs6TKuJLe+a7hMhPJB3cEEcGgD2LU/2htUjt5tY8J/CHxL4j8O2u7fq9u0cccqL96SFG+aROCQeMjpXo/gHx34f+JPhSx8Y+GLhpbC/Qsu9drowOGRh2YHgitXTNNsdM0q10mxtkitLaBIIoVGFWNVwFA9McV4l+xt8vw28QQrwkPjDV0Reyr5q8D86AO2/aF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBqP8AaF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBoAn+Nt74T074UeJb7xzpcupaDDZFr+0ico8se5flBBBHOO9Y3iH4w+Gfh/4c8Jabo3h/UtV1HxDZxLoWh2QDTyRLCG5ZjhVVcZY1D+1X/wAm8eOv+wWf/Q1rktd+Hep+Lrb4aeLPh5440vRvHnhbQIns7W+Hmw3NrNbxrKskaneFPHzAH9aAOn8P/H+ZvF2neC/iJ8OtY8GX2tFk0uW6lSe3unUZKCRcbWx2IryTxZ8WPF1p+1VodxD8JvFM/wBj0TULaOxjeLddruT9+g3Y2jHfnmuq174jeNPDus+HbL9o/wCEumHSm1SKHT/EWk3v2m3t71uI2eMhZI89Bwa1vEP/ACeL4Q/7FbUv/Qo6APcrOeS6tIbmW3e3eWNXaKT70ZIztOO46VNRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXKeNSfNtRnjax/UV1dcp41/wBda/7rfzFdOD/jI58V/CZzVeear8Q9V0r4tWHg6e3g/sa8tlDT4PmR3D58vJ6YYgL9WFeh15/4t+HOo+IdY1fVrW/t4JLnTYobB23boLuKQSRyHA+6GVTxzxX0eF9lzNVdrf0/keFiPacqdPe5Qb4sXMPxG1fRbiGIeH9Js2Zp1UmWSdCBJjnGFZtv1U11Ws/ELw1oKeZqc8sajS5NX3bMj7OhQHv97Mi8Vx8fwf1MWcEMmq2rTto89reTYbMt7LIZXlAx90uSfXmn/wDCAePdSujfaxceHo3h8PzaNDAvmTxu7PEdz7lX5SI8EDkZ4zXVKGFk009Fo/Pz+ZzxniIp3Wr/AK/A2n+JNneQwG3t77S5jfQWzx39n8zrIpK7drYwcdcnGOlWrP4m+H77V49LtrXUmimuTaRX/wBm/wBFeYdUD5znIxnGM965DTvhN4lW4M00+n6fafbbW5XT4Lya4iTyg+91aRQQW3gbeny1veGPCXjXw+bTQFvdK/sKyvJLlZlLm6ljZy4jKFdo+ZuWDHipqU8Mk+V/j/V/QcJ4htcyO/rV8LkjWoAD1D5/75NZVavhf/kNwfR//QTXk1v4cvRnp0f4kfU7uiiivBPZCiiigAooooAKKKKAPEbP9mu3tf2kLv47HX1ayngLx6P5JxFetFHG9wGzjJEYzxnnrXqHjzwlZePfBWueC9RIW31uwnsJGIztEiFdw9xnNb1FAHl/7O/wZl+B/wAPh4Tv9eGt6ncXk99f6j5Rj+0SyOSCQSTwu1eT2p0HwVtp/iH428Wa3qEV7pfjPSItIn0/yirLGoYPl88hgxHAFenUUAeC+G/hh+0R8OdFh8D+CPiV4fvvD9kgttNm1nS3lvLK3UYSPcjqsm0YA3L0Apus/suyan8E/EXw0HjBpNc8VX8Wp6prdzb7vNuFmRziNSMLhNoGeM175RQAijaoX0GK8/8Agp8L7j4TeG9T0G51iPUm1DW73VhIkJjCLOwITBJyRjr3r0GigDm/iP4Tl8d+BNc8HQ3q2b6vZvarOybxGW7lQRn868h8L/CT9qDwj4e0/wAM6R8dPC62WmQLbwB/C+5gijjJMnNfQVFAHhmsfCL46eNfBviXwX8QPi1oWo2euaebSE2ugfZzBIWB3kh8sMDGOK0PGHwM128bwh4o8B+MF0Pxh4Q09NNivHtvNtr238tUkimiJ5VtoI5yp6GvY6KAPDL/AOEXxa+Juo6Snxj8ZaIdB0i9i1AaVolg8Qu54jmNpZJHZtoPO1cVr/FL4ReMvEPxB8PfFD4c+MLLRNa0O1uLGSO+sftMFzBNjIIDKQRtGCDXrlFAENmt0lpCl9KklwsaiV0XarPjkgdhntU1FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZ+r6RDq0IR2KOnKOO1aFFVGTg+aO4pRUlZnKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFb/XK3cw+q0uxyn/AAhU3/QQT/v2f8aP+EKm/wCggn/fs/411dFH1yt3D6rS7HKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFH1yt3D6rS7HKf8ACFTf9BBP+/Z/xrT0bw7FpUhuHl82XGAcYArYoqZ4mrNcrZUcPTg7pBRRRWBsFFFFABRRRQAVFcPcRqDbwLK2eQX24H5GpaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNOSfUWdRJp8aqSMsJ84HrjFW6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACioZry0t/8AX3Mcf+8wFUZvEekxcfaN5/2VJosBqUVz03jC3GRBau3+8QKozeLb9/8AVRRxj86fKwOvorg5tc1Sb7124HoOKjtdUvba4WcXDtgjILZBFPlA9AoooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACori5gtYzLcSqijualrkPFsztfpAWO1EBA9zTSuBqzeK9NjyIxJIfYYFUpvGMh/497NR/vtn+Vc3RV8qA1pvE+rS/dlWMf7Kj+tUZtRv7j/XXcrD0LnFV6KdkAUUUUAFFFFABQOtFA60AelDpS0g6UtZAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcb4r/5Cv/bJf612Vcb4r/5Cv/bJf61UdwMaiiirAKKKVVZztVSSewFACUVch0fU5/8AV2UuD3K4H61eh8KanJ/rDFF/vNn+VF0Bi0V08Pg5BzPeE+yrV2HwxpUX3o3kP+01LmQHF0DrXb3ui6b9ilCWqIVQkEdQRXEDrQncD0odKWkHSlrMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjfFf8AyFf+2S/1rsq43xX/AMhX/tkv9aqO4FfSNGl1UuVkEaJwWIzzW7D4RsU5lmlkPpnApvg//jzn/wCuv9BW/Q27gZ8Og6TD92zRv9/5v51djhihG2KJUHooxT6KkAooooAKKKKAIbz/AI9Jv+ubfyrzoda9FvP+PSb/AK5t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv8A5Cv/AGyX+tdlXG+K/wDkK/8AbJf61UdwNPwf/wAec3/XX+grfrA8H/8AHnN/11/oK36T3AKKKKQBRRRQAUUUUAQ3n/HpN/1zb+VedDrXot5/x6Tf9c2/lXnQ61cQPSh0paQdKWoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK43xX/yFf+2S/wBa7KuN8V/8hX/tkv8AWqjuBp+D/wDjzm/66/0Fb9YHg/8A485v+uv9BW/Se4BRRRSAKKKKACiiigCG8/49Jv8Arm38q86HWvRbz/j0m/65t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv/AJCv/bJf612Vcb4r/wCQr/2yX+tVHcDT8H/8ec3/AF1/oK36wPB//HnN/wBdf6Ct+k9wCiiikAUUVDc3dtZp5lzMsY7ZPX6UATUViy+K9MQ4QSye4XH86j/4S+w/59p/yH+NOzA2Lw4tJs/882/lXnQ610GqeKBdW7W9pCyBxhmbGce1c+OtXFWA9KHSlpB0pazAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiioLy9t7GEz3MgVR09SfQUAT0Vy9z4vkJItLYAdi55/Kqh8Vaqe8Q+iVXKwOzri/FDq+qttOdqKp+vNNfxNqrqV81Fz3C81mO7yOXdizMcknvTirAdV4P/AOPOb/rr/QVv1geD/wDjzm/66/0Fb9S9wCiiikBXv7tLG1kuX/gHA9TXBXd3PeztPO5Zj09h6Cuq8WFhpqgdDIM/rXH1cUAUUUVQBQOtFS2sTT3MUKjJdwv5mgD0UdKWkpayAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuH8QX73l+67j5cR2qP5mu4rzzUI2ivZ43HIc/zqo7gV6KKKsAooooA6zweP8AQpj/ANNf6Ct+snwzbNb6WjMMGUl/w7fpWtWb3AKKKKQFXU7IX9lJbHgsMqfQ1wU8EttK0MyFWU4INej1UvtLstQXFzECezDgiqTsB5/RXUyeDoScxXjKPQrmmr4OT+K+P4J/9eq5kBzFdH4Y0h/MGo3CFQv+rB7n1rSs/DWnWrB2VpWHQv0/KtUAAYAwBUuXYBaKKKkAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK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RGJ2jIDLzkMM9wQCPpXM6V8IfDuk614c1uC7vGm8N2ktrAjsu2YuCDJIMcuNzYIx9413VFAHBn4VfY2a48PeMNY0m6a+vr1pYhFIr/apmldGjkRkIDMdpIyB3qfwl8K9E8IajZ6rY3t3LPa2dzaMZSuJTPKkjyMABhtyDgYGCeK7WigDC8N+EbHwzoM3h+0uZ5YZp7qcvJjcDPK8jDgAYBcgewFc6vwc0NbW1tU1fVI/sel3WlRSRSiOQJPKspkDKAQ6soxjj1Brv6KAPPf+FQwX76jdeJvFWp6xe39gNNW5ljgiaGAMWG0RIqk7jnLA10Wg+F73RZ7SWfxVqmoJa2IsvJn8tY5CGBEpVFA3gDbxgYzxmugooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z\"}")
-	socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"788346414\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAxst6mky3940UmRQA7J9TRk+ppKKAAFh/EaCWP8RoooAXJ9TRk+ppKKADL/AN40Zf8AvGkwKMCgA3N/eNG5v7xoI70Ad6AF3Mf4iPxpMsP4j+dHSlxmgBCWH8R/OlBb+8fzpCM96OgoAVWb+8fzoLN6n86OBTSc0AOy3940Zb+8aTg0YFACkv8A3jRlv7xpNvvSYx3oAXLn+I0Ev/eNAwOc0YBNABubHU/nSbm/vH86VaMc5oATc394/nTt3+0aTb70baAAl8/eP50uW/vGk20baADc3940B27k0babQA/Lf3jRlv7xpMAdTRgH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iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=\"}")
+	socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"283463389\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACioZry0t/8AX3Mcf+8wFUZvEekxcfaN5/2VJosBqUVz03jC3GRBau3+8QKozeLb9/8AVRRxj86fKwOvorg5tc1Sb7124HoOKjtdUvba4WcXDtgjILZBFPlA9AoooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACori5gtYzLcSqijualrkPFsztfpAWO1EBA9zTSuBqzeK9NjyIxJIfYYFUpvGMh/497NR/vtn+Vc3RV8qA1pvE+rS/dlWMf7Kj+tUZtRv7j/XXcrD0LnFV6KdkAUUUUAFFFFABQOtFA60AelDpS0g6UtZAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcb4r/5Cv/bJf612Vcb4r/5Cv/bJf61UdwMaiiirAKKKVVZztVSSewFACUVch0fU5/8AV2UuD3K4H61eh8KanJ/rDFF/vNn+VF0Bi0V08Pg5BzPeE+yrV2HwxpUX3o3kP+01LmQHF0DrXb3ui6b9ilCWqIVQkEdQRXEDrQncD0odKWkHSlrMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjfFf8AyFf+2S/1rsq43xX/AMhX/tkv9aqO4FfSNGl1UuVkEaJwWIzzW7D4RsU5lmlkPpnApvg//jzn/wCuv9BW/Q27gZ8Og6TD92zRv9/5v51djhihG2KJUHooxT6KkAooooAKKKKAIbz/AI9Jv+ubfyrzoda9FvP+PSb/AK5t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv8A5Cv/AGyX+tdlXG+K/wDkK/8AbJf61UdwNPwf/wAec3/XX+grfrA8H/8AHnN/11/oK36T3AKKKKQBRRRQAUUUUAQ3n/HpN/1zb+VedDrXot5/x6Tf9c2/lXnQ61cQPSh0paQdKWoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK43xX/yFf+2S/wBa7KuN8V/8hX/tkv8AWqjuBp+D/wDjzm/66/0Fb9YHg/8A485v+uv9BW/Se4BRRRSAKKKKACiiigCG8/49Jv8Arm38q86HWvRbz/j0m/65t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv/AJCv/bJf612Vcb4r/wCQr/2yX+tVHcDT8H/8ec3/AF1/oK36wPB//HnN/wBdf6Ct+k9wCiiikAUUVDc3dtZp5lzMsY7ZPX6UATUViy+K9MQ4QSye4XH86j/4S+w/59p/yH+NOzA2Lw4tJs/882/lXnQ610GqeKBdW7W9pCyBxhmbGce1c+OtXFWA9KHSlpB0pazAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiioLy9t7GEz3MgVR09SfQUAT0Vy9z4vkJItLYAdi55/Kqh8Vaqe8Q+iVXKwOzri/FDq+qttOdqKp+vNNfxNqrqV81Fz3C81mO7yOXdizMcknvTirAdV4P/AOPOb/rr/QVv1geD/wDjzm/66/0Fb9S9wCiiikBXv7tLG1kuX/gHA9TXBXd3PeztPO5Zj09h6Cuq8WFhpqgdDIM/rXH1cUAUUUVQBQOtFS2sTT3MUKjJdwv5mgD0UdKWkpayAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuH8QX73l+67j5cR2qP5mu4rzzUI2ivZ43HIc/zqo7gV6KKKsAooooA6zweP8AQpj/ANNf6Ct+snwzbNb6WjMMGUl/w7fpWtWb3AKKKKQFXU7IX9lJbHgsMqfQ1wU8EttK0MyFWU4INej1UvtLstQXFzECezDgiqTsB5/RXUyeDoScxXjKPQrmmr4OT+K+P4J/9eq5kBzFdH4Y0h/MGo3CFQv+rB7n1rSs/DWnWrB2VpWHQv0/KtUAAYAwBUuXYBaKKKkAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK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RGJ2jIDLzkMM9wQCPpXM6V8IfDuk614c1uC7vGm8N2ktrAjsu2YuCDJIMcuNzYIx9413VFAHBn4VfY2a48PeMNY0m6a+vr1pYhFIr/apmldGjkRkIDMdpIyB3qfwl8K9E8IajZ6rY3t3LPa2dzaMZSuJTPKkjyMABhtyDgYGCeK7WigDC8N+EbHwzoM3h+0uZ5YZp7qcvJjcDPK8jDgAYBcgewFc6vwc0NbW1tU1fVI/sel3WlRSRSiOQJPKspkDKAQ6soxjj1Brv6KAPPf+FQwX76jdeJvFWp6xe39gNNW5ljgiaGAMWG0RIqk7jnLA10Wg+F73RZ7SWfxVqmoJa2IsvJn8tY5CGBEpVFA3gDbxgYzxmugooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z\"}");
+	socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"788346414\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAxst6mky3940UmRQA7J9TRk+ppKKAAFh/EaCWP8RoooAXJ9TRk+ppKKADL/AN40Zf8AvGkwKMCgA3N/eNG5v7xoI70Ad6AF3Mf4iPxpMsP4j+dHSlxmgBCWH8R/OlBb+8fzpCM96OgoAVWb+8fzoLN6n86OBTSc0AOy3940Zb+8aTg0YFACkv8A3jRlv7xpNvvSYx3oAXLn+I0Ev/eNAwOc0YBNABubHU/nSbm/vH86VaMc5oATc394/nTt3+0aTb70baAAl8/eP50uW/vGk20baADc3940B27k0babQA/Lf3jRlv7xpMAdTRgH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iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=\"}");
 }
 
 var socket_ot;
@@ -324,7 +324,7 @@
 			document.getElementById("ot_close_btn").disabled = false;
 			document.getElementById("ot_req_close_btn").disabled = false;
 			console.log("ot_open.onopen");
-		} 
+		};
 
 		socket_ot.onclose = function(e){
 			document.getElementById("ot_statustd").style.backgroundColor =
@@ -335,9 +335,9 @@
 			document.getElementById("ot_open_btn").disabled = false;
 			document.getElementById("ot_close_btn").disabled = true;
 			document.getElementById("ot_req_close_btn").disabled = true;
-		}
+		};
 	} catch(exception) {
-		alert('<p>Error' + exception);  
+		alert("<p>Error" + exception);  
 	}
 }
 
@@ -351,104 +351,23 @@
 	socket_ot.send("closeme\n");
 }
 
+var socket_lm;
+var pending = "";
+
+function lm_timer_handler(ev) {
+	socket_lm.send(pending);
+	pending="";
+}
+
 /* lws-mirror protocol */
 
 var down = 0;
 var no_last = 1;
 var last_x = 0, last_y = 0;
 var ctx;
-var socket_lm;
 var color = "#000000";
-var pending = "";
 var lm_timer;
 
-function ws_open_mirror()
-{	
-	socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name),
-			"lws-mirror-protocol");
-	try {
-		socket_lm.onopen = function() {
-			document.getElementById("wslm_statustd").style.backgroundColor =
-																	"#40ff40";
-			document.getElementById("wslm_status").innerHTML =
-								" <b>websocket connection opened</b><br>" +
-								san(socket_lm.extensions);
-			lws_gray_out(false);
-		} 
-
-		socket_lm.onmessage =function got_packet(msg) {
-			j = msg.data.split(';');
-			f = 0;
-			while (f < j.length - 1) {
-				i = j[f].split(' ');
-				if (i[0] == 'd') {
-					ctx.strokeStyle = i[1];
-					ctx.beginPath();
-					ctx.moveTo(+(i[2]), +(i[3]));
-					ctx.lineTo(+(i[4]), +(i[5]));
-					ctx.stroke();
-				}
-				if (i[0] == 'c') {
-					ctx.strokeStyle = i[1];
-					ctx.beginPath();
-					ctx.arc(+(i[2]), +(i[3]), +(i[4]), 0, Math.PI*2, true); 
-					ctx.stroke();
-				}
-
-				f++;
-			}
-		}
-
-		socket_lm.onclose = function(){
-			document.getElementById("wslm_statustd").style.backgroundColor =
-																	"#ff4040";
-			document.getElementById("wslm_status").textContent =
-											" websocket connection CLOSED ";
-			lws_gray_out(true,{'zindex':'499'});
-		}
-	} catch(exception) {
-		alert('<p>Error' + exception);  
-	}
-
-	var canvas = document.createElement('canvas');
-	canvas.height = 300;
-	canvas.width = 480;
-	ctx = canvas.getContext("2d");
-
-	document.getElementById('wslm_drawing').appendChild(canvas);
-
-	canvas.addEventListener('mousemove', ev_mousemove, false);
-	canvas.addEventListener('mousedown', ev_mousedown, false);
-	canvas.addEventListener('mouseup', ev_mouseup, false);
-
-	offsetX = offsetY = 0;
-	element = canvas;
-      if (element.offsetParent) {
-        do {
-          offsetX += element.offsetLeft;
-          offsetY += element.offsetTop;
-        } while ((element = element.offsetParent));
-      }
-}
-
-function update_color() {
-	color = document.getElementById("color").value;
-}
-
-function ev_mousedown (ev) {
-	down = 1;
-}
-
-function ev_mouseup(ev) {
-	down = 0;
-	no_last = 1;
-}
-
-function lm_timer_handler(ev) {
-	socket_lm.send(pending);
-	pending="";
-}
-
 function ev_mousemove (ev) {
 	var x, y;
 
@@ -470,7 +389,7 @@
 		return;
 	}
 	pending = pending + "d " + color + " " + last_x + " " + last_y +
-			" " + x + ' ' + y + ';';
+			" " + x + " " + y + ";";
 			
 	if (pending.length > 400) {
 		socket_lm.send(pending);
@@ -483,20 +402,104 @@
 	last_y = y;
 }
 
+function ev_mousedown (ev) {
+	down = 1;
+}
+
+function ev_mouseup(ev) {
+	down = 0;
+	no_last = 1;
+}
+
+
+function ws_open_mirror()
+{	
+	socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name),
+			"lws-mirror-protocol");
+	try {
+		socket_lm.onopen = function() {
+			document.getElementById("wslm_statustd").style.backgroundColor =
+																	"#40ff40";
+			document.getElementById("wslm_status").innerHTML =
+								" <b>websocket connection opened</b><br>" +
+								san(socket_lm.extensions);
+			lws_gray_out(false);
+		};
+
+		socket_lm.onmessage =function got_packet(msg) {
+			j = msg.data.split(";");
+			var f = 0;
+			while (f < j.length - 1) {
+				i = j[f].split(" ");
+				if (i[0] === "d") {
+					ctx.strokeStyle = i[1];
+					ctx.beginPath();
+					ctx.moveTo(+(i[2]), +(i[3]));
+					ctx.lineTo(+(i[4]), +(i[5]));
+					ctx.stroke();
+				}
+				if (i[0] === "c") {
+					ctx.strokeStyle = i[1];
+					ctx.beginPath();
+					ctx.arc(+(i[2]), +(i[3]), +(i[4]), 0, Math.PI*2, true); 
+					ctx.stroke();
+				}
+
+				f++;
+			}
+		};
+
+		socket_lm.onclose = function(){
+			document.getElementById("wslm_statustd").style.backgroundColor =
+																	"#ff4040";
+			document.getElementById("wslm_status").textContent =
+											" websocket connection CLOSED ";
+			lws_gray_out(true,{"zindex":"499"});
+		};
+	} catch(exception) {
+		alert("<p>Error" + exception);  
+	}
+
+	var canvas = document.createElement("canvas");
+	canvas.height = 300;
+	canvas.width = 480;
+	ctx = canvas.getContext("2d");
+
+	document.getElementById("wslm_drawing").appendChild(canvas);
+
+	canvas.addEventListener("mousemove", ev_mousemove, false);
+	canvas.addEventListener("mousedown", ev_mousedown, false);
+	canvas.addEventListener("mouseup", ev_mouseup, false);
+
+	offsetX = offsetY = 0;
+	element = canvas;
+      if (element.offsetParent) {
+        do {
+          offsetX += element.offsetLeft;
+          offsetY += element.offsetTop;
+          element = element.offsetParent;
+        } while (element);
+      }
+}
+
+function update_color() {
+	color = document.getElementById("color").value;
+}
+
 /* stuff that has to be delayed until all the page assets are loaded */
 
 window.addEventListener("load", function() {
 	
-	lws_gray_out(true,{'zindex':'499'});
+	lws_gray_out(true,{"zindex":"499"});
 
-	document.getElementById('file').onchange = check_file;
-	document.getElementById('offset').onclick = reset;
-	document.getElementById('junk').onclick = junk;
-	document.getElementById('color').onclick = update_color;
-	document.getElementById('ot_open_btn').onclick = ot_open;
-	document.getElementById('ot_close_btn').onclick = ot_close;
-	document.getElementById('ot_req_close_btn').onclick = ot_req_close;
-	document.getElementById('pmd').onclick = on_pmd;
+	document.getElementById("file").onchange = check_file;
+	document.getElementById("offset").onclick = reset;
+	document.getElementById("junk").onclick = junk;
+	document.getElementById("color").onclick = update_color;
+	document.getElementById("ot_open_btn").onclick = ot_open;
+	document.getElementById("ot_close_btn").onclick = ot_close;
+	document.getElementById("ot_req_close_btn").onclick = ot_req_close;
+	document.getElementById("pmd").onclick = on_pmd;
 
 	var transport_protocol = "";
 
@@ -516,7 +519,7 @@
 	   
 	   console.log("transport protocol " + transport_protocol);
 	   
-	   if (transport_protocol == "h2")
+	   if (transport_protocol === "h2")
 		   document.getElementById("transport").innerHTML =
 			   								"<img src=\"./http2.png\">";
 
@@ -537,4 +540,4 @@
 
 }, false);
 
-})();
+}());