ESPUI/src/dataControlsJS.h

5 lines
23 KiB
C

const char JS_CONTROLS[] PROGMEM = R"=====(
const UI_INITIAL_GUI=200,UI_RELOAD=201,UPDATE_OFFSET=100,UI_TITEL=0,UI_PAD=1,UPDATE_PAD=101,UI_CPAD=2,UPDATE_CPAD=102,UI_BUTTON=3,UPDATE_BUTTON=103,UI_LABEL=4,UPDATE_LABEL=104,UI_SWITCHER=5,UPDATE_SWITCHER=105,UI_SLIDER=6,UPDATE_SLIDER=106,UI_NUMBER=7,UPDATE_NUMBER=107,UI_TEXT_INPUT=8,UPDATE_TEXT_INPUT=108,UI_GRAPH=9,ADD_GRAPH_POINT=10,CLEAR_GRAPH=109,UI_TAB=11,UPDATE_TAB=111,UI_SELECT=12,UPDATE_SELECT=112,UI_OPTION=13,UPDATE_OPTION=113,UI_MIN=14,UPDATE_MIN=114,UI_MAX=15,UPDATE_MAX=115,UI_STEP=16,UPDATE_STEP=116,UI_GAUGE=17,UPDATE_GAUGE=117,UI_ACCEL=18,UPTDATE_ACCEL=117,UP=0,DOWN=1,LEFT=2,RIGHT=3,CENTER=4,C_TURQUOISE=0,C_EMERALD=1,C_PETERRIVER=2,C_WETASPHALT=3,C_SUNFLOWER=4,C_CARROT=5,C_ALIZARIN=6,C_DARK=7,C_NONE=255;var websock,graphData=new Array,hasAccel=!1,sliderContinuous=!1;function colorClass(e){switch(e=Number(e)){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return""}}var websockConnected=!1;function requestOrientationPermission(){}function saveGraphData(){localStorage.setItem("espuigraphs",JSON.stringify(graphData))}function restoreGraphData(e){var a=localStorage.getItem("espuigraphs",graphData);return null!=a?(a=JSON.parse(a))[e]:[]}function restart(){$(document).add("*").off(),$("#row").html(""),websock.close(),start()}function conStatusError(){websockConnected=!1,$("#conStatus").removeClass("color-green"),$("#conStatus").addClass("color-red"),$("#conStatus").html("Error / No Connection &#8635;"),$("#conStatus").off(),$("#conStatus").on({click:restart})}function handleVisibilityChange(){websockConnected||document.hidden||restart()}function start(){document.addEventListener("visibilitychange",handleVisibilityChange,!1),(websock=""!=window.location.port||80!=window.location.port||443!=window.location.port?new WebSocket("ws://"+window.location.hostname+":"+window.location.port+"/ws"):new WebSocket("ws://"+window.location.hostname+"/ws")).onopen=function(e){console.log("websock open"),$("#conStatus").addClass("color-green"),$("#conStatus").text("Connected"),websockConnected=!0},websock.onclose=function(e){console.log("websock close"),conStatusError()},websock.onerror=function(e){console.log(e),conStatusError()};var e=function(a){console.log(a);var t=JSON.parse(a.data);document.body;switch(t.type){case UI_INITIAL_GUI:$("#row").html(""),$("#tabsnav").html(""),$("#tabscontent").html(""),t.sliderContinuous&&(sliderContinuous=t.sliderContinuous),t.controls.forEach(a=>{var t={data:JSON.stringify(a)};e(t)});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=t.label,$("#mainHeader").html(t.label);break;case UI_LABEL:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><span id='l"+t.id+"' class='label label-wrap'>"+t.value+"</span></div>");break;case UI_BUTTON:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='one columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><button id='btn"+t.id+"' onmousedown='buttonclick("+t.id+", true)' onmouseup='buttonclick("+t.id+", false)'>"+t.value+"</button></div>"),$("#btn"+t.id).on({touchstart:function(e){e.preventDefault(),buttonclick(t.id,!0)},touchend:function(e){e.preventDefault(),buttonclick(t.id,!1)}});break;case UI_SWITCHER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='one columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><label id='sl"+t.id+"' class='switch "+("1"==t.value?"checked":"")+"'><div class='in'><input type='checkbox' id='s"+t.id+"' onClick='switcher("+t.id+",null)' "+("1"==t.value?"checked":"")+"/></div></label></div>"),switcher(t.id,t.value);break;case UI_CPAD:case UI_PAD:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><nav class='control'><ul><li><a onmousedown='padclick(UP, "+t.id+", true)' onmouseup='padclick(UP, "+t.id+", false)' id='pf"+t.id+"'>▲</a></li><li><a onmousedown='padclick(RIGHT, "+t.id+", true)' onmouseup='padclick(RIGHT, "+t.id+", false)' id='pr"+t.id+"'>▲</a></li><li><a onmousedown='padclick(LEFT, "+t.id+", true)' onmouseup='padclick(LEFT, "+t.id+", false)' id='pl"+t.id+"'>▲</a></li><li><a onmousedown='padclick(DOWN, "+t.id+", true)' onmouseup='padclick(DOWN, "+t.id+", false)' id='pb"+t.id+"'>▲</a></li></ul>"+(t.type==UI_CPAD?"<a class='confirm' onmousedown='padclick(CENTER,"+t.id+", true)' onmouseup='padclick(CENTER, "+t.id+", false)' id='pc"+t.id+"'>OK</a>":"")+"</nav></div>"),$("#pf"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(UP,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(UP,t.id,!1)}}),$("#pl"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(LEFT,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(LEFT,t.id,!1)}}),$("#pr"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(RIGHT,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(RIGHT,t.id,!1)}}),$("#pb"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(DOWN,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(DOWN,t.id,!1)}}),$("#pc"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(CENTER,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(CENTER,t.id,!1)}});break;case UI_SLIDER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter card-slider "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><div class='range-slider'><input id='sl"+t.id+"' type='range' min='0' max='100' value='"+t.value+"' class='range-slider__range'><span class='range-slider__value'>"+t.value+"</span></div></div>"),rangeSlider(!sliderContinuous);break;case UI_NUMBER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><input style='color:black;' id='num"+t.id+"' type='number' value='"+t.value+"' onchange='numberchange("+t.id+")' /></div>");break;case UI_TEXT_INPUT:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><input style='color:black;' id='text"+t.id+"' value='"+t.value+"' onchange='textchange("+t.id+")' /></div>");break;case UI_TAB:$("#tabsnav").append("<li><a onmouseup='tabclick("+t.id+")' href='#tab"+t.id+"'>"+t.value+" </a></li>"),$("#tabscontent").append("<div id='tab"+t.id+"'></div>"),tabs=$(".tabscontent").tabbedContent({loop:!0}).data("api"),$("a").filter(function(){return"#click-to-switch"===$(this).attr("href")}).on("click",function(e){var a=prompt("Tab to switch to (number or id)?");tabs.switchTab(a)||alert("That tab does not exist :\\"),e.preventDefault()});break;case UI_SELECT:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><select style='color:black;' id='select"+t.id+"' onchange='selectchange("+t.id+")' /></div>");break;case UI_OPTION:if(t.parentControl)(n=$("#select"+t.parentControl)).append("<option id='option"+t.id+"' value='"+t.value+"' "+t.selected+">"+t.label+"</option>");break;case UI_MIN:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("min",t.value);break;case UI_MAX:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("max",t.value);break;case UI_STEP:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("step",t.value);break;case UI_GRAPH:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><figure id='graph"+t.id+"'><figcaption>"+t.label+"</figcaption></figure></div>"),graphData[t.id]=restoreGraphData(t.id),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case ADD_GRAPH_POINT:var o=Math.round((new Date).getTime()/1e3);graphData[t.id].push({x:o,y:t.value}),saveGraphData(),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case CLEAR_GRAPH:graphData[t.id]=[],saveGraphData(),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case UI_GAUGE:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/>WILL BE A GAUGE <input style='color:black;' id='gauge"+t.id+"' type='number' value='"+t.value+"' onchange='numberchange("+t.id+")' /></div>");break;case UI_ACCEL:if(hasAccel)break;var n;n=t.parentControl?$("#tab"+t.parentControl):$("#row"),hasAccel=!0,n.append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/>ACCEL // Not implemented fully!<div class='accelerometer' id='accel"+t.id+"' ><div class='ball"+t.id+"'></div><pre class='accelerometeroutput"+t.id+"'></pre></div>"),requestOrientationPermission();break;case UPDATE_LABEL:$("#l"+t.id).html(t.value);break;case UPDATE_SWITCHER:switcher(t.id,"0"==t.value?0:1);break;case UPDATE_SLIDER:slider_move($("#id"+t.id),t.value,"100",!1);break;case UPDATE_NUMBER:$("#num"+t.id).val(t.value);break;case UPDATE_TEXT_INPUT:$("#text"+t.id).val(t.value);break;case UPDATE_SELECT:$("#select"+t.id).val(t.value);break;case UPDATE_BUTTON:case UPDATE_PAD:case UPDATE_CPAD:break;case UPDATE_GAUGE:$("#gauge"+t.id).val(t.value);break;case UPDATE_ACCEL:break;default:console.error("Unknown type or event")}if(t.type>=UPDATE_OFFSET&&t.type<UI_INITIAL_GUI){var r=$("#id"+t.id);t.type==UPDATE_SLIDER?(r.removeClass("slider-turquoise slider-emerald slider-peterriver slider-wetasphalt slider-sunflower slider-carrot slider-alizarin"),r.addClass("slider-"+colorClass(t.color))):(r.removeClass("turquoise emerald peterriver wetasphalt sunflower carrot alizarin"),r.addClass(colorClass(t.color)))}};websock.onmessage=e}function sliderchange(e){var a=$("#sl"+e).val();websock.send("slvalue:"+a+":"+e)}function numberchange(e){var a=$("#num"+e).val();websock.send("nvalue:"+a+":"+e)}function textchange(e){var a=$("#text"+e).val();websock.send("tvalue:"+a+":"+e)}function tabclick(e){var a=$("#tab"+e).val();websock.send("tabvalue:"+a+":"+e)}function selectchange(e){var a=$("#select"+e).val();websock.send("svalue:"+a+":"+e)}function buttonclick(e,a){a?websock.send("bdown:"+e):websock.send("bup:"+e)}function padclick(e,a,t){switch(e){case CENTER:t?websock.send("pcdown:"+a):websock.send("pcup:"+a);break;case UP:t?websock.send("pfdown:"+a):websock.send("pfup:"+a);break;case DOWN:t?websock.send("pbdown:"+a):websock.send("pbup:"+a);break;case LEFT:t?websock.send("pldown:"+a):websock.send("plup:"+a);break;case RIGHT:t?websock.send("prdown:"+a):websock.send("prup:"+a)}}function switcher(e,a){null==a?$("#s"+e).is(":checked")?(websock.send("sactive:"+e),$("#sl"+e).addClass("checked")):(websock.send("sinactive:"+e),$("#sl"+e).removeClass("checked")):1==a?($("#sl"+e).addClass("checked"),$("#sl"+e).prop("checked",!0)):0==a&&($("#sl"+e).removeClass("checked"),$("#sl"+e).prop("checked",!1))}var rangeSlider=function(e){var a=$(".range-slider"),t=$(".range-slider__range"),o=$(".range-slider__value");a.each(function(){o.each(function(){var e=$(this).prev().attr("value");$(this).html(e)}),e?t.on({input:function(){$(this).next().html(this.value)},change:function(){sliderchange($(this).attr("id").replace(/^\D+/g,""))}}):t.on({input:function(){sliderchange($(this).attr("id").replace(/^\D+/g,""))}})})};
)=====";
const uint8_t JS_CONTROLS_GZIP[3163] PROGMEM = { 31,139,8,0,0,0,0,0,0,3,221,90,141,114,219,184,17,126,21,154,185,177,201,154,145,196,252,93,142,50,237,145,101,37,81,79,182,92,91,190,100,154,164,26,72,132,44,78,40,146,7,130,86,124,182,102,250,14,125,131,62,66,31,161,125,147,62,73,23,0,65,130,20,229,252,56,189,78,58,158,145,9,96,247,219,197,98,177,88,252,76,163,48,161,218,69,127,220,63,233,143,250,157,193,248,229,69,223,125,212,106,89,80,117,214,27,12,59,71,80,178,173,139,211,163,206,168,55,30,190,120,113,222,27,185,182,104,31,245,71,189,129,203,63,79,129,46,167,226,5,198,212,31,119,217,247,35,217,208,21,45,143,88,203,225,197,104,52,60,113,31,203,182,172,108,183,30,179,214,65,231,16,160,159,200,70,81,180,91,79,88,219,249,235,254,168,251,170,119,230,62,149,205,121,141,221,122,202,41,6,253,35,40,61,203,219,69,217,110,61,99,173,39,23,199,135,80,250,81,182,102,101,187,245,35,239,84,239,205,8,140,113,122,49,114,159,75,10,165,206,110,61,103,84,47,207,58,167,175,220,159,172,206,209,145,248,30,159,14,251,39,172,217,234,14,122,157,179,140,192,110,253,196,49,59,135,174,157,155,71,148,184,121,206,123,131,94,23,184,114,11,201,10,155,219,104,120,58,234,51,155,228,70,146,21,54,55,210,113,31,62,115,27,241,146,205,45,116,220,121,227,218,185,117,120,201,22,134,25,245,78,93,187,176,11,47,218,220,42,47,59,23,47,123,174,157,91,37,43,219,220,40,157,110,151,217,159,25,100,196,91,179,10,78,14,30,112,52,124,13,194,173,65,239,197,8,70,251,172,255,242,213,8,70,182,219,59,25,129,97,159,88,221,241,232,226,236,79,23,195,254,121,15,136,187,227,222,113,239,172,51,96,30,211,29,159,246,128,230,172,255,11,16,62,130,226,235,222,168,115,126,250,170,51,224,0,227,243,139,147,23,131,225,235,12,165,219,57,59,27,142,96,220,187,227,206,160,255,231,206,25,116,249,25,20,142,58,103,63,195,120,118,199,39,195,147,158,251,232,233,211,246,21,34,218,18,79,146,104,250,193,186,36,40,158,31,33,138,220,16,47,181,14,33,232,218,154,163,164,51,157,226,192,221,178,173,36,240,61,76,186,81,72,253,48,141,210,4,234,218,179,52,156,82,63,10,181,105,20,68,164,27,160,36,49,176,121,147,44,125,58,157,27,216,61,73,23,19,76,160,202,188,153,162,4,107,74,15,29,130,105,74,66,29,126,126,77,35,63,193,122,59,35,201,186,45,9,240,2,19,20,120,121,115,97,9,73,17,99,138,9,241,175,48,201,137,10,251,72,162,37,166,40,137,231,40,160,57,81,110,53,73,147,164,225,44,136,150,10,142,48,165,108,159,34,66,162,130,95,26,87,54,163,192,255,13,17,63,204,9,152,157,101,163,135,200,7,189,237,225,25,74,3,42,43,245,213,74,25,2,176,109,136,167,20,123,37,211,18,252,107,138,19,58,36,62,14,41,98,85,167,152,44,252,36,129,47,195,188,89,229,132,9,186,194,47,229,32,66,75,16,77,81,112,78,35,130,46,113,35,193,180,79,241,194,208,113,18,167,62,31,235,68,183,254,120,62,60,105,36,20,116,190,244,103,215,70,238,2,166,185,82,228,39,128,161,32,195,0,51,165,145,91,18,112,89,43,160,64,108,139,46,107,97,26,4,91,46,58,48,144,203,165,199,136,36,216,0,137,111,241,123,231,237,251,178,92,68,40,116,228,7,195,139,166,233,2,186,111,54,144,231,25,250,31,116,179,17,205,102,134,105,253,96,232,15,72,180,132,242,156,46,2,67,215,77,43,51,102,99,26,68,0,108,90,25,202,74,241,213,240,28,12,153,38,61,24,77,2,248,53,230,231,192,57,33,192,19,188,136,174,176,240,112,157,123,251,195,75,130,113,168,155,107,164,160,98,137,142,96,175,134,74,232,203,85,208,154,218,73,164,101,226,153,134,219,15,158,63,123,252,180,93,195,85,244,186,84,27,26,55,211,192,159,126,112,50,163,173,148,238,206,81,232,5,248,23,63,241,39,126,224,211,235,46,84,92,226,154,110,223,222,74,51,55,230,190,231,225,240,246,54,31,3,197,203,178,65,201,105,161,187,189,43,248,24,248,9,197,33,204,118,253,42,151,53,229,178,116,171,94,7,107,203,54,45,35,83,195,213,245,45,119,233,135,94,180,108,48,199,98,194,26,113,68,232,237,237,243,214,166,150,39,79,30,215,55,29,176,24,246,26,79,206,1,25,83,67,95,38,78,179,169,239,86,73,231,81,66,67,180,192,187,186,179,222,200,112,118,245,230,18,44,236,124,41,28,231,98,3,19,197,56,116,165,241,216,212,129,113,75,162,0,3,211,37,224,136,190,107,140,234,51,60,105,147,199,81,252,17,148,202,7,178,152,4,138,75,183,86,249,204,136,66,62,55,62,173,22,39,3,180,234,140,81,161,48,171,218,8,133,107,152,249,170,163,72,71,101,22,8,21,140,128,150,194,67,195,227,49,36,119,186,73,228,93,183,179,101,134,54,232,117,140,179,21,166,156,162,57,53,241,129,85,81,52,73,66,116,85,87,13,170,128,27,83,181,137,54,170,107,223,246,182,177,182,28,174,83,49,78,6,71,162,32,105,204,34,210,67,160,45,114,247,111,68,255,110,88,159,156,74,8,70,96,31,108,80,115,101,182,39,4,163,15,109,217,43,145,101,58,85,151,35,56,136,144,103,84,169,121,206,233,228,230,162,62,13,48,104,24,160,9,14,120,87,23,200,15,95,97,4,250,202,158,102,173,85,36,158,83,58,70,8,220,48,22,0,214,21,61,58,200,12,166,239,86,26,204,194,232,224,193,49,120,54,68,236,61,207,191,210,124,207,221,241,61,198,224,123,187,250,14,184,23,248,182,187,67,151,17,203,31,210,69,152,104,176,194,122,26,157,2,26,38,154,190,171,164,21,204,148,80,48,129,113,127,111,254,116,159,193,112,133,119,245,189,38,148,247,230,164,185,191,151,196,40,228,114,130,53,49,156,88,227,191,15,151,176,44,237,112,136,43,20,164,152,65,48,206,253,189,38,232,185,175,87,109,32,146,238,255,170,17,96,34,125,51,35,76,82,74,35,97,134,9,13,11,81,81,184,0,175,196,224,63,33,180,112,34,190,106,24,146,196,210,40,73,177,153,83,166,241,38,186,25,10,18,32,44,155,80,144,230,70,228,126,150,43,32,86,41,26,165,211,57,95,66,28,53,100,224,70,76,48,91,68,142,68,126,4,107,156,42,151,241,91,91,45,136,59,156,31,140,249,229,220,182,185,90,155,83,114,67,244,221,140,172,240,97,38,40,89,119,112,17,14,1,214,208,109,221,117,179,129,57,208,193,96,176,106,121,176,196,233,2,158,41,155,241,248,33,148,253,48,78,169,198,130,168,187,195,137,39,209,199,29,33,69,117,158,46,179,166,20,195,214,121,233,13,44,165,3,167,249,132,224,102,230,24,123,77,222,139,194,77,114,64,62,80,25,119,117,168,216,158,216,145,5,246,253,189,68,36,88,102,36,108,182,22,0,117,10,221,15,252,253,61,84,158,147,49,242,132,203,94,156,90,218,93,147,114,3,97,54,43,121,183,226,89,222,173,253,127,253,253,223,127,253,219,63,255,177,215,68,204,250,254,221,178,249,182,244,51,197,175,209,150,52,32,95,169,1,219,31,127,166,2,85,210,146,252,224,43,229,179,109,250,103,202,175,146,150,228,79,238,144,223,4,23,128,9,35,114,23,215,205,60,252,64,7,165,10,111,153,249,100,177,179,65,73,113,106,96,125,150,150,25,237,38,61,167,133,158,195,159,153,138,217,140,221,107,130,243,150,195,185,244,170,47,141,230,170,195,126,121,52,95,231,230,209,92,104,20,220,83,35,238,66,247,208,73,225,87,180,34,247,212,74,204,172,123,168,165,2,40,122,77,238,169,23,119,248,123,168,165,240,43,90,77,239,169,85,230,224,247,208,171,132,80,155,43,240,195,209,255,205,178,195,10,15,197,238,226,107,150,32,101,189,39,108,223,157,65,229,43,127,53,159,16,153,0,39,221,209,22,62,68,157,22,252,71,31,221,29,187,5,95,124,125,118,119,148,212,111,167,14,126,60,22,8,89,82,94,75,193,249,55,39,226,121,232,225,92,231,156,201,216,90,219,102,85,70,74,28,84,127,55,9,130,24,131,132,94,7,44,253,98,12,206,36,64,211,15,109,17,157,195,116,81,29,153,144,159,170,214,15,4,36,189,252,108,69,82,137,82,158,171,65,200,111,110,218,229,20,199,247,255,47,182,99,231,34,133,252,187,205,197,104,191,196,88,157,67,167,124,146,144,247,189,148,90,176,117,24,104,202,251,39,0,158,19,60,115,119,164,69,197,226,171,104,166,229,153,66,237,209,196,154,157,75,56,249,180,97,76,46,112,55,202,220,80,154,96,175,43,202,198,77,16,69,177,179,213,90,153,252,144,197,208,81,236,11,161,8,104,103,126,0,99,99,228,97,212,188,201,142,174,31,240,46,61,164,209,67,145,191,67,226,15,162,232,220,79,64,61,74,97,123,192,186,168,155,43,30,212,117,78,173,91,106,56,22,135,200,49,137,22,49,53,244,17,154,104,52,210,178,77,12,124,25,194,129,181,136,64,15,205,3,24,1,214,139,134,32,0,106,3,153,183,183,40,192,132,49,207,17,108,96,0,193,139,112,162,133,17,213,240,71,63,161,154,243,238,29,116,101,61,238,175,71,119,126,161,244,221,248,125,130,3,60,189,195,241,69,187,186,121,147,110,46,90,190,192,209,197,93,154,227,207,140,170,1,192,88,204,4,133,172,114,179,98,149,40,230,71,199,76,51,241,121,247,164,100,5,129,138,129,166,108,2,193,191,174,230,113,255,46,29,197,112,148,154,96,142,241,232,193,134,47,241,127,195,134,185,189,29,102,158,11,107,158,190,105,35,122,220,121,243,13,5,161,143,27,5,177,91,199,111,39,41,161,56,222,40,138,223,194,126,55,206,63,243,47,83,130,185,36,126,189,164,4,62,104,154,162,204,67,84,94,165,158,23,128,191,136,146,249,29,213,91,134,243,222,93,187,240,226,169,169,5,221,135,180,131,215,158,95,93,26,21,46,75,87,116,41,217,183,114,247,237,176,176,23,185,199,136,206,27,36,74,193,112,6,187,92,0,36,108,178,75,180,145,191,128,129,107,218,248,177,217,174,200,104,196,105,50,55,110,62,58,145,117,237,100,67,9,25,116,229,222,239,171,21,85,110,228,157,170,77,222,190,255,102,98,228,37,250,247,226,111,175,251,131,129,118,216,211,58,26,87,91,251,84,210,113,137,210,75,252,59,165,108,252,125,1,11,18,242,162,222,20,237,204,199,194,246,87,217,87,185,243,111,89,225,239,109,108,222,33,173,201,46,68,97,95,178,136,3,204,238,47,176,167,205,210,32,184,222,82,183,50,136,41,137,33,123,96,183,255,194,244,188,170,80,175,180,243,153,160,32,168,166,72,123,144,23,212,194,69,41,101,113,84,33,143,213,136,113,247,149,124,105,140,148,135,57,220,198,249,105,69,118,231,82,19,143,203,143,117,156,242,241,168,222,82,78,88,91,142,93,203,42,182,170,217,38,139,221,91,27,197,138,193,66,89,198,111,233,176,159,211,217,118,183,6,36,219,69,49,198,124,11,98,50,190,187,148,86,182,16,220,213,242,252,251,147,156,89,2,86,78,40,62,131,47,187,154,81,171,138,147,226,226,57,149,179,206,41,130,16,19,168,204,216,79,202,19,51,78,212,203,199,28,242,246,146,95,133,26,250,69,248,33,140,150,33,159,249,44,123,229,169,39,36,194,124,45,103,149,251,110,233,157,216,246,182,168,222,43,223,93,138,4,153,184,165,161,107,231,7,134,234,80,31,24,164,252,64,65,12,253,195,252,109,141,150,85,100,111,105,100,177,120,56,35,107,138,87,50,178,38,127,19,35,43,196,35,24,89,202,223,188,192,172,80,238,171,179,214,218,0,96,154,78,85,223,66,81,169,161,162,154,170,83,174,76,166,69,189,248,90,161,171,85,187,184,181,94,224,36,65,16,114,177,242,176,129,171,156,5,223,124,123,194,29,18,38,45,22,158,97,230,24,9,15,139,73,192,61,197,209,119,17,127,67,128,149,151,18,165,104,94,2,228,19,106,3,98,184,25,80,217,162,150,224,196,52,219,128,71,239,192,147,251,210,50,26,91,31,54,129,161,201,102,184,210,214,162,108,192,108,70,111,50,226,102,76,245,30,15,91,200,188,65,7,101,222,9,59,22,231,76,78,165,33,141,43,88,249,89,31,0,89,180,120,165,38,223,166,241,19,64,135,86,4,196,211,76,2,170,74,136,167,92,4,170,132,137,117,132,217,70,132,89,13,2,59,33,93,199,152,108,196,152,212,96,176,51,233,117,140,96,35,70,80,131,193,15,144,215,65,200,70,16,146,129,172,20,151,144,107,23,31,59,118,79,232,186,136,103,33,9,247,6,31,230,190,35,175,9,205,3,163,226,23,8,80,174,48,31,70,75,153,136,202,179,24,201,10,33,165,194,235,135,27,184,203,47,185,10,0,155,169,102,220,45,70,197,137,73,20,23,77,236,216,217,116,90,128,177,189,109,124,82,218,93,56,54,132,42,30,249,139,51,79,119,253,216,132,157,234,168,103,169,236,180,103,173,50,59,130,133,182,168,166,141,207,58,72,41,81,3,179,135,41,202,17,79,180,86,35,158,236,200,243,29,118,156,98,200,99,30,9,35,27,121,98,3,243,206,180,240,1,229,7,250,60,97,118,20,52,73,26,178,119,75,50,21,130,154,108,217,93,89,34,136,168,44,165,232,92,62,103,130,197,145,217,57,134,28,28,27,205,191,188,59,218,109,94,90,186,206,34,190,233,108,208,224,43,225,224,175,253,31,125,94,175,124,11,46,0,0 };