diff --git a/examples/device-dashboard/packed_fs.c b/examples/device-dashboard/packed_fs.c index 8e96b6fc..acf6fd2a 100644 --- a/examples/device-dashboard/packed_fs.c +++ b/examples/device-dashboard/packed_fs.c @@ -3,40 +3,6 @@ #include static const unsigned char v1[] = { - 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, // .. < - 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 116, // head>. Device - 68, 97, 115, 104, 98, 111, 97, 114, 100, 60, 47, 116, // Dashboard. . - 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, 116, // . - 32, 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, // . . - 10, 32, 32, 60, 98, 111, 100, 121, 62, 60, 47, 98, // . . . - 10, 0 // . -}; -static const unsigned char v2[] = { 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 67, 111, // ;.import {Co 109, 112, 111, 110, 101, 110, 116, 44, 32, 104, 44, 32, // mponent, h, @@ -1207,7 +1173,7 @@ static const unsigned char v2[] = { 65, 112, 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, // App), docume 110, 116, 46, 98, 111, 100, 121, 41, 59, 10, 0 // nt.body);. }; -static const unsigned char v3[] = { +static const unsigned char v2[] = { 118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t, 111, 44, 114, 44, 117, 44, 108, 61, 123, 125, 44, 105, // o,r,u,l={},i 61, 91, 93, 44, 99, 61, 47, 97, 99, 105, 116, 124, // =[],c=/acit| @@ -2309,162 +2275,1178 @@ static const unsigned char v3[] = { 115, 101, 69, 114, 114, 111, 114, 66, 111, 117, 110, 100, // seErrorBound 97, 114, 121, 125, 59, 10, 0 // ary};. }; -static const unsigned char v4[] = { - 42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi - 110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b - 111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html, - 98, 111, 100, 121, 32, 123, 32, 109, 97, 114, 103, 105, // body { margi - 110, 58, 32, 48, 59, 32, 112, 97, 100, 100, 105, 110, // n: 0; paddin - 103, 58, 32, 48, 59, 32, 104, 101, 105, 103, 104, 116, // g: 0; height - 58, 32, 49, 48, 48, 37, 59, 32, 102, 111, 110, 116, // : 100%; font - 58, 32, 49, 54, 112, 120, 32, 115, 97, 110, 115, 45, // : 16px sans- - 115, 101, 114, 105, 102, 59, 32, 125, 10, 115, 101, 108, // serif; }.sel - 101, 99, 116, 44, 32, 105, 110, 112, 117, 116, 44, 32, // ect, input, - 108, 97, 98, 101, 108, 58, 58, 98, 101, 102, 111, 114, // label::befor - 101, 44, 32, 116, 101, 120, 116, 97, 114, 101, 97, 32, // e, textarea - 123, 32, 111, 117, 116, 108, 105, 110, 101, 58, 32, 110, // { outline: n - 111, 110, 101, 59, 32, 98, 111, 120, 45, 115, 104, 97, // one; box-sha - 100, 111, 119, 58, 110, 111, 110, 101, 32, 33, 105, 109, // dow:none !im - 112, 111, 114, 116, 97, 110, 116, 59, 32, 98, 111, 114, // portant; bor - 100, 101, 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, // der: 1px sol - 105, 100, 32, 35, 99, 99, 99, 32, 33, 105, 109, 112, // id #ccc !imp - 111, 114, 116, 97, 110, 116, 59, 32, 125, 10, 99, 111, // ortant; }.co - 100, 101, 44, 32, 112, 114, 101, 32, 123, 32, 99, 111, // de, pre { co - 108, 111, 114, 58, 32, 35, 51, 55, 51, 59, 32, 102, // lor: #373; f - 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 32, // ont-family: - 109, 111, 110, 111, 115, 112, 97, 99, 101, 59, 32, 102, // monospace; f - 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, // ont-weight: - 98, 111, 108, 100, 101, 114, 59, 32, 102, 111, 110, 116, // bolder; font - 45, 115, 105, 122, 101, 58, 32, 115, 109, 97, 108, 108, // -size: small - 101, 114, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // er; backgrou - 110, 100, 58, 32, 35, 100, 100, 100, 59, 32, 112, 97, // nd: #ddd; pa - 100, 100, 105, 110, 103, 58, 32, 48, 46, 49, 101, 109, // dding: 0.1em - 32, 48, 46, 51, 101, 109, 59, 32, 98, 111, 114, 100, // 0.3em; bord - 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 - 46, 50, 101, 109, 59, 32, 125, 10, 116, 101, 120, 116, // .2em; }.text - 97, 114, 101, 97, 44, 32, 105, 110, 112, 117, 116, 44, // area, input, - 32, 46, 97, 100, 100, 111, 110, 32, 123, 32, 102, 111, // .addon { fo - 110, 116, 45, 115, 105, 122, 101, 58, 32, 49, 53, 112, // nt-size: 15p - 120, 59, 32, 98, 111, 114, 100, 101, 114, 58, 32, 49, // x; border: 1 - 112, 120, 32, 115, 111, 108, 105, 100, 32, 35, 99, 99, // px solid #cc - 99, 59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // c; padding: - 48, 46, 53, 101, 109, 59, 32, 125, 10, 97, 44, 32, // 0.5em; }.a, - 97, 58, 118, 105, 115, 105, 116, 101, 100, 44, 32, 97, // a:visited, a - 58, 97, 99, 116, 105, 118, 101, 32, 123, 32, 99, 111, // :active { co - 108, 111, 114, 58, 32, 35, 53, 53, 102, 59, 32, 125, // lor: #55f; } - 10, 46, 97, 100, 100, 111, 110, 32, 123, 32, 98, 97, // ..addon { ba - 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, 101, // ckground: #e - 101, 101, 59, 32, 32, 109, 105, 110, 45, 119, 105, 100, // ee; min-wid - 116, 104, 58, 32, 57, 101, 109, 59, 125, 10, 46, 98, // th: 9em;}..b - 116, 110, 32, 123, 10, 32, 32, 98, 97, 99, 107, 103, // tn {. backg - 114, 111, 117, 110, 100, 58, 32, 35, 99, 99, 99, 59, // round: #ccc; - 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi - 117, 115, 58, 32, 48, 46, 51, 101, 109, 59, 32, 98, // us: 0.3em; b - 111, 114, 100, 101, 114, 58, 32, 48, 59, 32, 99, 111, // order: 0; co - 108, 111, 114, 58, 32, 35, 102, 102, 102, 59, 32, 99, // lor: #fff; c - 117, 114, 115, 111, 114, 58, 32, 112, 111, 105, 110, 116, // ursor: point - 101, 114, 59, 10, 32, 32, 100, 105, 115, 112, 108, 97, // er;. displa - 121, 58, 32, 105, 110, 108, 105, 110, 101, 45, 98, 108, // y: inline-bl - 111, 99, 107, 59, 32, 112, 97, 100, 100, 105, 110, 103, // ock; padding - 58, 32, 48, 46, 54, 101, 109, 32, 50, 101, 109, 59, // : 0.6em 2em; - 32, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, // font-weight - 58, 32, 98, 111, 108, 100, 101, 114, 59, 10, 125, 10, // : bolder;.}. - 46, 98, 116, 110, 91, 100, 105, 115, 97, 98, 108, 101, // .btn[disable - 100, 93, 32, 123, 32, 111, 112, 97, 99, 105, 116, 121, // d] { opacity - 58, 32, 48, 46, 53, 59, 32, 99, 117, 114, 115, 111, // : 0.5; curso - 114, 58, 32, 97, 117, 116, 111, 59, 125, 10, 46, 115, // r: auto;}..s - 109, 111, 111, 116, 104, 32, 123, 32, 116, 114, 97, 110, // mooth { tran - 115, 105, 116, 105, 111, 110, 58, 32, 97, 108, 108, 32, // sition: all - 46, 50, 115, 59, 32, 125, 10, 46, 99, 111, 110, 116, // .2s; }..cont - 97, 105, 110, 101, 114, 32, 123, 32, 109, 97, 114, 103, // ainer { marg - 105, 110, 58, 32, 48, 32, 50, 48, 112, 120, 59, 32, // in: 0 20px; - 119, 105, 100, 116, 104, 58, 32, 97, 117, 116, 111, 59, // width: auto; - 32, 125, 10, 46, 100, 45, 102, 108, 101, 120, 32, 123, // }..d-flex { - 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, 102, 108, // display: fl - 101, 120, 59, 32, 125, 10, 46, 100, 45, 110, 111, 110, // ex; }..d-non - 101, 32, 123, 32, 100, 105, 115, 112, 108, 97, 121, 58, // e { display: - 32, 110, 111, 110, 101, 59, 32, 125, 10, 46, 98, 111, // none; }..bo - 114, 100, 101, 114, 32, 123, 32, 98, 111, 114, 100, 101, // rder { borde - 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, 105, 100, // r: 1px solid - 32, 35, 100, 100, 100, 59, 32, 125, 10, 46, 114, 111, // #ddd; }..ro - 117, 110, 100, 101, 100, 32, 123, 32, 98, 111, 114, 100, // unded { bord - 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 - 46, 53, 101, 109, 59, 32, 125, 10, 46, 110, 111, 119, // .5em; }..now - 114, 97, 112, 32, 123, 32, 119, 104, 105, 116, 101, 45, // rap { white- - 115, 112, 97, 99, 101, 58, 32, 110, 111, 119, 114, 97, // space: nowra - 112, 59, 32, 125, 10, 46, 109, 115, 103, 32, 123, 32, // p; }..msg { - 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, // background: - 35, 100, 101, 102, 59, 32, 98, 111, 114, 100, 101, 114, // #def; border - 45, 108, 101, 102, 116, 58, 32, 53, 112, 120, 32, 115, // -left: 5px s - 111, 108, 105, 100, 32, 35, 53, 57, 100, 59, 32, 112, // olid #59d; p - 97, 100, 100, 105, 110, 103, 58, 32, 48, 46, 53, 101, // adding: 0.5e - 109, 59, 32, 102, 111, 110, 116, 45, 115, 105, 122, 101, // m; font-size - 58, 32, 57, 48, 37, 59, 32, 109, 97, 114, 103, 105, // : 90%; margi - 110, 58, 32, 49, 101, 109, 32, 48, 59, 32, 125, 10, // n: 1em 0; }. - 46, 115, 101, 99, 116, 105, 111, 110, 32, 123, 32, 109, // .section { m - 97, 114, 103, 105, 110, 58, 32, 48, 32, 49, 101, 109, // argin: 0 1em - 59, 32, 125, 10, 46, 116, 111, 112, 105, 99, 44, 32, // ; }..topic, - 46, 100, 97, 116, 97, 44, 32, 46, 113, 111, 115, 32, // .data, .qos - 123, 32, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // { padding: - 48, 46, 50, 101, 109, 32, 48, 46, 53, 101, 109, 59, // 0.2em 0.5em; - 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi - 117, 115, 58, 32, 48, 46, 52, 101, 109, 59, 32, 109, // us: 0.4em; m - 97, 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, // argin-right: - 32, 48, 46, 53, 101, 109, 59, 32, 32, 125, 10, 46, // 0.5em; }.. - 113, 111, 115, 32, 123, 32, 98, 97, 99, 107, 103, 114, // qos { backgr - 111, 117, 110, 100, 58, 32, 35, 101, 102, 97, 59, 32, // ound: #efa; - 125, 10, 46, 116, 111, 112, 105, 99, 32, 123, 32, 98, // }..topic { b +static const unsigned char v3[] = { + 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' + 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 67, 111, // ;.import {Co + 109, 112, 111, 110, 101, 110, 116, 44, 32, 104, 44, 32, // mponent, h, + 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, 101, 114, // html, render + 44, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 44, // , useEffect, + 32, 117, 115, 101, 83, 116, 97, 116, 101, 44, 32, 117, // useState, u + 115, 101, 82, 101, 102, 125, 32, 102, 114, 111, 109, 32, // seRef} from + 39, 46, 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, // './preact.mi + 110, 46, 106, 115, 39, 59, 10, 10, 99, 111, 110, 115, // n.js';..cons + 116, 32, 77, 97, 120, 77, 101, 116, 114, 105, 99, 115, // t MaxMetrics + 68, 97, 116, 97, 80, 111, 105, 110, 116, 115, 32, 61, // DataPoints = + 32, 53, 48, 59, 10, 10, 47, 47, 32, 84, 104, 105, // 50;..// Thi + 115, 32, 115, 105, 109, 112, 108, 101, 32, 112, 117, 98, // s simple pub + 108, 105, 115, 104, 47, 115, 117, 98, 115, 99, 114, 105, // lish/subscri + 98, 101, 32, 105, 115, 32, 117, 115, 101, 100, 32, 116, // be is used t + 111, 32, 112, 97, 115, 115, 32, 110, 111, 116, 105, 102, // o pass notif + 105, 99, 97, 116, 105, 111, 110, 115, 32, 116, 104, 97, // ications tha + 116, 32, 119, 101, 114, 101, 10, 47, 47, 32, 114, 101, // t were.// re + 99, 101, 105, 118, 101, 100, 32, 102, 114, 111, 109, 32, // ceived from + 116, 104, 101, 32, 115, 101, 114, 118, 101, 114, 44, 32, // the server, + 116, 111, 32, 97, 108, 108, 32, 99, 104, 105, 108, 100, // to all child + 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, // components + 111, 102, 32, 116, 104, 101, 32, 97, 112, 112, 46, 10, // of the app.. + 118, 97, 114, 32, 80, 117, 98, 83, 117, 98, 32, 61, // var PubSub = + 32, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, // (function() + 32, 123, 10, 32, 32, 118, 97, 114, 32, 104, 97, 110, // {. var han + 100, 108, 101, 114, 115, 32, 61, 32, 123, 125, 44, 32, // dlers = {}, + 105, 100, 32, 61, 32, 48, 59, 10, 32, 32, 114, 101, // id = 0;. re + 116, 117, 114, 110, 32, 123, 10, 32, 32, 32, 32, 115, // turn {. s + 117, 98, 115, 99, 114, 105, 98, 101, 58, 32, 102, 117, // ubscribe: fu + 110, 99, 116, 105, 111, 110, 40, 102, 110, 41, 32, 123, // nction(fn) { + 10, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, // . handl + 101, 114, 115, 91, 105, 100, 43, 43, 93, 32, 61, 32, // ers[id++] = + 102, 110, 59, 10, 32, 32, 32, 32, 125, 44, 10, 32, // fn;. },. + 32, 32, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, // unsubscri + 98, 101, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, // be: function + 40, 105, 100, 41, 32, 123, 10, 32, 32, 32, 32, 32, // (id) {. + 32, 100, 101, 108, 101, 116, 101, 32, 104, 97, 110, 100, // delete hand + 108, 101, 114, 115, 91, 105, 100, 93, 59, 10, 32, 32, // lers[id];. + 32, 32, 125, 44, 10, 32, 32, 32, 32, 112, 117, 98, // },. pub + 108, 105, 115, 104, 58, 32, 102, 117, 110, 99, 116, 105, // lish: functi + 111, 110, 40, 100, 97, 116, 97, 41, 32, 123, 10, 32, // on(data) {. + 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, // for (va + 114, 32, 107, 32, 105, 110, 32, 104, 97, 110, 100, 108, // r k in handl + 101, 114, 115, 41, 32, 104, 97, 110, 100, 108, 101, 114, // ers) handler + 115, 91, 107, 93, 40, 100, 97, 116, 97, 41, 59, 10, // s[k](data);. + 32, 32, 32, 32, 125, 10, 32, 32, 125, 59, 10, 125, // }. };.} + 41, 40, 41, 59, 10, 10, 99, 111, 110, 115, 116, 32, // )();..const + 78, 97, 118, 32, 61, 32, 112, 114, 111, 112, 115, 32, // Nav = props + 61, 62, 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, // => html`.. + 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, //
. < + 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, // div style="f + 108, 101, 120, 58, 32, 49, 32, 49, 32, 97, 117, 116, // lex: 1 1 aut + 111, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, // o; display: + 102, 108, 101, 120, 59, 32, 97, 108, 105, 103, 110, 45, // flex; align- + 105, 116, 101, 109, 115, 58, 32, 99, 101, 110, 116, 101, // items: cente + 114, 59, 34, 62, 10, 32, 32, 32, 32, 32, 32, 60, // r;">. < + 98, 62, 89, 111, 117, 114, 32, 80, 114, 111, 100, 117, // b>Your Produ + 99, 116, 60, 47, 98, 62, 10, 32, 32, 32, 32, 60, // ct. < + 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, // /div>. . < + 115, 112, 97, 110, 62, 76, 111, 103, 103, 101, 100, 32, // span>Logged + 105, 110, 32, 97, 115, 58, 60, 47, 115, 112, 97, 110, // in as:. . + 32, 32, 32, 32, 60, 115, 112, 97, 110, 62, 36, 123, // ${ + 112, 114, 111, 112, 115, 46, 117, 115, 101, 114, 125, 60, // props.user}< + 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 32, // /span>. + 32, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, 98, // logout + 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // .
. + 32, 32, 60, 47, 100, 105, 118, 62, 10, 60, 47, 100, // .`;...cons + 116, 32, 72, 101, 114, 111, 32, 61, 32, 112, 114, 111, // t Hero = pro + 112, 115, 32, 61, 62, 32, 104, 116, 109, 108, 96, 10, // ps => html`. + 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, //
. + 10, 32, 32, 60, 104, 49, 32, 115, 116, 121, 108, 101, // .

Inte + 114, 97, 99, 116, 105, 118, 101, 32, 68, 101, 118, 105, // ractive Devi + 99, 101, 32, 68, 97, 115, 104, 98, 111, 97, 114, 100, // ce Dashboard + 60, 47, 104, 49, 62, 10, 10, 32, 32, 60, 112, 62, //

..

+ 10, 32, 32, 84, 104, 105, 115, 32, 100, 101, 118, 105, // . This devi + 99, 101, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // ce dashboard + 32, 105, 115, 32, 100, 101, 118, 101, 108, 111, 112, 101, // is develope + 100, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, // d using the + 109, 111, 100, 101, 114, 110, 32, 97, 110, 100, 32, 99, // modern and c + 111, 109, 112, 97, 99, 116, 32, 80, 114, 101, 97, 99, // ompact Preac + 116, 32, 102, 114, 97, 109, 101, 119, 111, 114, 107, 44, // t framework, + 10, 32, 32, 105, 110, 32, 111, 114, 100, 101, 114, 32, // . in order + 116, 111, 32, 102, 105, 116, 32, 111, 110, 32, 118, 101, // to fit on ve + 114, 121, 32, 115, 109, 97, 108, 108, 32, 100, 101, 118, // ry small dev + 105, 99, 101, 115, 46, 32, 84, 104, 105, 115, 32, 105, // ices. This i + 115, 10, 32, 32, 97, 32, 60, 97, 32, 104, 114, 101, // s. a h + 121, 98, 114, 105, 100, 32, 115, 101, 114, 118, 101, 114, // ybrid server + 60, 47, 97, 62, 32, 119, 104, 105, 99, 104, 10, 32, // which. + 32, 112, 114, 111, 118, 105, 100, 101, 115, 32, 98, 111, // provides bo + 116, 104, 32, 115, 116, 97, 116, 105, 99, 32, 97, 110, // th static an + 100, 32, 100, 121, 110, 97, 109, 105, 99, 32, 99, 111, // d dynamic co + 110, 116, 101, 110, 116, 46, 32, 32, 83, 116, 97, 116, // ntent. Stat + 105, 99, 32, 102, 105, 108, 101, 115, 44, 32, 108, 105, // ic files, li + 107, 101, 32, 67, 83, 83, 47, 74, 83, 47, 72, 84, // ke CSS/JS/HT + 77, 76, 10, 32, 32, 111, 114, 32, 105, 109, 97, 103, // ML. or imag + 101, 115, 44, 32, 97, 114, 101, 32, 99, 111, 109, 112, // es, are comp + 105, 108, 101, 100, 32, 105, 110, 116, 111, 32, 116, 104, // iled into th + 101, 32, 115, 101, 114, 118, 101, 114, 32, 98, 105, 110, // e server bin + 97, 114, 121, 46, 10, 10, 32, 32, 84, 104, 105, 115, // ary... This + 32, 85, 73, 32, 117, 115, 101, 115, 32, 116, 104, 101, // UI uses the + 32, 82, 69, 83, 84, 32, 65, 80, 73, 32, 105, 109, // REST API im + 112, 108, 101, 109, 101, 110, 116, 101, 100, 32, 98, 121, // plemented by + 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, 101, 44, // the device, + 32, 119, 104, 105, 99, 104, 32, 121, 111, 117, 32, 99, // which you c + 97, 110, 32, 101, 120, 97, 109, 105, 110, 101, 10, 32, // an examine. + 32, 117, 115, 105, 110, 103, 32, 32, 60, 99, 111, 100, // using curl command-li + 110, 101, 32, 117, 116, 105, 108, 105, 116, 121, 58, 10, // ne utility:. + 32, 32, 60, 47, 112, 62, 10, 10, 32, 32, 60, 100, //

.. cur + 108, 32, 45, 117, 32, 97, 100, 109, 105, 110, 58, 112, // l -u admin:p + 97, 115, 115, 48, 32, 108, 111, 99, 97, 108, 104, 111, // ass0 localho + 115, 116, 58, 56, 48, 48, 48, 47, 97, 112, 105, 47, // st:8000/api/ + 99, 111, 110, 102, 105, 103, 47, 103, 101, 116, 60, 47, // config/get
+ 10, 32, 32, 60, 100, 105, 118, 62, 60, 99, 111, 100, // .
curl -u ad + 109, 105, 110, 58, 112, 97, 115, 115, 48, 32, 108, 111, // min:pass0 lo + 99, 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, // calhost:8000 + 47, 97, 112, 105, 47, 99, 111, 110, 102, 105, 103, 47, // /api/config/ + 115, 101, 116, 32, 45, 100, 32, 39, 112, 117, 98, 61, // set -d 'pub= + 109, 103, 47, 116, 111, 112, 105, 99, 39, 60, 47, 99, // mg/topic'
. + 32, 32, 60, 100, 105, 118, 62, 60, 99, 111, 100, 101, //
curl -u adm + 105, 110, 58, 112, 97, 115, 115, 48, 32, 108, 111, 99, // in:pass0 loc + 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, 47, // alhost:8000/ + 97, 112, 105, 47, 109, 101, 115, 115, 97, 103, 101, 47, // api/message/ + 115, 101, 110, 100, 32, 45, 100, 32, 39, 109, 101, 115, // send -d 'mes + 115, 97, 103, 101, 61, 104, 101, 108, 108, 111, 39, 60, // sage=hello'< + 47, 99, 111, 100, 101, 62, 32, 60, 47, 100, 105, 118, // /code>
..

. T + 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, 99, 97, // he device ca + 110, 32, 115, 101, 110, 100, 32, 110, 111, 116, 105, 102, // n send notif + 105, 99, 97, 116, 105, 111, 110, 115, 32, 116, 111, 32, // ications to + 116, 104, 105, 115, 32, 100, 97, 115, 104, 98, 111, 97, // this dashboa + 114, 100, 32, 97, 116, 32, 97, 110, 121, 116, 105, 109, // rd at anytim + 101, 46, 32, 78, 111, 116, 105, 102, 105, 99, 97, 116, // e. Notificat + 105, 111, 110, 115, 10, 32, 32, 97, 114, 101, 32, 115, // ions. are s + 101, 110, 116, 32, 111, 118, 101, 114, 32, 87, 101, 98, // ent over Web + 83, 111, 99, 107, 101, 116, 32, 97, 116, 32, 85, 82, // Socket at UR + 73, 32, 60, 99, 111, 100, 101, 62, 47, 97, 112, 105, // I /api + 47, 119, 97, 116, 99, 104, 60, 47, 99, 111, 100, 101, // /watch as JSON st + 114, 105, 110, 103, 115, 58, 32, 60, 99, 111, 100, 101, // rings: {"name": ". + 46, 34, 44, 32, 34, 100, 97, 116, 97, 34, 58, 32, // .", "data": + 46, 46, 46, 125, 60, 47, 99, 111, 100, 101, 62, 10, // ...}. + 32, 32, 60, 100, 105, 118, 62, 84, 114, 121, 32, 60, //

Try < + 99, 111, 100, 101, 62, 119, 115, 99, 97, 116, 32, 45, // code>wscat - + 45, 97, 117, 116, 104, 32, 117, 115, 101, 114, 49, 58, // -auth user1: + 112, 97, 115, 115, 49, 32, 45, 45, 99, 111, 110, 110, // pass1 --conn + 101, 99, 116, 32, 119, 115, 58, 47, 47, 108, 111, 99, // ect ws://loc + 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, 47, // alhost:8000/ + 97, 112, 105, 47, 119, 97, 116, 99, 104, 60, 47, 99, // api/watch
. + 32, 60, 47, 112, 62, 10, 60, 47, 100, 105, 118, 62, //

. + 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 10, 99, // .`;..c + 111, 110, 115, 116, 32, 76, 111, 103, 105, 110, 32, 61, // onst Login = + 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, 114, // function(pr + 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, 110, // ops) {. con + 115, 116, 32, 91, 117, 115, 101, 114, 44, 32, 115, 101, // st [user, se + 116, 85, 115, 101, 114, 93, 32, 61, 32, 117, 115, 101, // tUser] = use + 83, 116, 97, 116, 101, 40, 39, 39, 41, 59, 10, 32, // State('');. + 32, 99, 111, 110, 115, 116, 32, 91, 112, 97, 115, 115, // const [pass + 44, 32, 115, 101, 116, 80, 97, 115, 115, 93, 32, 61, // , setPass] = + 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, // useState('' + 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, // );. const l + 111, 103, 105, 110, 32, 61, 32, 101, 118, 32, 61, 62, // ogin = ev => + 10, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99, 104, // . fetch + 40, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // (. + 39, 47, 97, 112, 105, 47, 108, 111, 103, 105, 110, 39, // '/api/login' + 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // ,. + 123, 104, 101, 97, 100, 101, 114, 115, 58, 32, 123, 65, // {headers: {A + 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, // uthorization + 58, 32, 39, 66, 97, 115, 105, 99, 32, 39, 32, 43, // : 'Basic ' + + 32, 98, 116, 111, 97, 40, 117, 115, 101, 114, 32, 43, // btoa(user + + 32, 39, 58, 39, 32, 43, 32, 112, 97, 115, 115, 41, // ':' + pass) + 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // }}). + 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, // .then(r => + 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 10, 32, // r.json()). + 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, // .th + 101, 110, 40, 114, 32, 61, 62, 32, 114, 32, 38, 38, // en(r => r && + 32, 112, 114, 111, 112, 115, 46, 108, 111, 103, 105, 110, // props.login + 40, 114, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, // (r)). + 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, 101, 114, // .catch(er + 114, 32, 61, 62, 32, 101, 114, 114, 41, 59, 10, 32, // r => err);. + 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, 108, // return html + 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, // `.
+ 10, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, // .
. + 60, 104, 49, 32, 115, 116, 121, 108, 101, 61, 34, 99, //

Device Dash + 98, 111, 97, 114, 100, 32, 76, 111, 103, 105, 110, 32, // board Login + 60, 47, 104, 49, 62, 10, 32, 32, 32, 32, 60, 100, //

. . < + 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 39, // input type=' + 116, 101, 120, 116, 39, 32, 112, 108, 97, 99, 101, 104, // text' placeh + 111, 108, 100, 101, 114, 61, 39, 78, 97, 109, 101, 39, // older='Name' + 32, 115, 116, 121, 108, 101, 61, 34, 119, 105, 100, 116, // style="widt + 104, 58, 32, 49, 48, 48, 37, 59, 34, 10, 32, 32, // h: 100%;". + 32, 32, 32, 32, 32, 32, 111, 110, 105, 110, 112, 117, // oninpu + 116, 61, 36, 123, 101, 118, 32, 61, 62, 32, 115, 101, // t=${ev => se + 116, 85, 115, 101, 114, 40, 101, 118, 46, 116, 97, 114, // tUser(ev.tar + 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, // get.value)} + 118, 97, 108, 117, 101, 61, 36, 123, 117, 115, 101, 114, // value=${user + 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, 47, 100, // } />. .
. setPass( + 101, 118, 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, // ev.target.va + 108, 117, 101, 41, 125, 32, 118, 97, 108, 117, 101, 61, // lue)} value= + 36, 123, 112, 97, 115, 115, 125, 10, 32, 32, 32, 32, // ${pass}. + 32, 32, 32, 32, 111, 110, 99, 104, 97, 110, 103, 101, // onchange + 61, 36, 123, 108, 111, 103, 105, 110, 125, 32, 47, 62, // =${login} /> + 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // .
. + 32, 32, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, //
. + 32, 32, 32, 60, 98, 117, 116, 116, 111, 110, 32, 99, // . + 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, //
. + 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
. + 32, 32, 32, 32, 86, 97, 108, 105, 100, 32, 108, 111, // Valid lo + 103, 105, 110, 115, 58, 32, 97, 100, 109, 105, 110, 58, // gins: admin: + 112, 97, 115, 115, 48, 44, 32, 117, 115, 101, 114, 49, // pass0, user1 + 58, 112, 97, 115, 115, 49, 44, 32, 117, 115, 101, 114, // :pass1, user + 50, 58, 112, 97, 115, 115, 50, 10, 32, 32, 32, 32, // 2:pass2. + 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .
`; + 10, 125, 59, 10, 10, 10, 99, 111, 110, 115, 116, 32, // .};...const + 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, // Configuratio + 110, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, // n = function + 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, 32, // (props) {. + 99, 111, 110, 115, 116, 32, 91, 117, 114, 108, 44, 32, // const [url, + 115, 101, 116, 85, 114, 108, 93, 32, 61, 32, 117, 115, // setUrl] = us + 101, 83, 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, // eState(props + 46, 99, 111, 110, 102, 105, 103, 46, 117, 114, 108, 32, // .config.url + 124, 124, 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, // || '');. co + 110, 115, 116, 32, 91, 112, 117, 98, 44, 32, 115, 101, // nst [pub, se + 116, 80, 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, // tPub] = useS + 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, // tate(props.c + 111, 110, 102, 105, 103, 46, 112, 117, 98, 32, 124, 124, // onfig.pub || + 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, 110, 115, // '');. cons + 116, 32, 91, 115, 117, 98, 44, 32, 115, 101, 116, 83, // t [sub, setS + 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, // ub] = useSta + 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, 111, 110, // te(props.con + 102, 105, 103, 46, 115, 117, 98, 32, 124, 124, 32, 39, // fig.sub || ' + 39, 41, 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, // ');.. useEf + 102, 101, 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, // fect(() => { + 10, 32, 32, 32, 32, 115, 101, 116, 85, 114, 108, 40, // . setUrl( + 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config + 46, 117, 114, 108, 41, 59, 10, 32, 32, 32, 32, 115, // .url);. s + 101, 116, 80, 117, 98, 40, 112, 114, 111, 112, 115, 46, // etPub(props. + 99, 111, 110, 102, 105, 103, 46, 112, 117, 98, 41, 59, // config.pub); + 10, 32, 32, 32, 32, 115, 101, 116, 83, 117, 98, 40, // . setSub( + 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config + 46, 115, 117, 98, 41, 59, 10, 32, 32, 125, 44, 32, // .sub);. }, + 91, 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, // [props.confi + 103, 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, // g]);.. cons + 116, 32, 117, 112, 100, 97, 116, 101, 32, 61, 32, 40, // t update = ( + 110, 97, 109, 101, 44, 32, 118, 97, 108, 41, 32, 61, // name, val) = + 62, 32, 102, 101, 116, 99, 104, 40, 39, 47, 97, 112, // > fetch('/ap + 105, 47, 99, 111, 110, 102, 105, 103, 47, 115, 101, 116, // i/config/set + 39, 44, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, // ', {. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 109, 101, 116, 104, 111, 100, 58, 32, 39, // method: ' + 112, 111, 115, 116, 39, 44, 10, 32, 32, 32, 32, 32, // post',. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, 32, 96, // body: ` + 36, 123, 110, 97, 109, 101, 125, 61, 36, 123, 101, 110, // ${name}=${en + 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, 112, 111, // codeURICompo + 110, 101, 110, 116, 40, 118, 97, 108, 41, 125, 96, 10, // nent(val)}`. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 32, 125, 41, 46, 99, // }).c + 97, 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, // atch(err => + 101, 114, 114, 41, 59, 10, 32, 32, 99, 111, 110, 115, // err);. cons + 116, 32, 117, 112, 100, 97, 116, 101, 117, 114, 108, 32, // t updateurl + 61, 32, 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, // = ev => upda + 116, 101, 40, 39, 117, 114, 108, 39, 44, 32, 117, 114, // te('url', ur + 108, 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, // l);. const + 117, 112, 100, 97, 116, 101, 112, 117, 98, 32, 61, 32, // updatepub = + 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, // ev => update + 40, 39, 112, 117, 98, 39, 44, 32, 112, 117, 98, 41, // ('pub', pub) + 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 117, 112, // ;. const up + 100, 97, 116, 101, 115, 117, 98, 32, 61, 32, 101, 118, // datesub = ev + 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, 40, 39, // => update(' + 115, 117, 98, 39, 44, 32, 115, 117, 98, 41, 59, 10, // sub', sub);. + 10, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // . console.l + 111, 103, 40, 112, 114, 111, 112, 115, 44, 32, 91, 117, // og(props, [u + 114, 108, 44, 32, 112, 117, 98, 44, 32, 115, 117, 98, // rl, pub, sub + 93, 41, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, // ]);. return + 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, // html`.
.

. + 32, 32, 68, 101, 118, 105, 99, 101, 32, 67, 111, 110, // Device Con + 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 60, 47, // figuration.
. M + 81, 84, 84, 32, 115, 101, 114, 118, 101, 114, 58, 60, // QTT server:< + 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 60, // /span>. < + 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 34, // input type=" + 116, 101, 120, 116, 34, 32, 115, 116, 121, 108, 101, 61, // text" style= + 34, 102, 108, 101, 120, 58, 32, 49, 32, 49, 48, 48, // "flex: 1 100 + 37, 59, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32, // %;". + 32, 32, 118, 97, 108, 117, 101, 61, 36, 123, 117, 114, // value=${ur + 108, 125, 32, 111, 110, 99, 104, 97, 110, 103, 101, 61, // l} onchange= + 36, 123, 117, 112, 100, 97, 116, 101, 117, 114, 108, 125, // ${updateurl} + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, // . o + 110, 105, 110, 112, 117, 116, 61, 36, 123, 101, 118, 32, // ninput=${ev + 61, 62, 32, 115, 101, 116, 85, 114, 108, 40, 101, 118, // => setUrl(ev + 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, 108, 117, // .target.valu + 101, 41, 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, // e)} />. < + 98, 117, 116, 116, 111, 110, 32, 99, 108, 97, 115, 115, // button class + 61, 34, 98, 116, 110, 34, 32, 100, 105, 115, 97, 98, // ="btn" disab + 108, 101, 100, 61, 36, 123, 33, 117, 114, 108, 125, 32, // led=${!url} + 111, 110, 99, 108, 105, 99, 107, 61, 36, 123, 117, 112, // onclick=${up + 100, 97, 116, 101, 117, 114, 108, 125, 10, 32, 32, 32, // dateurl}. + 32, 32, 32, 115, 116, 121, 108, 101, 61, 34, 109, 97, // style="ma + 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 32, 49, // rgin-left: 1 + 101, 109, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // em; backgrou + 110, 100, 58, 32, 35, 56, 97, 97, 59, 34, 62, 85, // nd: #8aa;">U + 112, 100, 97, 116, 101, 60, 47, 98, 117, 116, 116, 111, // pdate.
. + 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
+ 10, 32, 32, 32, 32, 60, 115, 112, 97, 110, 32, 99, // . Subs + 99, 114, 105, 98, 101, 32, 116, 111, 112, 105, 99, 58, // cribe topic: + 60, 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, // . + 60, 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, // + 115, 101, 116, 83, 117, 98, 40, 101, 118, 46, 116, 97, // setSub(ev.ta + 114, 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, // rget.value)} + 32, 47, 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, // />. Upda + 116, 101, 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, // te. + 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. < + 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 109, // div style="m + 97, 114, 103, 105, 110, 58, 32, 48, 46, 53, 101, 109, // argin: 0.5em + 32, 48, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, // 0; display: + 32, 102, 108, 101, 120, 59, 34, 62, 10, 32, 32, 32, // flex;">. + 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, // Publish + 116, 111, 112, 105, 99, 58, 60, 47, 115, 112, 97, 110, // topic:. se + 116, 80, 117, 98, 40, 101, 118, 46, 116, 97, 114, 103, // tPub(ev.targ + 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, 47, // et.value)} / + 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, 116, 111, // >. Update + 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, 32, 32, // . + 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, 105, //

. . You c + 97, 110, 32, 117, 115, 101, 32, 60, 97, 32, 104, 114, // an use . Hive + 77, 81, 32, 87, 101, 98, 115, 111, 99, 107, 101, 116, // MQ Websocket + 32, 119, 101, 98, 32, 99, 108, 105, 101, 110, 116, 60, // web client< + 47, 97, 62, 32, 116, 111, 32, 115, 101, 110, 100, 32, // /a> to send + 109, 101, 115, 115, 97, 103, 101, 115, 32, 116, 111, 32, // messages to + 116, 104, 105, 115, 32, 99, 111, 110, 115, 111, 108, 101, // this console + 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, // ..
. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
. T + 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, 107, 101, // he device ke + 101, 112, 115, 32, 97, 32, 112, 101, 114, 115, 105, 115, // eps a persis + 116, 101, 110, 116, 32, 99, 111, 110, 110, 101, 99, 116, // tent connect + 105, 111, 110, 32, 116, 111, 32, 116, 104, 101, 32, 99, // ion to the c + 111, 110, 102, 105, 103, 117, 114, 101, 100, 32, 77, 81, // onfigured MQ + 84, 84, 32, 115, 101, 114, 118, 101, 114, 46, 10, 32, // TT server.. + 32, 32, 32, 67, 104, 97, 110, 103, 101, 115, 32, 116, // Changes t + 111, 32, 116, 104, 105, 115, 32, 99, 111, 110, 102, 105, // o this confi + 103, 117, 114, 97, 116, 105, 111, 110, 32, 97, 114, 101, // guration are + 32, 112, 114, 111, 112, 97, 103, 97, 116, 101, 100, 32, // propagated + 116, 111, 32, 97, 108, 108, 32, 100, 97, 115, 104, 98, // to all dashb + 111, 97, 114, 100, 115, 58, 32, 116, 114, 121, 10, 32, // oards: try. + 32, 32, 32, 99, 104, 97, 110, 103, 105, 110, 103, 32, // changing + 116, 104, 101, 109, 32, 105, 110, 32, 116, 104, 105, 115, // them in this + 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, 32, 97, // dashboard a + 110, 100, 32, 111, 98, 115, 101, 114, 118, 101, 32, 99, // nd observe c + 104, 97, 110, 103, 101, 115, 32, 105, 110, 32, 111, 116, // hanges in ot + 104, 101, 114, 32, 111, 112, 101, 110, 101, 100, 10, 32, // her opened. + 32, 32, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // dashboard + 115, 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 60, // s..
< + 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 109, // div class="m + 115, 103, 34, 62, 10, 32, 32, 32, 32, 78, 111, 116, // sg">. Not + 101, 58, 32, 97, 100, 109, 105, 110, 105, 115, 116, 114, // e: administr + 97, 116, 111, 114, 115, 32, 99, 97, 110, 32, 115, 101, // ators can se + 101, 32, 116, 104, 105, 115, 32, 115, 101, 99, 116, 105, // e this secti + 111, 110, 32, 97, 110, 100, 32, 99, 97, 110, 32, 99, // on and can c + 104, 97, 110, 103, 101, 32, 100, 101, 118, 105, 99, 101, // hange device + 10, 32, 32, 32, 32, 99, 111, 110, 102, 105, 103, 117, // . configu + 114, 97, 116, 105, 111, 110, 44, 32, 119, 104, 105, 108, // ration, whil + 115, 116, 32, 117, 115, 101, 114, 115, 32, 99, 97, 110, // st users can + 110, 111, 116, 46, 10, 32, 32, 60, 47, 100, 105, 118, // not.. .`;.} + 59, 10, 10, 10, 99, 111, 110, 115, 116, 32, 77, 101, // ;...const Me + 115, 115, 97, 103, 101, 32, 61, 32, 109, 32, 61, 62, // ssage = m => + 32, 104, 116, 109, 108, 96, 60, 100, 105, 118, 32, 115, // html`
+ 10, 32, 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, // . qos + 58, 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, // : ${m.messag + 101, 46, 113, 111, 115, 125, 32, 60, 47, 115, 112, 97, // e.qos} . topic: ${m. + 109, 101, 115, 115, 97, 103, 101, 46, 116, 111, 112, 105, // message.topi + 99, 125, 32, 60, 47, 115, 112, 97, 110, 62, 10, 32, // c} . + 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, // data + 58, 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, // : ${m.messag + 101, 46, 100, 97, 116, 97, 125, 60, 47, 115, 112, 97, // e.data}.
`;. + 10, 99, 111, 110, 115, 116, 32, 77, 101, 115, 115, 97, // .const Messa + 103, 101, 115, 32, 61, 32, 102, 117, 110, 99, 116, 105, // ges = functi + 111, 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, // on(props) {. + 32, 32, 99, 111, 110, 115, 116, 32, 91, 109, 101, 115, // const [mes + 115, 97, 103, 101, 115, 44, 32, 115, 101, 116, 77, 101, // sages, setMe + 115, 115, 97, 103, 101, 115, 93, 32, 61, 32, 117, 115, // ssages] = us + 101, 83, 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, // eState([]);. + 32, 32, 99, 111, 110, 115, 116, 32, 91, 116, 120, 116, // const [txt + 44, 32, 115, 101, 116, 84, 120, 116, 93, 32, 61, 32, // , setTxt] = + 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, 41, // useState('') + 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, 102, 101, // ;.. useEffe + 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, 10, 32, // ct(() => {. + 32, 32, 32, 99, 111, 110, 115, 116, 32, 105, 100, 32, // const id + 61, 32, 80, 117, 98, 83, 117, 98, 46, 115, 117, 98, // = PubSub.sub + 115, 99, 114, 105, 98, 101, 40, 102, 117, 110, 99, 116, // scribe(funct + 105, 111, 110, 40, 109, 115, 103, 41, 32, 123, 10, 32, // ion(msg) {. + 32, 32, 32, 32, 32, 105, 102, 32, 40, 109, 115, 103, // if (msg + 46, 110, 97, 109, 101, 32, 61, 61, 32, 39, 109, 101, // .name == 'me + 115, 115, 97, 103, 101, 39, 41, 32, 115, 101, 116, 77, // ssage') setM + 101, 115, 115, 97, 103, 101, 115, 40, 120, 32, 61, 62, // essages(x => + 32, 120, 46, 99, 111, 110, 99, 97, 116, 40, 91, 109, // x.concat([m + 115, 103, 46, 100, 97, 116, 97, 93, 41, 41, 59, 10, // sg.data]));. + 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, 32, // });. + 114, 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, 117, // return PubSu + 98, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, // b.unsubscrib + 101, 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, 32, // e(id);. }, + 91, 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, // []);.. cons + 116, 32, 115, 101, 110, 100, 109, 101, 115, 115, 97, 103, // t sendmessag + 101, 32, 61, 32, 101, 118, 32, 61, 62, 32, 102, 101, // e = ev => fe + 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, 109, 101, // tch('/api/me + 115, 115, 97, 103, 101, 47, 115, 101, 110, 100, 39, 44, // ssage/send', + 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // {. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 32, 32, 109, 101, 116, // met + 104, 111, 100, 58, 32, 39, 112, 111, 115, 116, 39, 44, // hod: 'post', + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, // body: + 32, 96, 109, 101, 115, 115, 97, 103, 101, 61, 36, 123, // `message=${ + 101, 110, 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, // encodeURICom + 112, 111, 110, 101, 110, 116, 40, 116, 120, 116, 41, 125, // ponent(txt)} + 96, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // `. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // + 32, 32, 32, 32, 32, 32, 125, 41, 46, 116, 104, 101, // }).the + 110, 40, 114, 32, 61, 62, 32, 115, 101, 116, 84, 120, // n(r => setTx + 116, 40, 39, 39, 41, 41, 59, 10, 32, 32, 99, 111, // t(''));. co + 110, 115, 116, 32, 99, 111, 110, 110, 115, 116, 97, 116, // nst connstat + 117, 115, 32, 61, 32, 112, 114, 111, 112, 115, 46, 99, // us = props.c + 111, 110, 102, 105, 103, 46, 99, 111, 110, 110, 101, 99, // onfig.connec + 116, 101, 100, 32, 63, 32, 39, 99, 111, 110, 110, 101, // ted ? 'conne + 99, 116, 101, 100, 39, 32, 58, 32, 39, 100, 105, 115, // cted' : 'dis + 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, 59, 10, // connected';. + 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm + 108, 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, // l`.
+ 10, 32, 32, 60, 104, 51, 32, 115, 116, 121, 108, 101, // .

MQTT me + 115, 115, 97, 103, 101, 115, 60, 47, 104, 51, 62, 10, // ssages

. + 32, 32, 60, 100, 105, 118, 62, 10, 32, 32, 32, 32, //
. + 77, 81, 84, 84, 32, 115, 101, 114, 118, 101, 114, 32, // MQTT server + 115, 116, 97, 116, 117, 115, 58, 32, 60, 98, 62, 36, // status: $ + 123, 99, 111, 110, 110, 115, 116, 97, 116, 117, 115, 125, // {connstatus} + 60, 47, 98, 62, 10, 32, 32, 60, 47, 100, 105, 118, // .
.
. + 36, 123, 109, 101, 115, 115, 97, 103, 101, 115, 46, 109, // ${messages.m + 97, 112, 40, 109, 101, 115, 115, 97, 103, 101, 32, 61, // ap(message = + 62, 32, 104, 40, 77, 101, 115, 115, 97, 103, 101, 44, // > h(Message, + 32, 123, 109, 101, 115, 115, 97, 103, 101, 125, 41, 41, // {message})) + 125, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, // }.
. + 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, //
. + 32, 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, // Publish + 32, 109, 101, 115, 115, 97, 103, 101, 58, 60, 47, 115, // message:. set + 84, 120, 116, 40, 101, 118, 46, 116, 97, 114, 103, 101, // Txt(ev.targe + 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, 47, 62, // t.value)} /> + 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, // .
. + 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, //
. Th + 101, 32, 109, 101, 115, 115, 97, 103, 101, 32, 103, 101, // e message ge + 116, 115, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, // ts passed to + 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, // the device + 118, 105, 97, 32, 82, 69, 83, 84, 46, 32, 84, 104, // via REST. Th + 101, 110, 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, // en the devic + 101, 32, 115, 101, 110, 100, 115, 32, 105, 116, 32, 116, // e sends it t + 111, 10, 32, 32, 32, 32, 116, 104, 101, 32, 77, 81, // o. the MQ + 84, 84, 32, 115, 101, 114, 118, 101, 114, 32, 111, 118, // TT server ov + 101, 114, 32, 77, 81, 84, 84, 46, 32, 65, 108, 108, // er MQTT. All + 32, 77, 81, 84, 84, 32, 109, 101, 115, 115, 97, 103, // MQTT messag + 101, 115, 32, 111, 110, 32, 97, 32, 115, 117, 98, 115, // es on a subs + 99, 114, 105, 98, 101, 100, 32, 116, 111, 112, 105, 99, // cribed topic + 10, 32, 32, 32, 32, 114, 101, 99, 101, 105, 118, 101, // . receive + 100, 32, 98, 121, 32, 116, 104, 101, 32, 100, 101, 118, // d by the dev + 105, 99, 101, 44, 32, 97, 114, 101, 32, 112, 114, 111, // ice, are pro + 112, 97, 103, 97, 116, 101, 100, 32, 116, 111, 32, 116, // pagated to t + 104, 105, 115, 32, 100, 97, 115, 104, 98, 111, 97, 114, // his dashboar + 100, 32, 118, 105, 97, 32, 47, 97, 112, 105, 47, 119, // d via /api/w + 97, 116, 99, 104, 46, 10, 32, 32, 60, 47, 100, 105, // atch.. .
`;. + 125, 59, 10, 10, 47, 47, 32, 69, 120, 112, 101, 99, // };..// Expec + 116, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, // ted argument + 115, 58, 10, 47, 47, 32, 100, 97, 116, 97, 58, 32, // s:.// data: + 116, 105, 109, 101, 115, 101, 114, 105, 101, 115, 44, 32, // timeseries, + 101, 46, 103, 46, 32, 91, 32, 91, 49, 54, 53, 52, // e.g. [ [1654 + 51, 54, 49, 51, 53, 50, 44, 32, 49, 57, 93, 44, // 361352, 19], + 32, 91, 49, 54, 53, 52, 51, 54, 49, 51, 53, 51, // [1654361353 + 44, 32, 49, 56, 93, 44, 32, 46, 46, 46, 32, 93, // , 18], ... ] + 10, 47, 47, 32, 119, 105, 100, 116, 104, 44, 32, 104, // .// width, h + 101, 105, 103, 104, 116, 44, 32, 121, 116, 105, 99, 107, // eight, ytick + 115, 44, 32, 120, 116, 105, 99, 107, 115, 44, 32, 121, // s, xticks, y + 109, 105, 110, 44, 32, 121, 109, 97, 120, 44, 32, 120, // min, ymax, x + 109, 105, 110, 44, 32, 120, 109, 97, 120, 10, 99, 111, // min, xmax.co + 110, 115, 116, 32, 83, 86, 71, 32, 61, 32, 102, 117, // nst SVG = fu + 110, 99, 116, 105, 111, 110, 40, 112, 114, 111, 112, 115, // nction(props + 41, 32, 123, 10, 32, 32, 47, 47, 32, 32, 32, 32, // ) {. // + 32, 32, 32, 32, 32, 32, 32, 32, 119, 10, 32, 32, // w. + 47, 47, 32, 32, 32, 43, 45, 45, 45, 45, 45, 45, // // +------ + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------ + 45, 45, 45, 43, 10, 32, 32, 47, 47, 32, 32, 32, // ---+. // + 124, 32, 32, 32, 32, 32, 32, 32, 32, 104, 49, 32, // | h1 + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 10, // |. + 32, 32, 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, // // | + 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // +----------- + 43, 32, 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, // + |. // + 32, 32, 124, 32, 32, 32, 32, 124, 32, 32, 32, 32, // | | + 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, // | + 124, 32, 32, 104, 10, 32, 32, 47, 47, 32, 32, 32, // | h. // + 124, 32, 119, 49, 32, 124, 32, 32, 32, 32, 32, 32, // | w1 | + 32, 32, 32, 32, 32, 124, 32, 119, 50, 32, 124, 10, // | w2 |. + 32, 32, 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, // // | + 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // +----------- + 43, 32, 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, // + |. // + 32, 32, 124, 32, 32, 32, 32, 32, 32, 32, 32, 32, // | + 104, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // h2 + 124, 10, 32, 32, 47, 47, 32, 32, 32, 43, 45, 45, // |. // +-- + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------ + 45, 45, 45, 45, 45, 45, 45, 43, 10, 32, 32, 47, // -------+. / + 47, 10, 32, 32, 108, 101, 116, 32, 119, 32, 61, 32, // /. let w = + 112, 114, 111, 112, 115, 46, 119, 105, 100, 116, 104, 44, // props.width, + 32, 104, 32, 61, 32, 112, 114, 111, 112, 115, 46, 104, // h = props.h + 101, 105, 103, 104, 116, 44, 32, 119, 49, 32, 61, 32, // eight, w1 = + 51, 48, 44, 32, 119, 50, 32, 61, 32, 48, 44, 32, // 30, w2 = 0, + 104, 49, 32, 61, 32, 56, 44, 32, 104, 50, 32, 61, // h1 = 8, h2 = + 32, 49, 56, 59, 10, 32, 32, 108, 101, 116, 32, 121, // 18;. let y + 116, 105, 99, 107, 115, 32, 61, 32, 112, 114, 111, 112, // ticks = prop + 115, 46, 121, 116, 105, 99, 107, 115, 32, 124, 124, 32, // s.yticks || + 52, 44, 32, 120, 116, 105, 99, 107, 115, 32, 61, 32, // 4, xticks = + 112, 114, 111, 112, 115, 46, 120, 116, 105, 99, 107, 115, // props.xticks + 32, 124, 124, 32, 53, 59, 10, 32, 32, 108, 101, 116, // || 5;. let + 32, 100, 97, 116, 97, 32, 61, 32, 112, 114, 111, 112, // data = prop + 115, 46, 100, 97, 116, 97, 32, 124, 124, 32, 91, 93, // s.data || [] + 59, 10, 32, 32, 108, 101, 116, 32, 121, 109, 105, 110, // ;. let ymin + 32, 61, 32, 112, 114, 111, 112, 115, 46, 121, 109, 105, // = props.ymi + 110, 32, 124, 124, 32, 48, 59, 10, 32, 32, 108, 101, // n || 0;. le + 116, 32, 121, 109, 97, 120, 32, 61, 32, 112, 114, 111, // t ymax = pro + 112, 115, 46, 121, 109, 97, 120, 32, 124, 124, 32, 77, // ps.ymax || M + 97, 116, 104, 46, 109, 97, 120, 46, 97, 112, 112, 108, // ath.max.appl + 121, 40, 110, 117, 108, 108, 44, 32, 100, 97, 116, 97, // y(null, data + 46, 109, 97, 112, 40, 112, 32, 61, 62, 32, 112, 91, // .map(p => p[ + 49, 93, 41, 41, 59, 10, 32, 32, 108, 101, 116, 32, // 1]));. let + 120, 109, 105, 110, 32, 61, 32, 112, 114, 111, 112, 115, // xmin = props + 46, 120, 109, 105, 110, 32, 124, 124, 32, 77, 97, 116, // .xmin || Mat + 104, 46, 109, 105, 110, 46, 97, 112, 112, 108, 121, 40, // h.min.apply( + 110, 117, 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, // null, data.m + 97, 112, 40, 112, 32, 61, 62, 32, 112, 91, 48, 93, // ap(p => p[0] + 41, 41, 59, 10, 32, 32, 108, 101, 116, 32, 120, 109, // ));. let xm + 97, 120, 32, 61, 32, 112, 114, 111, 112, 115, 46, 120, // ax = props.x + 109, 97, 120, 32, 124, 124, 32, 77, 97, 116, 104, 46, // max || Math. + 109, 97, 120, 46, 97, 112, 112, 108, 121, 40, 110, 117, // max.apply(nu + 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, 97, 112, // ll, data.map + 40, 112, 32, 61, 62, 32, 112, 91, 48, 93, 41, 41, // (p => p[0])) + 59, 10, 10, 32, 32, 47, 47, 32, 89, 45, 97, 120, // ;.. // Y-ax + 105, 115, 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, // is tick line + 115, 32, 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, // s and labels + 10, 32, 32, 108, 101, 116, 32, 121, 116, 97, 32, 61, // . let yta = + 32, 40, 110, 101, 119, 32, 65, 114, 114, 97, 121, 40, // (new Array( + 121, 116, 105, 99, 107, 115, 32, 43, 32, 49, 41, 41, // yticks + 1)) + 46, 102, 105, 108, 108, 40, 48, 41, 46, 109, 97, 112, // .fill(0).map + 40, 40, 95, 44, 32, 105, 41, 32, 61, 62, 32, 105, // ((_, i) => i + 41, 59, 32, 32, 47, 47, 32, 105, 110, 100, 105, 99, // ); // indic + 101, 115, 10, 32, 32, 108, 101, 116, 32, 121, 116, 105, // es. let yti + 32, 61, 32, 105, 32, 61, 62, 32, 104, 32, 45, 32, // = i => h - + 104, 50, 32, 45, 32, 40, 104, 32, 45, 32, 104, 49, // h2 - (h - h1 + 32, 45, 32, 104, 50, 41, 32, 42, 32, 105, 32, 47, // - h2) * i / + 32, 121, 116, 105, 99, 107, 115, 59, 32, 32, 32, 32, // yticks; + 32, 32, 32, 32, 32, 32, 47, 47, 32, 105, 110, 100, // // ind + 101, 120, 39, 115, 32, 89, 10, 32, 32, 108, 101, 116, // ex's Y. let + 32, 121, 116, 118, 32, 61, 32, 105, 32, 61, 62, 32, // ytv = i => + 40, 121, 109, 97, 120, 32, 45, 32, 121, 109, 105, 110, // (ymax - ymin + 41, 32, 42, 32, 105, 32, 47, 32, 121, 116, 105, 99, // ) * i / ytic + 107, 115, 59, 10, 32, 32, 108, 101, 116, 32, 121, 116, // ks;. let yt + 108, 32, 61, 32, 121, 32, 61, 62, 32, 104, 116, 109, // l = y => htm + 108, 96, 60, 108, 105, 110, 101, 32, 120, 49, 61, 36, // l``;. + 108, 101, 116, 32, 121, 116, 116, 32, 61, 32, 40, 121, // let ytt = (y + 44, 32, 118, 41, 32, 61, 62, 32, 104, 116, 109, 108, // , v) => html + 96, 60, 116, 101, 120, 116, 32, 120, 61, 48, 32, 121, // ` + 36, 123, 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, // ${v}` + 59, 10, 10, 32, 32, 47, 47, 32, 88, 45, 97, 120, // ;.. // X-ax + 105, 115, 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, // is tick line + 115, 32, 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, // s and labels + 10, 32, 32, 108, 101, 116, 32, 100, 97, 116, 101, 102, // . let datef + 109, 116, 32, 61, 32, 117, 110, 105, 120, 32, 61, 62, // mt = unix => + 32, 40, 110, 101, 119, 32, 68, 97, 116, 101, 40, 117, // (new Date(u + 110, 105, 120, 32, 42, 32, 49, 48, 48, 48, 41, 41, // nix * 1000)) + 46, 116, 111, 73, 83, 79, 83, 116, 114, 105, 110, 103, // .toISOString + 40, 41, 46, 115, 117, 98, 115, 116, 114, 40, 49, 52, // ().substr(14 + 44, 32, 53, 41, 59, 10, 32, 32, 108, 101, 116, 32, // , 5);. let + 120, 116, 97, 32, 61, 32, 40, 110, 101, 119, 32, 65, // xta = (new A + 114, 114, 97, 121, 40, 120, 116, 105, 99, 107, 115, 32, // rray(xticks + 43, 32, 49, 41, 41, 46, 102, 105, 108, 108, 40, 48, // + 1)).fill(0 + 41, 46, 109, 97, 112, 40, 40, 95, 44, 32, 105, 41, // ).map((_, i) + 32, 61, 62, 32, 105, 41, 59, 32, 32, 47, 47, 32, // => i); // + 105, 110, 100, 105, 99, 101, 115, 10, 32, 32, 108, 101, // indices. le + 116, 32, 120, 116, 105, 32, 61, 32, 105, 32, 61, 62, // t xti = i => + 32, 119, 49, 32, 43, 32, 40, 119, 32, 45, 32, 119, // w1 + (w - w + 49, 32, 45, 32, 119, 50, 41, 32, 42, 32, 105, 32, // 1 - w2) * i + 47, 32, 120, 116, 105, 99, 107, 115, 59, 32, 32, 32, // / xticks; + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, // / + 47, 32, 105, 110, 100, 101, 120, 39, 115, 32, 88, 10, // / index's X. + 32, 32, 108, 101, 116, 32, 120, 116, 118, 32, 61, 32, // let xtv = + 105, 32, 61, 62, 32, 100, 97, 116, 101, 102, 109, 116, // i => datefmt + 40, 120, 109, 105, 110, 32, 43, 32, 40, 120, 109, 97, // (xmin + (xma + 120, 32, 45, 32, 120, 109, 105, 110, 41, 32, 42, 32, // x - xmin) * + 105, 32, 47, 32, 120, 116, 105, 99, 107, 115, 41, 59, // i / xticks); + 10, 32, 32, 108, 101, 116, 32, 120, 116, 108, 32, 61, // . let xtl = + 32, 120, 32, 61, 62, 32, 104, 116, 109, 108, 96, 60, // x => html`< + 112, 97, 116, 104, 32, 100, 61, 34, 77, 32, 36, 123, // path d="M ${ + 120, 125, 44, 36, 123, 104, 49, 125, 32, 76, 32, 36, // x},${h1} L $ + 123, 120, 125, 44, 36, 123, 104, 32, 45, 32, 104, 50, // {x},${h - h2 + 125, 34, 32, 99, 108, 97, 115, 115, 61, 34, 116, 105, // }" class="ti + 99, 107, 34, 47, 62, 96, 59, 10, 32, 32, 108, 101, // ck"/>`;. le + 116, 32, 120, 116, 116, 32, 61, 32, 40, 120, 44, 32, // t xtt = (x, + 118, 41, 32, 61, 62, 10, 32, 32, 32, 32, 32, 32, // v) =>. + 104, 116, 109, 108, 96, 60, 116, 101, 120, 116, 32, 120, // html` + 36, 123, 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, // ${v}` + 59, 10, 10, 32, 32, 47, 47, 32, 84, 114, 97, 110, // ;.. // Tran + 115, 102, 111, 114, 109, 32, 100, 97, 116, 97, 32, 112, // sform data p + 111, 105, 110, 116, 115, 32, 97, 114, 114, 97, 121, 32, // oints array + 105, 110, 116, 111, 32, 99, 111, 111, 114, 100, 105, 110, // into coordin + 97, 116, 101, 10, 32, 32, 108, 101, 116, 32, 100, 120, // ate. let dx + 32, 61, 32, 118, 32, 61, 62, 32, 119, 49, 32, 43, // = v => w1 + + 32, 40, 118, 32, 45, 32, 120, 109, 105, 110, 41, 32, // (v - xmin) + 47, 32, 40, 40, 120, 109, 97, 120, 32, 45, 32, 120, // / ((xmax - x + 109, 105, 110, 41, 32, 124, 124, 32, 49, 41, 32, 42, // min) || 1) * + 32, 40, 119, 32, 45, 32, 119, 49, 32, 45, 32, 119, // (w - w1 - w + 50, 41, 59, 10, 32, 32, 108, 101, 116, 32, 100, 121, // 2);. let dy + 32, 61, 32, 118, 32, 61, 62, 32, 104, 32, 45, 32, // = v => h - + 104, 50, 32, 45, 32, 40, 118, 32, 45, 32, 121, 109, // h2 - (v - ym + 105, 110, 41, 32, 47, 32, 40, 40, 121, 109, 97, 120, // in) / ((ymax + 32, 45, 32, 121, 109, 105, 110, 41, 32, 124, 124, 32, // - ymin) || + 49, 41, 32, 42, 32, 40, 104, 32, 45, 32, 104, 49, // 1) * (h - h1 + 32, 45, 32, 104, 50, 41, 59, 10, 32, 32, 108, 101, // - h2);. le + 116, 32, 100, 100, 32, 61, 32, 100, 97, 116, 97, 46, // t dd = data. + 109, 97, 112, 40, 112, 32, 61, 62, 32, 91, 77, 97, // map(p => [Ma + 116, 104, 46, 114, 111, 117, 110, 100, 40, 100, 120, 40, // th.round(dx( + 112, 91, 48, 93, 41, 41, 44, 32, 77, 97, 116, 104, // p[0])), Math + 46, 114, 111, 117, 110, 100, 40, 100, 121, 40, 112, 91, // .round(dy(p[ + 49, 93, 41, 41, 93, 41, 59, 10, 32, 32, 108, 101, // 1]))]);. le + 116, 32, 100, 100, 108, 32, 61, 32, 100, 100, 46, 108, // t ddl = dd.l + 101, 110, 103, 116, 104, 59, 10, 32, 32, 47, 47, 32, // ength;. // + 65, 110, 100, 32, 112, 108, 111, 116, 32, 116, 104, 101, // And plot the + 32, 100, 97, 116, 97, 32, 97, 115, 32, 60, 112, 97, // data as element. + 32, 32, 108, 101, 116, 32, 98, 101, 103, 105, 110, 48, // let begin0 + 32, 61, 32, 100, 100, 108, 32, 63, 32, 96, 77, 32, // = ddl ? `M + 36, 123, 100, 100, 91, 48, 93, 91, 48, 93, 125, 44, // ${dd[0][0]}, + 36, 123, 100, 100, 91, 48, 93, 91, 49, 93, 125, 96, // ${dd[0][1]}` + 32, 58, 32, 96, 77, 32, 48, 44, 48, 96, 59, 10, // : `M 0,0`;. + 32, 32, 108, 101, 116, 32, 98, 101, 103, 105, 110, 32, // let begin + 61, 32, 96, 77, 32, 36, 123, 119, 49, 125, 44, 36, // = `M ${w1},$ + 123, 104, 32, 45, 32, 104, 50, 125, 96, 59, 32, 32, // {h - h2}`; + 47, 47, 32, 73, 110, 105, 116, 105, 97, 108, 32, 112, // // Initial p + 111, 105, 110, 116, 10, 32, 32, 108, 101, 116, 32, 101, // oint. let e + 110, 100, 32, 61, 32, 100, 100, 108, 32, 63, 32, 96, // nd = ddl ? ` + 76, 32, 36, 123, 100, 100, 91, 100, 100, 108, 32, 45, // L ${dd[ddl - + 32, 49, 93, 91, 48, 93, 125, 44, 36, 123, 104, 32, // 1][0]},${h + 45, 32, 104, 50, 125, 96, 32, 58, 32, 96, 76, 32, // - h2}` : `L + 36, 123, 119, 49, 125, 44, 36, 123, 104, 32, 45, 32, // ${w1},${h - + 104, 50, 125, 96, 59, 10, 32, 32, 108, 101, 116, 32, // h2}`;. let + 115, 101, 114, 105, 101, 115, 32, 61, 32, 100, 100, 108, // series = ddl + 32, 63, 32, 100, 100, 46, 109, 97, 112, 40, 112, 32, // ? dd.map(p + 61, 62, 32, 96, 76, 32, 36, 123, 112, 91, 48, 93, // => `L ${p[0] + 125, 32, 36, 123, 112, 91, 49, 93, 125, 96, 41, 32, // } ${p[1]}`) + 58, 32, 91, 93, 59, 10, 10, 32, 32, 114, 101, 116, // : [];.. ret + 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 60, 115, // urn html`.. . + 32, 36, 123, 121, 116, 97, 46, 109, 97, 112, 40, 105, // ${yta.map(i + 32, 61, 62, 32, 121, 116, 108, 40, 121, 116, 105, 40, // => ytl(yti( + 105, 41, 41, 41, 125, 10, 32, 32, 36, 123, 121, 116, // i)))}. ${yt + 97, 46, 109, 97, 112, 40, 105, 32, 61, 62, 32, 121, // a.map(i => y + 116, 116, 40, 121, 116, 105, 40, 105, 41, 44, 32, 121, // tt(yti(i), y + 116, 118, 40, 105, 41, 41, 41, 125, 10, 32, 32, 36, // tv(i)))}. $ + 123, 120, 116, 97, 46, 109, 97, 112, 40, 105, 32, 61, // {xta.map(i = + 62, 32, 120, 116, 108, 40, 120, 116, 105, 40, 105, 41, // > xtl(xti(i) + 41, 41, 125, 10, 32, 32, 36, 123, 100, 97, 116, 97, // ))}. ${data + 46, 108, 101, 110, 103, 116, 104, 32, 63, 32, 120, 116, // .length ? xt + 97, 46, 109, 97, 112, 40, 105, 32, 61, 62, 32, 120, // a.map(i => x + 116, 116, 40, 120, 116, 105, 40, 105, 41, 44, 32, 120, // tt(xti(i), x + 116, 118, 40, 105, 41, 41, 41, 32, 58, 32, 39, 39, // tv(i))) : '' + 125, 10, 32, 32, 60, 112, 97, 116, 104, 32, 100, 61, // }. . + 60, 112, 97, 116, 104, 32, 100, 61, 34, 36, 123, 98, // .`;.};... + 99, 111, 110, 115, 116, 32, 67, 104, 97, 114, 116, 32, // const Chart + 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, // = function(p + 114, 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, // rops) {. co + 110, 115, 116, 32, 91, 100, 97, 116, 97, 44, 32, 115, // nst [data, s + 101, 116, 68, 97, 116, 97, 93, 32, 61, 32, 117, 115, // etData] = us + 101, 83, 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, // eState([]);. + 32, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 40, // useEffect( + 40, 41, 32, 61, 62, 32, 123, 10, 32, 32, 32, 32, // () => {. + 99, 111, 110, 115, 116, 32, 105, 100, 32, 61, 32, 80, // const id = P + 117, 98, 83, 117, 98, 46, 115, 117, 98, 115, 99, 114, // ubSub.subscr + 105, 98, 101, 40, 102, 117, 110, 99, 116, 105, 111, 110, // ibe(function + 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 32, 32, // (msg) {. + 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, 110, 97, // if (msg.na + 109, 101, 32, 33, 61, 32, 39, 109, 101, 116, 114, 105, // me != 'metri + 99, 115, 39, 41, 32, 114, 101, 116, 117, 114, 110, 59, // cs') return; + 10, 32, 32, 32, 32, 32, 32, 115, 101, 116, 68, 97, // . setDa + 116, 97, 40, 120, 32, 61, 62, 32, 120, 46, 99, 111, // ta(x => x.co + 110, 99, 97, 116, 40, 91, 109, 115, 103, 46, 100, 97, // ncat([msg.da + 116, 97, 93, 41, 46, 115, 112, 108, 105, 99, 101, 40, // ta]).splice( + 45, 77, 97, 120, 77, 101, 116, 114, 105, 99, 115, 68, // -MaxMetricsD + 97, 116, 97, 80, 111, 105, 110, 116, 115, 41, 41, 59, // ataPoints)); + 10, 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, // . });. + 32, 114, 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, // return PubS + 117, 98, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, // ub.unsubscri + 98, 101, 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, // be(id);. }, + 32, 91, 93, 41, 59, 10, 10, 32, 32, 108, 101, 116, // []);.. let + 32, 120, 109, 97, 120, 32, 61, 32, 48, 44, 32, 109, // xmax = 0, m + 105, 115, 115, 105, 110, 103, 32, 61, 32, 77, 97, 120, // issing = Max + 77, 101, 116, 114, 105, 99, 115, 68, 97, 116, 97, 80, // MetricsDataP + 111, 105, 110, 116, 115, 32, 45, 32, 100, 97, 116, 97, // oints - data + 46, 108, 101, 110, 103, 116, 104, 59, 10, 32, 32, 105, // .length;. i + 102, 32, 40, 109, 105, 115, 115, 105, 110, 103, 32, 62, // f (missing > + 32, 48, 41, 32, 120, 109, 97, 120, 32, 61, 32, 77, // 0) xmax = M + 97, 116, 104, 46, 114, 111, 117, 110, 100, 40, 68, 97, // ath.round(Da + 116, 101, 46, 110, 111, 119, 40, 41, 32, 47, 32, 49, // te.now() / 1 + 48, 48, 48, 41, 32, 43, 32, 109, 105, 115, 115, 105, // 000) + missi + 110, 103, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, // ng;. return + 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, // html`.
.

Data C + 104, 97, 114, 116, 60, 47, 104, 51, 62, 10, 32, 32, // hart

. + 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, //
. < + 36, 123, 83, 86, 71, 125, 32, 104, 101, 105, 103, 104, // ${SVG} heigh + 116, 61, 50, 52, 48, 32, 119, 105, 100, 116, 104, 61, // t=240 width= + 54, 48, 48, 32, 121, 109, 105, 110, 61, 48, 32, 121, // 600 ymin=0 y + 109, 97, 120, 61, 50, 48, 32, 120, 109, 97, 120, 61, // max=20 xmax= + 36, 123, 120, 109, 97, 120, 125, 32, 100, 97, 116, 97, // ${xmax} data + 61, 36, 123, 100, 97, 116, 97, 125, 32, 47, 62, 10, // =${data} />. + 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. < + 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 109, // div class="m + 115, 103, 34, 62, 10, 32, 32, 32, 32, 84, 104, 105, // sg">. Thi + 115, 32, 99, 104, 97, 114, 116, 32, 112, 108, 111, 116, // s chart plot + 115, 32, 108, 105, 118, 101, 32, 115, 101, 110, 115, 111, // s live senso + 114, 32, 100, 97, 116, 97, 44, 32, 115, 101, 110, 116, // r data, sent + 32, 98, 121, 32, 116, 104, 101, 32, 100, 101, 118, 105, // by the devi + 99, 101, 32, 118, 105, 97, 32, 47, 97, 112, 105, 47, // ce via /api/ + 119, 97, 116, 99, 104, 46, 10, 32, 32, 60, 47, 100, // watch.. .
`; + 10, 125, 59, 10, 10, 99, 111, 110, 115, 116, 32, 65, // .};..const A + 112, 112, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // pp = functio + 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, // n(props) {. + 32, 99, 111, 110, 115, 116, 32, 91, 117, 115, 101, 114, // const [user + 44, 32, 115, 101, 116, 85, 115, 101, 114, 93, 32, 61, // , setUser] = + 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, // useState('' + 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 91, // );. const [ + 99, 111, 110, 102, 105, 103, 44, 32, 115, 101, 116, 67, // config, setC + 111, 110, 102, 105, 103, 93, 32, 61, 32, 117, 115, 101, // onfig] = use + 83, 116, 97, 116, 101, 40, 123, 125, 41, 59, 10, 10, // State({});.. + 32, 32, 99, 111, 110, 115, 116, 32, 103, 101, 116, 99, // const getc + 111, 110, 102, 105, 103, 32, 61, 32, 40, 41, 32, 61, // onfig = () = + 62, 10, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99, // >. fetc + 104, 40, 39, 47, 97, 112, 105, 47, 99, 111, 110, 102, // h('/api/conf + 105, 103, 47, 103, 101, 116, 39, 44, 32, 123, 104, 101, // ig/get', {he + 97, 100, 101, 114, 115, 58, 32, 123, 65, 117, 116, 104, // aders: {Auth + 111, 114, 105, 122, 97, 116, 105, 111, 110, 58, 32, 39, // orization: ' + 39, 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, // '}}). + 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, // .then(r = + 62, 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 10, // > r.json()). + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, // .t + 104, 101, 110, 40, 114, 32, 61, 62, 32, 115, 101, 116, // hen(r => set + 67, 111, 110, 102, 105, 103, 40, 114, 41, 41, 10, 32, // Config(r)). + 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 99, 97, // .ca + 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, 99, // tch(err => c + 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 101, // onsole.log(e + 114, 114, 41, 41, 59, 10, 10, 32, 32, 47, 47, 32, // rr));.. // + 87, 97, 116, 99, 104, 32, 102, 111, 114, 32, 110, 111, // Watch for no + 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 46, // tifications. + 32, 65, 115, 32, 115, 111, 111, 110, 32, 97, 115, 32, // As soon as + 97, 32, 110, 111, 116, 105, 102, 105, 99, 97, 116, 105, // a notificati + 111, 110, 32, 97, 114, 114, 105, 118, 101, 115, 44, 32, // on arrives, + 112, 97, 115, 115, 32, 105, 116, 32, 111, 110, 10, 32, // pass it on. + 32, 47, 47, 32, 116, 111, 32, 97, 108, 108, 32, 115, // // to all s + 117, 98, 115, 99, 114, 105, 98, 101, 100, 32, 99, 111, // ubscribed co + 109, 112, 111, 110, 101, 110, 116, 115, 10, 32, 32, 99, // mponents. c + 111, 110, 115, 116, 32, 119, 97, 116, 99, 104, 32, 61, // onst watch = + 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, // function() + 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 108, 32, // {. var l + 61, 32, 119, 105, 110, 100, 111, 119, 46, 108, 111, 99, // = window.loc + 97, 116, 105, 111, 110, 44, 32, 112, 114, 111, 116, 111, // ation, proto + 32, 61, 32, 108, 46, 112, 114, 111, 116, 111, 99, 111, // = l.protoco + 108, 46, 114, 101, 112, 108, 97, 99, 101, 40, 39, 104, // l.replace('h + 116, 116, 112, 39, 44, 32, 39, 119, 115, 39, 41, 59, // ttp', 'ws'); + 10, 32, 32, 32, 32, 118, 97, 114, 32, 116, 105, 100, // . var tid + 44, 32, 119, 115, 85, 82, 73, 32, 61, 32, 112, 114, // , wsURI = pr + 111, 116, 111, 32, 43, 32, 39, 47, 47, 39, 32, 43, // oto + '//' + + 32, 108, 46, 104, 111, 115, 116, 32, 43, 32, 39, 47, // l.host + '/ + 97, 112, 105, 47, 119, 97, 116, 99, 104, 39, 10, 32, // api/watch'. + 32, 32, 32, 118, 97, 114, 32, 114, 101, 99, 111, 110, // var recon + 110, 101, 99, 116, 32, 61, 32, 102, 117, 110, 99, 116, // nect = funct + 105, 111, 110, 40, 41, 32, 123, 10, 32, 32, 32, 32, // ion() {. + 32, 32, 118, 97, 114, 32, 119, 115, 32, 61, 32, 110, // var ws = n + 101, 119, 32, 87, 101, 98, 83, 111, 99, 107, 101, 116, // ew WebSocket + 40, 119, 115, 85, 82, 73, 41, 59, 10, 32, 32, 32, // (wsURI);. + 32, 32, 32, 119, 115, 46, 111, 110, 111, 112, 101, 110, // ws.onopen + 32, 61, 32, 40, 41, 32, 61, 62, 32, 99, 111, 110, // = () => con + 115, 111, 108, 101, 46, 108, 111, 103, 40, 39, 119, 115, // sole.log('ws + 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, 41, // connected') + 59, 10, 32, 32, 32, 32, 32, 32, 119, 115, 46, 111, // ;. ws.o + 110, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 102, // nmessage = f + 117, 110, 99, 116, 105, 111, 110, 40, 101, 118, 41, 32, // unction(ev) + 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 116, 114, // {. tr + 121, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, // y {. + 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, // var msg = + 74, 83, 79, 78, 46, 112, 97, 114, 115, 101, 40, 101, // JSON.parse(e + 118, 46, 100, 97, 116, 97, 41, 59, 10, 32, 32, 32, // v.data);. + 32, 32, 32, 32, 32, 32, 32, 80, 117, 98, 83, 117, // PubSu + 98, 46, 112, 117, 98, 108, 105, 115, 104, 40, 109, 115, // b.publish(ms + 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, // g);. + 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, 110, 97, // if (msg.na + 109, 101, 32, 33, 61, 32, 39, 109, 101, 116, 114, 105, // me != 'metri + 99, 115, 39, 41, 32, 99, 111, 110, 115, 111, 108, 101, // cs') console + 46, 108, 111, 103, 40, 39, 119, 115, 45, 62, 39, 44, // .log('ws->', + 32, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, // msg);. + 32, 32, 32, 125, 32, 99, 97, 116, 99, 104, 32, 40, // } catch ( + 101, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, // e) {. + 32, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // console.l + 111, 103, 40, 39, 73, 110, 118, 97, 108, 105, 100, 32, // og('Invalid + 119, 115, 32, 102, 114, 97, 109, 101, 58, 39, 44, 32, // ws frame:', + 101, 118, 46, 100, 97, 116, 97, 41, 59, 32, 32, 47, // ev.data); / + 47, 32, 101, 115, 108, 105, 110, 116, 45, 100, 105, 115, // / eslint-dis + 97, 98, 108, 101, 45, 108, 105, 110, 101, 10, 32, 32, // able-line. + 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, // }. + 32, 32, 125, 59, 10, 32, 32, 32, 32, 32, 32, 119, // };. w + 115, 46, 111, 110, 99, 108, 111, 115, 101, 32, 61, 32, // s.onclose = + 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, // function() { + 10, 32, 32, 32, 32, 32, 32, 32, 32, 99, 108, 101, // . cle + 97, 114, 84, 105, 109, 101, 111, 117, 116, 40, 116, 105, // arTimeout(ti + 100, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, // d);. + 116, 105, 100, 32, 61, 32, 115, 101, 116, 84, 105, 109, // tid = setTim + 101, 111, 117, 116, 40, 114, 101, 99, 111, 110, 110, 101, // eout(reconne + 99, 116, 44, 32, 49, 48, 48, 48, 41, 59, 10, 32, // ct, 1000);. + 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 115, 111, // conso + 108, 101, 46, 108, 111, 103, 40, 39, 119, 115, 32, 100, // le.log('ws d + 105, 115, 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, // isconnected' + 41, 59, 10, 32, 32, 32, 32, 32, 32, 125, 59, 10, // );. };. + 32, 32, 32, 32, 125, 59, 10, 32, 32, 32, 32, 114, // };. r + 101, 99, 111, 110, 110, 101, 99, 116, 40, 41, 59, 10, // econnect();. + 32, 32, 125, 59, 10, 10, 32, 32, 99, 111, 110, 115, // };.. cons + 116, 32, 108, 111, 103, 105, 110, 32, 61, 32, 102, 117, // t login = fu + 110, 99, 116, 105, 111, 110, 40, 117, 41, 32, 123, 10, // nction(u) {. + 32, 32, 32, 32, 100, 111, 99, 117, 109, 101, 110, 116, // document + 46, 99, 111, 111, 107, 105, 101, 32, 61, 32, 96, 97, // .cookie = `a + 99, 99, 101, 115, 115, 95, 116, 111, 107, 101, 110, 61, // ccess_token= + 36, 123, 117, 46, 116, 111, 107, 101, 110, 125, 59, 112, // ${u.token};p + 97, 116, 104, 61, 47, 59, 109, 97, 120, 45, 97, 103, // ath=/;max-ag + 101, 61, 51, 54, 48, 48, 96, 59, 10, 32, 32, 32, // e=3600`;. + 32, 115, 101, 116, 85, 115, 101, 114, 40, 117, 46, 117, // setUser(u.u + 115, 101, 114, 41, 59, 10, 32, 32, 32, 32, 119, 97, // ser);. wa + 116, 99, 104, 40, 41, 59, 10, 32, 32, 32, 32, 114, // tch();. r + 101, 116, 117, 114, 110, 32, 103, 101, 116, 99, 111, 110, // eturn getcon + 102, 105, 103, 40, 41, 59, 10, 32, 32, 125, 59, 10, // fig();. };. + 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, 111, 103, // . const log + 111, 117, 116, 32, 61, 32, 101, 118, 32, 61, 62, 32, // out = ev => + 123, 10, 32, 32, 32, 32, 100, 111, 99, 117, 109, 101, // {. docume + 110, 116, 46, 99, 111, 111, 107, 105, 101, 32, 61, 32, // nt.cookie = + 96, 97, 99, 99, 101, 115, 115, 95, 116, 111, 107, 101, // `access_toke + 110, 61, 59, 112, 97, 116, 104, 61, 47, 59, 109, 97, // n=;path=/;ma + 120, 45, 97, 103, 101, 61, 48, 96, 59, 10, 32, 32, // x-age=0`;. + 32, 32, 115, 101, 116, 85, 115, 101, 114, 40, 39, 39, // setUser('' + 41, 59, 10, 32, 32, 125, 59, 10, 10, 32, 32, 117, // );. };.. u + 115, 101, 69, 102, 102, 101, 99, 116, 40, 40, 41, 32, // seEffect(() + 61, 62, 32, 123, 10, 32, 32, 32, 32, 47, 47, 32, // => {. // + 67, 97, 108, 108, 101, 100, 32, 111, 110, 99, 101, 32, // Called once + 97, 116, 32, 105, 110, 105, 116, 32, 116, 105, 109, 101, // at init time + 10, 32, 32, 32, 32, 80, 117, 98, 83, 117, 98, 46, // . PubSub. + 115, 117, 98, 115, 99, 114, 105, 98, 101, 40, 109, 115, // subscribe(ms + 103, 32, 61, 62, 32, 109, 115, 103, 46, 110, 97, 109, // g => msg.nam + 101, 32, 61, 61, 32, 39, 99, 111, 110, 102, 105, 103, // e == 'config + 39, 32, 38, 38, 32, 103, 101, 116, 99, 111, 110, 102, // ' && getconf + 105, 103, 40, 41, 41, 59, 10, 32, 32, 32, 32, 102, // ig());. f + 101, 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, 108, // etch('/api/l + 111, 103, 105, 110, 39, 44, 32, 123, 104, 101, 97, 100, // ogin', {head + 101, 114, 115, 58, 32, 123, 65, 117, 116, 104, 111, 114, // ers: {Author + 105, 122, 97, 116, 105, 111, 110, 58, 32, 39, 39, 125, // ization: ''} + 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, // }). . + 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, 46, // then(r => r. + 106, 115, 111, 110, 40, 41, 41, 10, 32, 32, 32, 32, // json()). + 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, // .then(r + 61, 62, 32, 108, 111, 103, 105, 110, 40, 114, 41, 41, // => login(r)) + 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, 99, 97, // . .ca + 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, 115, // tch(err => s + 101, 116, 85, 115, 101, 114, 40, 39, 39, 41, 41, 59, // etUser('')); + 10, 32, 32, 125, 44, 32, 91, 93, 41, 59, 10, 10, // . }, []);.. + 32, 32, 105, 102, 32, 40, 33, 117, 115, 101, 114, 41, // if (!user) + 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, 108, // return html + 96, 60, 36, 123, 76, 111, 103, 105, 110, 125, 32, 108, // `<${Login} l + 111, 103, 105, 110, 61, 36, 123, 108, 111, 103, 105, 110, // ogin=${login + 125, 32, 47, 62, 96, 59, 10, 10, 32, 32, 114, 101, // } />`;.. re + 116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 60, // turn html`.< + 36, 123, 78, 97, 118, 125, 32, 117, 115, 101, 114, 61, // ${Nav} user= + 36, 123, 117, 115, 101, 114, 125, 32, 108, 111, 103, 111, // ${user} logo + 117, 116, 61, 36, 123, 108, 111, 103, 111, 117, 116, 125, // ut=${logout} + 32, 47, 62, 10, 60, 100, 105, 118, 32, 99, 108, 97, // />.
.
. + 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, //
<${Hero} + 47, 62, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, // />
. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
+ 60, 36, 123, 67, 104, 97, 114, 116, 125, 32, 47, 62, // <${Chart} /> + 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, //
. < + 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 99, // div class="c + 111, 108, 32, 99, 111, 108, 45, 54, 34, 62, 10, 32, // ol col-6">. + 32, 32, 32, 32, 32, 36, 123, 117, 115, 101, 114, 32, // ${user + 61, 61, 32, 39, 97, 100, 109, 105, 110, 39, 32, 38, // == 'admin' & + 38, 32, 104, 40, 67, 111, 110, 102, 105, 103, 117, 114, // & h(Configur + 97, 116, 105, 111, 110, 44, 32, 123, 99, 111, 110, 102, // ation, {conf + 105, 103, 125, 41, 125, 10, 32, 32, 32, 32, 60, 47, // ig})}. . <${M + 101, 115, 115, 97, 103, 101, 115, 125, 32, 99, 111, 110, // essages} con + 102, 105, 103, 61, 36, 123, 99, 111, 110, 102, 105, 103, // fig=${config + 125, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, 32, // } />
. + 32, 60, 47, 100, 105, 118, 62, 10, 60, 47, 100, 105, //
.`;.};..win + 100, 111, 119, 46, 111, 110, 108, 111, 97, 100, 32, 61, // dow.onload = + 32, 40, 41, 32, 61, 62, 32, 114, 101, 110, 100, 101, // () => rende + 114, 40, 104, 40, 65, 112, 112, 41, 44, 32, 100, 111, // r(h(App), do + 99, 117, 109, 101, 110, 116, 46, 98, 111, 100, 121, 41, // cument.body) + 59, 10, 0 // ;. }; -static const unsigned char v5[] = { +static const unsigned char v4[] = { 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, // .PNG........ 73, 72, 68, 82, 0, 0, 0, 128, 0, 0, 0, 128, // IHDR........ 8, 6, 0, 0, 0, 195, 62, 97, 203, 0, 0, 0, // ......>a.... @@ -2788,6 +3770,195 @@ static const unsigned char v5[] = { 126, 121, 49, 188, 0, 0, 0, 0, 73, 69, 78, 68, // ~y1.....IEND 174, 66, 96, 130, 0 // .B`. }; +static const unsigned char v5[] = { + 42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi + 110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b + 111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html, + 98, 111, 100, 121, 32, 123, 32, 109, 97, 114, 103, 105, // body { margi + 110, 58, 32, 48, 59, 32, 112, 97, 100, 100, 105, 110, // n: 0; paddin + 103, 58, 32, 48, 59, 32, 104, 101, 105, 103, 104, 116, // g: 0; height + 58, 32, 49, 48, 48, 37, 59, 32, 102, 111, 110, 116, // : 100%; font + 58, 32, 49, 54, 112, 120, 32, 115, 97, 110, 115, 45, // : 16px sans- + 115, 101, 114, 105, 102, 59, 32, 125, 10, 115, 101, 108, // serif; }.sel + 101, 99, 116, 44, 32, 105, 110, 112, 117, 116, 44, 32, // ect, input, + 108, 97, 98, 101, 108, 58, 58, 98, 101, 102, 111, 114, // label::befor + 101, 44, 32, 116, 101, 120, 116, 97, 114, 101, 97, 32, // e, textarea + 123, 32, 111, 117, 116, 108, 105, 110, 101, 58, 32, 110, // { outline: n + 111, 110, 101, 59, 32, 98, 111, 120, 45, 115, 104, 97, // one; box-sha + 100, 111, 119, 58, 110, 111, 110, 101, 32, 33, 105, 109, // dow:none !im + 112, 111, 114, 116, 97, 110, 116, 59, 32, 98, 111, 114, // portant; bor + 100, 101, 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, // der: 1px sol + 105, 100, 32, 35, 99, 99, 99, 32, 33, 105, 109, 112, // id #ccc !imp + 111, 114, 116, 97, 110, 116, 59, 32, 125, 10, 99, 111, // ortant; }.co + 100, 101, 44, 32, 112, 114, 101, 32, 123, 32, 99, 111, // de, pre { co + 108, 111, 114, 58, 32, 35, 51, 55, 51, 59, 32, 102, // lor: #373; f + 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 32, // ont-family: + 109, 111, 110, 111, 115, 112, 97, 99, 101, 59, 32, 102, // monospace; f + 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, // ont-weight: + 98, 111, 108, 100, 101, 114, 59, 32, 102, 111, 110, 116, // bolder; font + 45, 115, 105, 122, 101, 58, 32, 115, 109, 97, 108, 108, // -size: small + 101, 114, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // er; backgrou + 110, 100, 58, 32, 35, 100, 100, 100, 59, 32, 112, 97, // nd: #ddd; pa + 100, 100, 105, 110, 103, 58, 32, 48, 46, 49, 101, 109, // dding: 0.1em + 32, 48, 46, 51, 101, 109, 59, 32, 98, 111, 114, 100, // 0.3em; bord + 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 + 46, 50, 101, 109, 59, 32, 125, 10, 116, 101, 120, 116, // .2em; }.text + 97, 114, 101, 97, 44, 32, 105, 110, 112, 117, 116, 44, // area, input, + 32, 46, 97, 100, 100, 111, 110, 32, 123, 32, 102, 111, // .addon { fo + 110, 116, 45, 115, 105, 122, 101, 58, 32, 49, 53, 112, // nt-size: 15p + 120, 59, 32, 98, 111, 114, 100, 101, 114, 58, 32, 49, // x; border: 1 + 112, 120, 32, 115, 111, 108, 105, 100, 32, 35, 99, 99, // px solid #cc + 99, 59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // c; padding: + 48, 46, 53, 101, 109, 59, 32, 125, 10, 97, 44, 32, // 0.5em; }.a, + 97, 58, 118, 105, 115, 105, 116, 101, 100, 44, 32, 97, // a:visited, a + 58, 97, 99, 116, 105, 118, 101, 32, 123, 32, 99, 111, // :active { co + 108, 111, 114, 58, 32, 35, 53, 53, 102, 59, 32, 125, // lor: #55f; } + 10, 46, 97, 100, 100, 111, 110, 32, 123, 32, 98, 97, // ..addon { ba + 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, 101, // ckground: #e + 101, 101, 59, 32, 32, 109, 105, 110, 45, 119, 105, 100, // ee; min-wid + 116, 104, 58, 32, 57, 101, 109, 59, 125, 10, 46, 98, // th: 9em;}..b + 116, 110, 32, 123, 10, 32, 32, 98, 97, 99, 107, 103, // tn {. backg + 114, 111, 117, 110, 100, 58, 32, 35, 99, 99, 99, 59, // round: #ccc; + 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi + 117, 115, 58, 32, 48, 46, 51, 101, 109, 59, 32, 98, // us: 0.3em; b + 111, 114, 100, 101, 114, 58, 32, 48, 59, 32, 99, 111, // order: 0; co + 108, 111, 114, 58, 32, 35, 102, 102, 102, 59, 32, 99, // lor: #fff; c + 117, 114, 115, 111, 114, 58, 32, 112, 111, 105, 110, 116, // ursor: point + 101, 114, 59, 10, 32, 32, 100, 105, 115, 112, 108, 97, // er;. displa + 121, 58, 32, 105, 110, 108, 105, 110, 101, 45, 98, 108, // y: inline-bl + 111, 99, 107, 59, 32, 112, 97, 100, 100, 105, 110, 103, // ock; padding + 58, 32, 48, 46, 54, 101, 109, 32, 50, 101, 109, 59, // : 0.6em 2em; + 32, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, // font-weight + 58, 32, 98, 111, 108, 100, 101, 114, 59, 10, 125, 10, // : bolder;.}. + 46, 98, 116, 110, 91, 100, 105, 115, 97, 98, 108, 101, // .btn[disable + 100, 93, 32, 123, 32, 111, 112, 97, 99, 105, 116, 121, // d] { opacity + 58, 32, 48, 46, 53, 59, 32, 99, 117, 114, 115, 111, // : 0.5; curso + 114, 58, 32, 97, 117, 116, 111, 59, 125, 10, 46, 115, // r: auto;}..s + 109, 111, 111, 116, 104, 32, 123, 32, 116, 114, 97, 110, // mooth { tran + 115, 105, 116, 105, 111, 110, 58, 32, 97, 108, 108, 32, // sition: all + 46, 50, 115, 59, 32, 125, 10, 46, 99, 111, 110, 116, // .2s; }..cont + 97, 105, 110, 101, 114, 32, 123, 32, 109, 97, 114, 103, // ainer { marg + 105, 110, 58, 32, 48, 32, 50, 48, 112, 120, 59, 32, // in: 0 20px; + 119, 105, 100, 116, 104, 58, 32, 97, 117, 116, 111, 59, // width: auto; + 32, 125, 10, 46, 100, 45, 102, 108, 101, 120, 32, 123, // }..d-flex { + 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, 102, 108, // display: fl + 101, 120, 59, 32, 125, 10, 46, 100, 45, 110, 111, 110, // ex; }..d-non + 101, 32, 123, 32, 100, 105, 115, 112, 108, 97, 121, 58, // e { display: + 32, 110, 111, 110, 101, 59, 32, 125, 10, 46, 98, 111, // none; }..bo + 114, 100, 101, 114, 32, 123, 32, 98, 111, 114, 100, 101, // rder { borde + 114, 58, 32, 49, 112, 120, 32, 115, 111, 108, 105, 100, // r: 1px solid + 32, 35, 100, 100, 100, 59, 32, 125, 10, 46, 114, 111, // #ddd; }..ro + 117, 110, 100, 101, 100, 32, 123, 32, 98, 111, 114, 100, // unded { bord + 101, 114, 45, 114, 97, 100, 105, 117, 115, 58, 32, 48, // er-radius: 0 + 46, 53, 101, 109, 59, 32, 125, 10, 46, 110, 111, 119, // .5em; }..now + 114, 97, 112, 32, 123, 32, 119, 104, 105, 116, 101, 45, // rap { white- + 115, 112, 97, 99, 101, 58, 32, 110, 111, 119, 114, 97, // space: nowra + 112, 59, 32, 125, 10, 46, 109, 115, 103, 32, 123, 32, // p; }..msg { + 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, // background: + 35, 100, 101, 102, 59, 32, 98, 111, 114, 100, 101, 114, // #def; border + 45, 108, 101, 102, 116, 58, 32, 53, 112, 120, 32, 115, // -left: 5px s + 111, 108, 105, 100, 32, 35, 53, 57, 100, 59, 32, 112, // olid #59d; p + 97, 100, 100, 105, 110, 103, 58, 32, 48, 46, 53, 101, // adding: 0.5e + 109, 59, 32, 102, 111, 110, 116, 45, 115, 105, 122, 101, // m; font-size + 58, 32, 57, 48, 37, 59, 32, 109, 97, 114, 103, 105, // : 90%; margi + 110, 58, 32, 49, 101, 109, 32, 48, 59, 32, 125, 10, // n: 1em 0; }. + 46, 115, 101, 99, 116, 105, 111, 110, 32, 123, 32, 109, // .section { m + 97, 114, 103, 105, 110, 58, 32, 48, 32, 49, 101, 109, // argin: 0 1em + 59, 32, 125, 10, 46, 116, 111, 112, 105, 99, 44, 32, // ; }..topic, + 46, 100, 97, 116, 97, 44, 32, 46, 113, 111, 115, 32, // .data, .qos + 123, 32, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, // { padding: + 48, 46, 50, 101, 109, 32, 48, 46, 53, 101, 109, 59, // 0.2em 0.5em; + 32, 98, 111, 114, 100, 101, 114, 45, 114, 97, 100, 105, // border-radi + 117, 115, 58, 32, 48, 46, 52, 101, 109, 59, 32, 109, // us: 0.4em; m + 97, 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, // argin-right: + 32, 48, 46, 53, 101, 109, 59, 32, 32, 125, 10, 46, // 0.5em; }.. + 113, 111, 115, 32, 123, 32, 98, 97, 99, 107, 103, 114, // qos { backgr + 111, 117, 110, 100, 58, 32, 35, 101, 102, 97, 59, 32, // ound: #efa; + 125, 10, 46, 116, 111, 112, 105, 99, 32, 123, 32, 98, // }..topic { b + 97, 99, 107, 103, 114, 111, 117, 110, 100, 58, 32, 35, // ackground: # + 102, 101, 97, 59, 32, 125, 10, 46, 100, 97, 116, 97, // fea; }..data + 32, 123, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, // { backgroun + 100, 58, 32, 35, 97, 101, 102, 59, 32, 125, 10, 10, // d: #aef; }.. + 47, 42, 32, 71, 114, 105, 100, 32, 42, 47, 10, 46, // /* Grid */.. + 114, 111, 119, 32, 123, 32, 100, 105, 115, 112, 108, 97, // row { displa + 121, 58, 32, 102, 108, 101, 120, 59, 32, 102, 108, 101, // y: flex; fle + 120, 45, 119, 114, 97, 112, 58, 32, 119, 114, 97, 112, // x-wrap: wrap + 59, 32, 125, 10, 46, 99, 111, 108, 32, 123, 32, 109, // ; }..col { m + 97, 114, 103, 105, 110, 58, 32, 48, 59, 32, 112, 97, // argin: 0; pa + 100, 100, 105, 110, 103, 58, 32, 48, 59, 32, 111, 118, // dding: 0; ov + 101, 114, 102, 108, 111, 119, 58, 32, 97, 117, 116, 111, // erflow: auto + 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, 50, 32, // ; }..col-12 + 123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100 + 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, 49, // %; }..col-11 + 32, 123, 32, 119, 105, 100, 116, 104, 58, 32, 57, 49, // { width: 91 + 46, 54, 54, 37, 59, 32, 125, 10, 46, 99, 111, 108, // .66%; }..col + 45, 49, 48, 32, 123, 32, 119, 105, 100, 116, 104, 58, // -10 { width: + 32, 56, 51, 46, 51, 51, 37, 59, 32, 125, 10, 46, // 83.33%; }.. + 99, 111, 108, 45, 57, 32, 123, 32, 119, 105, 100, 116, // col-9 { widt + 104, 58, 32, 55, 53, 37, 59, 32, 125, 10, 46, 99, // h: 75%; }..c + 111, 108, 45, 56, 32, 123, 32, 119, 105, 100, 116, 104, // ol-8 { width + 58, 32, 54, 54, 46, 54, 54, 37, 59, 32, 125, 10, // : 66.66%; }. + 46, 99, 111, 108, 45, 55, 32, 123, 32, 119, 105, 100, // .col-7 { wid + 116, 104, 58, 32, 53, 56, 46, 51, 51, 37, 59, 32, // th: 58.33%; + 125, 10, 46, 99, 111, 108, 45, 54, 32, 123, 32, 119, // }..col-6 { w + 105, 100, 116, 104, 58, 32, 53, 48, 37, 59, 32, 125, // idth: 50%; } + 10, 46, 99, 111, 108, 45, 53, 32, 123, 32, 119, 105, // ..col-5 { wi + 100, 116, 104, 58, 32, 52, 49, 46, 54, 54, 37, 59, // dth: 41.66%; + 32, 125, 10, 46, 99, 111, 108, 45, 52, 32, 123, 32, // }..col-4 { + 119, 105, 100, 116, 104, 58, 32, 51, 51, 46, 51, 51, // width: 33.33 + 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 51, 32, // %; }..col-3 + 123, 32, 119, 105, 100, 116, 104, 58, 32, 50, 53, 37, // { width: 25% + 59, 32, 125, 10, 46, 99, 111, 108, 45, 50, 32, 123, // ; }..col-2 { + 32, 119, 105, 100, 116, 104, 58, 32, 49, 54, 46, 54, // width: 16.6 + 54, 37, 59, 32, 125, 10, 46, 99, 111, 108, 45, 49, // 6%; }..col-1 + 32, 123, 32, 119, 105, 100, 116, 104, 58, 32, 56, 46, // { width: 8. + 51, 51, 37, 59, 32, 125, 10, 64, 109, 101, 100, 105, // 33%; }.@medi + 97, 32, 40, 109, 105, 110, 45, 119, 105, 100, 116, 104, // a (min-width + 58, 32, 49, 51, 49, 48, 112, 120, 41, 32, 123, 32, // : 1310px) { + 46, 99, 111, 110, 116, 97, 105, 110, 101, 114, 32, 123, // .container { + 32, 109, 97, 114, 103, 105, 110, 58, 32, 97, 117, 116, // margin: aut + 111, 59, 32, 119, 105, 100, 116, 104, 58, 32, 49, 50, // o; width: 12 + 55, 48, 112, 120, 59, 32, 125, 32, 125, 10, 64, 109, // 70px; } }.@m + 101, 100, 105, 97, 32, 40, 109, 97, 120, 45, 119, 105, // edia (max-wi + 100, 116, 104, 58, 32, 57, 50, 48, 112, 120, 41, 32, // dth: 920px) + 123, 32, 46, 114, 111, 119, 32, 46, 99, 111, 108, 32, // { .row .col + 123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100 + 37, 59, 32, 125, 32, 125, 10, 0 // %; } }. +}; +static const unsigned char v6[] = { + 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, // .. < + 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 116, // head>. Device + 68, 97, 115, 104, 98, 111, 97, 114, 100, 60, 47, 116, // Dashboard. . + 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, 116, // . + 32, 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, // . . + 10, 32, 32, 60, 98, 111, 100, 121, 62, 60, 47, 98, // . . . + 10, 0 // . +}; static const struct packed_file { const char *name; @@ -2795,11 +3966,12 @@ static const struct packed_file { size_t size; time_t mtime; } packed_files[] = { - {"/web_root/index.html", v1, sizeof(v1), 1654437619}, - {"/web_root/main.js", v2, sizeof(v2), 1656330076}, - {"/web_root/preact.min.js", v3, sizeof(v3), 1652374364}, - {"/web_root/style.css", v4, sizeof(v4), 1654709515}, - {"/web_root/user.png", v5, sizeof(v5), 1626172939}, + {"/web_root/main.js.orig", v1, sizeof(v1), 1656079031}, + {"/web_root/preact.min.js", v2, sizeof(v2), 1655487950}, + {"/web_root/main.js", v3, sizeof(v3), 1656422708}, + {"/web_root/user.png", v4, sizeof(v4), 1655487950}, + {"/web_root/style.css", v5, sizeof(v5), 1655487950}, + {"/web_root/index.html", v6, sizeof(v6), 1655487950}, {NULL, NULL, 0, 0} }; diff --git a/examples/device-dashboard/web_root/main.js b/examples/device-dashboard/web_root/main.js index 1fa535c0..5ec6ed37 100644 --- a/examples/device-dashboard/web_root/main.js +++ b/examples/device-dashboard/web_root/main.js @@ -312,17 +312,6 @@ const App = function(props) { .then(r => setConfig(r)) .catch(err => console.log(err)); - const login = function(u) { - document.cookie = `access_token=${u.token};path=/;max-age=3600`; - setUser(u.user); - return getconfig(); - }; - - const logout = ev => { - document.cookie = `access_token=;path=/;max-age=0`; - setUser(''); - }; - // Watch for notifications. As soon as a notification arrives, pass it on // to all subscribed components const watch = function() { @@ -349,13 +338,24 @@ const App = function(props) { reconnect(); }; + const login = function(u) { + document.cookie = `access_token=${u.token};path=/;max-age=3600`; + setUser(u.user); + watch(); + return getconfig(); + }; + + const logout = ev => { + document.cookie = `access_token=;path=/;max-age=0`; + setUser(''); + }; + useEffect(() => { // Called once at init time PubSub.subscribe(msg => msg.name == 'config' && getconfig()); fetch('/api/login', {headers: {Authorization: ''}}) .then(r => r.json()) .then(r => login(r)) - .then(watch) .catch(err => setUser('')); }, []);