commit
157a5d9902
@ -221,6 +221,7 @@ function writeChunks(srcDir, specs, resultFile) {
|
|||||||
writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h", 'index');
|
writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h", 'index');
|
||||||
writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple');
|
writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple');
|
||||||
writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart');
|
writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart');
|
||||||
|
writeHtmlGzipped("wled00/data/cpal/cpal.htm", "wled00/html_cpal.h", 'cpal');
|
||||||
/*
|
/*
|
||||||
writeChunks(
|
writeChunks(
|
||||||
"wled00/data",
|
"wled00/data",
|
||||||
|
689
wled00/data/cpal/cpal.htm
Normal file
689
wled00/data/cpal/cpal.htm
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Expires" content="0">
|
||||||
|
<title>WLED Custom Palette Editor</title>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var d = document;
|
||||||
|
function gId(e) {return d.getElementById(e);}
|
||||||
|
function cE(e) {return d.createElement(e);}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #111;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #ddd;
|
||||||
|
margin: 0 10px;
|
||||||
|
line-height: 0.5;
|
||||||
|
}
|
||||||
|
#parent-container {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
#bottomContainer {
|
||||||
|
position: absolute;
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
#gradient-box {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.color-marker, .color-picker-marker {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: rgb(192, 192, 192);
|
||||||
|
border: 2px solid rgba(68, 68, 68, 0.5);
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.color-marker {
|
||||||
|
height: 30px;
|
||||||
|
width: 7px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
.color-picker-marker {
|
||||||
|
height: 7px;
|
||||||
|
width: 7px;
|
||||||
|
top: 150%;
|
||||||
|
}
|
||||||
|
.delete-marker {
|
||||||
|
position: absolute;
|
||||||
|
height: 5px;
|
||||||
|
width: 5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: rgb(255, 255, 255);
|
||||||
|
border: 3px solid rgb(155, 40, 40);
|
||||||
|
top: 220%;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.color-picker {
|
||||||
|
position: absolute;
|
||||||
|
height: 1px;
|
||||||
|
width: 1px;
|
||||||
|
border: 1px;
|
||||||
|
top: 150%;
|
||||||
|
z-index: 1;
|
||||||
|
border-color: #111;
|
||||||
|
background-color: #111;
|
||||||
|
}
|
||||||
|
.buttonclass {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
vertical-align: bottom;
|
||||||
|
background-color: #111;
|
||||||
|
}
|
||||||
|
#bottomContainer span {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
#info {
|
||||||
|
display: "";
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
position: relative;
|
||||||
|
margin-top: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.wrap {
|
||||||
|
width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.palette {
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
.paletteGradients {
|
||||||
|
flex: 1;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.palettesMain {
|
||||||
|
margin-top: 50px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.palTop {
|
||||||
|
height: fit-content;
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
position: relative;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.palGradientParent {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: fit-content;
|
||||||
|
margin-top: 10px;
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
position: relative;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.buttonsDiv {
|
||||||
|
display: inline-flex;
|
||||||
|
margin-left: 5px;
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
.sendSpan, .editSpan{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrap" class="wrap">
|
||||||
|
<div style="display: flex; justify-content: center;">
|
||||||
|
<h1 style="display: flex; align-items: center;">
|
||||||
|
<svg style="width:36px;height:36px;margin-right:6px;" viewBox="0 0 32 32">
|
||||||
|
<rect style="fill:#003FFF" x="6" y="22" width="8" height="4"/>
|
||||||
|
<rect style="fill:#003FFF" x="14" y="14" width="4" height="8"/>
|
||||||
|
<rect style="fill:#003FFF" x="18" y="10" width="4" height="8"/>
|
||||||
|
<rect style="fill:#003FFF" x="22" y="6" width="8" height="4"/>
|
||||||
|
</svg>
|
||||||
|
<span id="head">WLED Custom Palette Editor</span>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="parent-container">
|
||||||
|
<div id="gradient-box"></div>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; justify-content: center;">
|
||||||
|
<div id="palettes" class="palettesMain">
|
||||||
|
<div id="palTop" class="palTop">
|
||||||
|
Currently in use custom palettes
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="display: flex; justify-content: center;">
|
||||||
|
<div id="info">
|
||||||
|
Click on the gradient editor to add new color slider, then the colored box below the slider to change its color.
|
||||||
|
Click the red box below indicator (and confirm) to delete.
|
||||||
|
Once finished, click the arrow icon to upload into the desired slot.
|
||||||
|
To edit existing palette, click the pencil icon.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; justify-content: center;">
|
||||||
|
<div id="staticPalettes" class="palettesMain">
|
||||||
|
<div id="statpalTop" class="palTop">
|
||||||
|
Available static palettes
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
//global variables
|
||||||
|
var gradientBox = gId('gradient-box');
|
||||||
|
var cpalc = -1;
|
||||||
|
var pxCol = {};
|
||||||
|
var tCol = {};
|
||||||
|
var rect = gradientBox.getBoundingClientRect();
|
||||||
|
var gradientLength = rect.width;
|
||||||
|
var mOffs = Math.round((gradientLength / 256) / 2) - 5;
|
||||||
|
var paletteArray = []; //Holds the palettes after load.
|
||||||
|
var svgSave = '<svg style="width:25px;height:25px" viewBox="0 0 24 24"><path fill=#fff d="M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M7,12L12,17V14H16V10H12V7L7,12Z"/></svg>'
|
||||||
|
var svgEdit = '<svg style="width:25px;height:25px" viewBox="0 0 24 24"><path fill=#fff d="M12,2C6.47,2 2,6.47 2,12C2,17.53 6.47,22 12,22C17.53,22 22,17.53 22,12C22,6.47 17.53,2 12,2M15.1,7.07C15.24,7.07 15.38,7.12 15.5,7.23L16.77,8.5C17,8.72 17,9.07 16.77,9.28L15.77,10.28L13.72,8.23L14.72,7.23C14.82,7.12 14.96,7.07 15.1,7.07M13.13,8.81L15.19,10.87L9.13,16.93H7.07V14.87L13.13,8.81Z"/></svg>'
|
||||||
|
|
||||||
|
function recOf() {
|
||||||
|
rect = gradientBox.getBoundingClientRect();
|
||||||
|
gradientLength = rect.width;
|
||||||
|
mOffs = Math.round((gradientLength / 256) / 2) - 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Initiation
|
||||||
|
getInfo();
|
||||||
|
window.addEventListener('load', chkW);
|
||||||
|
window.addEventListener('resize', chkW);
|
||||||
|
|
||||||
|
gradientBox.addEventListener("click", clikOnGradient);
|
||||||
|
|
||||||
|
//Sets start and stop, mandatory
|
||||||
|
addC(0);
|
||||||
|
addC(255);
|
||||||
|
|
||||||
|
updateGradient(); //Sets the gradient at startup
|
||||||
|
|
||||||
|
function clikOnGradient(e) {
|
||||||
|
removeTrashcan(e);
|
||||||
|
addC(Math.round((e.offsetX/gradientLength)*256));
|
||||||
|
}
|
||||||
|
|
||||||
|
///////// Add a new colorMarker
|
||||||
|
function addC(truePos, thisColor = '') {
|
||||||
|
let position = -1;
|
||||||
|
let iExist = false;
|
||||||
|
const colorMarkers = gradientBox.querySelectorAll('.color-marker');
|
||||||
|
|
||||||
|
colorMarkers.forEach((colorMarker, i) => {
|
||||||
|
if (colorMarker.getAttribute("data-truepos") == truePos) {
|
||||||
|
iExist = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (colorMarkers.length > 17) iExist = true;
|
||||||
|
if (iExist) return; // Exit the function early if iExist is true
|
||||||
|
|
||||||
|
if (truePos > 0 && truePos < 255) {
|
||||||
|
//calculate first available > 0
|
||||||
|
for (var i = 1; i <= 16 && position < 1; i++) {
|
||||||
|
if (!gId("colorMarker"+i)) {
|
||||||
|
position = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
position = truePos;
|
||||||
|
}
|
||||||
|
if (thisColor == ''){
|
||||||
|
thisColor = `#${(Math.random() * 0xFFFFFF << 0).toString(16).padStart(6, '0')}`;// set random color as default
|
||||||
|
}
|
||||||
|
|
||||||
|
const colorMarker = cE('span'); // create a marker for the color position
|
||||||
|
colorMarker.className = 'color-marker';
|
||||||
|
colorMarker.id = 'colorMarker' + position.toString();
|
||||||
|
colorMarker.setAttribute("data-truepos", truePos); //Used to always have a true position no matter what screen or percentage we use
|
||||||
|
colorMarker.setAttribute("data-truecol", thisColor); //Used to hold the color of the position in the gradient connected to a true position
|
||||||
|
colorMarker.setAttribute("data-offset", mOffs);
|
||||||
|
colorMarker.addEventListener('click', stopFurtherProp); //Added to prevent the gradient click to fire when covered by a marker
|
||||||
|
colorMarker.style.left = `${Math.round((gradientLength / 256) * truePos)+mOffs}px`;
|
||||||
|
|
||||||
|
const colorPicker = cE('input');
|
||||||
|
colorPicker.type = 'color';
|
||||||
|
colorPicker.value = thisColor;
|
||||||
|
colorPicker.className = 'color-picker';
|
||||||
|
colorPicker.id = 'colorPicker' + position.toString();
|
||||||
|
colorPicker.addEventListener('input', updateGradient);
|
||||||
|
colorPicker.addEventListener('click',cpClk)
|
||||||
|
|
||||||
|
const colorPickerMarker = cE('span'); // create a marker for the color position
|
||||||
|
colorPickerMarker.className = 'color-picker-marker';
|
||||||
|
colorPickerMarker.id = 'colorPickerMarker' + position.toString();
|
||||||
|
colorPickerMarker.addEventListener('click', colClk);
|
||||||
|
colorPickerMarker.style.left = colorMarker.style.left;
|
||||||
|
colorPicker.style.left = colorMarker.style.left;
|
||||||
|
|
||||||
|
const deleteMarker = cE('span'); // create a delete marker for the color position
|
||||||
|
if (position > 0 && position < 255) {
|
||||||
|
deleteMarker.className = 'delete-marker';
|
||||||
|
deleteMarker.id = 'deleteMarker' + position.toString();
|
||||||
|
deleteMarker.addEventListener('click', (e) => {
|
||||||
|
deleteColor(e);
|
||||||
|
});
|
||||||
|
deleteMarker.style.left = colorMarker.style.left
|
||||||
|
}
|
||||||
|
|
||||||
|
colorMarker.style.backgroundColor = colorPicker.value; // set marker color to match color picker
|
||||||
|
colorPickerMarker.style.backgroundColor = colorPicker.value;
|
||||||
|
|
||||||
|
gradientBox.appendChild(colorPicker);
|
||||||
|
gradientBox.appendChild(colorMarker);
|
||||||
|
gradientBox.appendChild(colorPickerMarker);
|
||||||
|
if (position != 0 && position != 255) gradientBox.appendChild(deleteMarker); // append the marker if not start or end
|
||||||
|
//make markers slidable IF they are not the first or last slider
|
||||||
|
if (position > 0 && position < 255) makeMeDrag(gId(colorMarker.id));
|
||||||
|
|
||||||
|
setTooltipMarker(gId(colorMarker.id));
|
||||||
|
|
||||||
|
updateGradient();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////// Update Gradient
|
||||||
|
function updateGradient() {
|
||||||
|
const colorMarkers = gradientBox.querySelectorAll('.color-marker');
|
||||||
|
pxCol = {};
|
||||||
|
tCol = {}
|
||||||
|
colorMarkers.forEach((colorMarker, index) => {
|
||||||
|
const thisColorPicker = gId(colorMarkers[index].id.replace('colorMarker', 'colorPicker'));
|
||||||
|
const colorToSet = thisColorPicker.value;
|
||||||
|
gId(colorMarkers[index].id.replace('colorMarker', 'colorPickerMarker')).style.backgroundColor = colorToSet;
|
||||||
|
colorMarkers[index].style.backgroundColor = colorToSet;
|
||||||
|
colorMarkers[index].setAttribute("data-truecol", colorToSet);
|
||||||
|
const tPos = colorMarkers[index].getAttribute("data-truepos");
|
||||||
|
const gradientPos = Math.round((gradientLength / 256)*tPos);
|
||||||
|
pxCol[gradientPos] = colorToSet;
|
||||||
|
tCol[tPos] = colorToSet;
|
||||||
|
});
|
||||||
|
gradientString = 'linear-gradient(to right';
|
||||||
|
Object.entries(pxCol).forEach(([p, c]) => {
|
||||||
|
gradientString += `, ${c} ${p}px`;
|
||||||
|
});
|
||||||
|
gradientString += ')';
|
||||||
|
gradientBox.style.background = gradientString;
|
||||||
|
//gId("jsonstring").innerHTML = calcJSON();
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopFurtherProp(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
function colClk(e){
|
||||||
|
removeTrashcan(e)
|
||||||
|
e.stopPropagation();
|
||||||
|
let cp = gId(e.srcElement.id.replace("Marker",""));
|
||||||
|
cp.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
function cpClk(e) {
|
||||||
|
removeTrashcan(event)
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
//This neat little function makes any element draggable on the X-axis.
|
||||||
|
//Just call: makeMeDrag(myElement); And you are good to go.
|
||||||
|
function makeMeDrag(elmnt) {
|
||||||
|
var posNew = 0, mousePos = 0, mouseOffset = 0
|
||||||
|
|
||||||
|
//Set these to whatever you want to limit your movement to
|
||||||
|
var rect = gradientBox.getBoundingClientRect();
|
||||||
|
var maxX = rect.right; // maximum X coordinate
|
||||||
|
var minX = rect.left; // minimum X coordinate i.e. also offset from left of screen
|
||||||
|
var gradientLength = maxX - minX + 1;
|
||||||
|
|
||||||
|
elmnt.onmousedown = dragMouseDown;
|
||||||
|
|
||||||
|
function dragMouseDown(e) {
|
||||||
|
removeTrashcan(event)
|
||||||
|
e = e || window.event;
|
||||||
|
e.preventDefault();
|
||||||
|
// get the mouse cursor position at startup:
|
||||||
|
mousePos = e.clientX;
|
||||||
|
d.onmouseup = closeDragElement;
|
||||||
|
// call a function whenever the cursor moves:
|
||||||
|
d.onmousemove = elementDrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
function elementDrag(e) {
|
||||||
|
e = e || window.event;
|
||||||
|
e.preventDefault();
|
||||||
|
// calculate the new cursor position:
|
||||||
|
posNew = mousePos - e.clientX;
|
||||||
|
mousePos = e.clientX;
|
||||||
|
mousePosInGradient = mousePos - (minX + 1)
|
||||||
|
|
||||||
|
truePos = Math.round((mousePosInGradient/gradientLength)*256);
|
||||||
|
oldTruePos = elmnt.getAttribute("data-truepos");
|
||||||
|
// set the element's new position if new position within min/max limits:
|
||||||
|
if (truePos > 0 && truePos < 255 && oldTruePos != truePos) {
|
||||||
|
if (truePos < 64) {
|
||||||
|
thisOffset = 0;
|
||||||
|
} else if (truePos > 192) {
|
||||||
|
thisOffset = 7;
|
||||||
|
} else {
|
||||||
|
thisOffset=3;
|
||||||
|
}
|
||||||
|
elmnt.style.left = (Math.round((gradientLength/256)*truePos)+mOffs) + "px";
|
||||||
|
gId(elmnt.id.replace('colorMarker', 'colorPickerMarker')).style.left = elmnt.style.left;
|
||||||
|
gId(elmnt.id.replace('colorMarker', 'deleteMarker')).style.left = elmnt.style.left;
|
||||||
|
gId(elmnt.id.replace('colorMarker', 'colorPicker')).style.left = elmnt.style.left;
|
||||||
|
elmnt.setAttribute("data-truepos", truePos);
|
||||||
|
setTooltipMarker(elmnt);
|
||||||
|
updateGradient();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeDragElement() {
|
||||||
|
/* stop moving when mouse button is released:*/
|
||||||
|
d.onmouseup = null;
|
||||||
|
d.onmousemove = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTooltipMarker(elmnt) {
|
||||||
|
elmnt.setAttribute('title', `${elmnt.getAttribute("data-truepos")} : ${elmnt.getAttribute("data-truecol")}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteColor(e) {
|
||||||
|
var trash = cE("div");
|
||||||
|
thisDeleteMarker = e.srcElement;
|
||||||
|
thisColorMarker = gId(thisDeleteMarker.id.replace("delete", "color"));
|
||||||
|
thisColorPickerMarker = gId(thisDeleteMarker.id.replace("delete", "colorPicker"));
|
||||||
|
thisColorPicker = gId(thisDeleteMarker.id.replace("deleteMarker", "colorPicker"));
|
||||||
|
renderOffsetX = 15 - 5;
|
||||||
|
renderX = e.srcElement.getBoundingClientRect().x - renderOffsetX;
|
||||||
|
renderY = e.srcElement.getBoundingClientRect().y + 13;
|
||||||
|
|
||||||
|
trash.id = "trash";
|
||||||
|
trash.innerHTML = '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="30px" height="30px"><path style="fill:#880000; stroke: #888888; stroke-width: -2px;stroke-dasharray: 0.1, 8;" d="M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z"/></svg>';
|
||||||
|
trash.style.position = "absolute";
|
||||||
|
trash.style.left = (renderX) + "px";
|
||||||
|
trash.style.top = (renderY) + "px";
|
||||||
|
d.body.appendChild(trash);
|
||||||
|
|
||||||
|
trash.addEventListener("click", (e)=>{
|
||||||
|
trash.parentNode.removeChild(trash);
|
||||||
|
thisDeleteMarker.parentNode.removeChild(thisDeleteMarker);
|
||||||
|
thisColorPickerMarker.parentNode.removeChild(thisColorPickerMarker);
|
||||||
|
thisColorMarker.parentNode.removeChild(thisColorMarker);
|
||||||
|
thisColorPicker.parentNode.removeChild(thisColorPicker);
|
||||||
|
updateGradient();
|
||||||
|
});
|
||||||
|
e.stopPropagation();
|
||||||
|
// Add event listener to close the trashcan on outside click
|
||||||
|
d.addEventListener("click", removeTrashcan);
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeTrashcan(event) {
|
||||||
|
trash = gId("trash");
|
||||||
|
if (event.target != trash && trash) {
|
||||||
|
trash.parentNode.removeChild(trash);
|
||||||
|
d.removeEventListener("click", removeTrashcan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function chkW() {
|
||||||
|
//Possibly add more code that recalculates the gradient... Massive job ;)
|
||||||
|
const wrap = gId('wrap');
|
||||||
|
const head = gId('head');
|
||||||
|
if (wrap.offsetWidth < 600) {
|
||||||
|
head.style.display = 'none';
|
||||||
|
} else {
|
||||||
|
head.style.display = 'inline';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function calcJSON() {
|
||||||
|
let rStr = '{"palette":['
|
||||||
|
Object.entries(tCol).forEach(([p, c]) => {
|
||||||
|
if (p > 0) rStr += ',';
|
||||||
|
rStr += `${p},"${c.slice(1)}"`; // store in hex notation
|
||||||
|
//rStr += `${p},${parseInt(c.slice(1, 3), 16)},${parseInt(c.slice(3, 5), 16)},${parseInt(c.slice(5, 7), 16)}`;
|
||||||
|
});
|
||||||
|
rStr += ']}';
|
||||||
|
return rStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initiateUpload(idx) {
|
||||||
|
const data = calcJSON();
|
||||||
|
const fileName = `/palette${idx}.json`;
|
||||||
|
uploadJSON(data, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function uploadJSON(jsonString, fileName) {
|
||||||
|
//Some indication on "I'm working"
|
||||||
|
var req = new XMLHttpRequest();
|
||||||
|
var blob = new Blob([jsonString], {type: "application/json"});
|
||||||
|
req.addEventListener('load', ()=>{
|
||||||
|
console.log(this.responseText, ' - ', this.status)
|
||||||
|
localStorage.removeItem('wledPalx');
|
||||||
|
//setTimeout(()=>{
|
||||||
|
// ss.setAttribute('fill', '#fff');
|
||||||
|
//}, 1000);
|
||||||
|
//setTimeout(()=>{window.location.href='/';},2000);
|
||||||
|
window.location.href = '/'; //Guessing we want to return ASAP when we get confirmation save is done
|
||||||
|
});
|
||||||
|
req.addEventListener('error', (e)=>{
|
||||||
|
console.log('Error: ', e); console.log(' Status: ', this.status);
|
||||||
|
//Show some error notification for some time
|
||||||
|
setTimeout(()=>{
|
||||||
|
//Remove it when time has pased
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
req.open("POST", "/upload");
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("data", blob, fileName);
|
||||||
|
req.send(formData);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getInfo() {
|
||||||
|
hst = location.host;
|
||||||
|
if (hst.length > 0 ) {
|
||||||
|
try {
|
||||||
|
var arr = [];
|
||||||
|
const response = await fetch('http://'+hst+'/json/info');
|
||||||
|
const json = await response.json();
|
||||||
|
cpalc = json.cpalcount;
|
||||||
|
fetchPalettes(cpalc-1);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error('cannot identify host');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchPalettes(lastPal) {
|
||||||
|
paletteArray.length = 0;
|
||||||
|
for (let i = 0; i <= lastPal; i++) {
|
||||||
|
const url = `http://${hst}/palette${i}.json`;
|
||||||
|
try {
|
||||||
|
const response = await fetch(url);
|
||||||
|
const json = await response.json();
|
||||||
|
paletteArray.push(json);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error fetching JSON from ${url}: `, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//If there is room for more custom palettes, add an empty, gray slot
|
||||||
|
if (paletteArray.length < 10) {
|
||||||
|
//Room for one more :)
|
||||||
|
paletteArray.push({"palette":[0,70,70,70,255,70,70,70]});
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get static palettes from localStorage and do some magic to reformat them into the same format as the pallete JSONs
|
||||||
|
//This code excludes any objects with "non valid integer colors", i.e. r, c1, c2, c3 and such
|
||||||
|
//This code also fixes potentially broken palettes which doesn't end on 255
|
||||||
|
//The code finally also removes any representations of the custom palettes, since we read them from file
|
||||||
|
|
||||||
|
const wledPalx = JSON.parse(localStorage.getItem('wledPalx'));
|
||||||
|
if (!wledPalx) {
|
||||||
|
alert("The cache of palettes are missig from your browser. You should probably return to the main page and let it load properly for the palettes cache to regenerate before returning here.","Missing cached palettes!")
|
||||||
|
} else {
|
||||||
|
for (const key in wledPalx.p) {
|
||||||
|
if (key > 245) {
|
||||||
|
delete wledPalx.p[key];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const arr = wledPalx.p[key];
|
||||||
|
let valid = true;
|
||||||
|
for (const subArr of arr) {
|
||||||
|
if (!Array.isArray(subArr) || subArr.length !== 4) {
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (const val of subArr) {
|
||||||
|
if (typeof val !== 'number' || val < 0 || val > 255 || !Number.isInteger(val)) {
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!valid) {
|
||||||
|
delete wledPalx.p[key];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const lastArr = arr[arr.length - 1];
|
||||||
|
if (lastArr[0] !== 255) {
|
||||||
|
const copyArr = [...lastArr];
|
||||||
|
copyArr[0] = 255;
|
||||||
|
arr.push(copyArr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const pArray = Object.entries(wledPalx.p).map(([key, value]) => ({
|
||||||
|
[key]: value.flat()
|
||||||
|
}));
|
||||||
|
|
||||||
|
paletteArray.push( ...pArray);
|
||||||
|
}
|
||||||
|
generatePaletteDivs();
|
||||||
|
}
|
||||||
|
|
||||||
|
function generatePaletteDivs() {
|
||||||
|
const palettesDiv = d.getElementById("palettes");
|
||||||
|
const staticPalettesDiv = d.getElementById("staticPalettes");
|
||||||
|
const paletteDivs = Array.from(palettesDiv.children).filter((child) => {
|
||||||
|
return child.id.match(/^palette\d$/); // match only elements with id starting with "palette" followed by a single digit
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const div of paletteDivs) {
|
||||||
|
palettesDiv.removeChild(div); // remove each div that matches the above selector
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < paletteArray.length; i++) {
|
||||||
|
const palette = paletteArray[i];
|
||||||
|
const paletteDiv = d.createElement("div");
|
||||||
|
paletteDiv.id = `palette${i}`;
|
||||||
|
paletteDiv.classList.add("palette");
|
||||||
|
const thisKey = Object.keys(palette)[0];
|
||||||
|
paletteDiv.dataset.colarray = JSON.stringify(palette[thisKey]);
|
||||||
|
|
||||||
|
const gradientDiv = d.createElement("div");
|
||||||
|
gradientDiv.id = `paletteGradient${i}`
|
||||||
|
const buttonsDiv = d.createElement("div");
|
||||||
|
buttonsDiv.id = `buttonsDiv${i}`;
|
||||||
|
buttonsDiv.classList.add("buttonsDiv")
|
||||||
|
|
||||||
|
const sendSpan = d.createElement("span");
|
||||||
|
sendSpan.id = `sendSpan${i}`;
|
||||||
|
sendSpan.onclick = function() {initiateUpload(i)};
|
||||||
|
sendSpan.setAttribute('title', `Send current editor to slot ${i}`); // perhaps Save instead of Send?
|
||||||
|
sendSpan.innerHTML = svgSave;
|
||||||
|
sendSpan.classList.add("sendSpan")
|
||||||
|
const editSpan = d.createElement("span");
|
||||||
|
editSpan.id = `editSpan${i}`;
|
||||||
|
editSpan.onclick = function() {loadForEdit(i)};
|
||||||
|
editSpan.setAttribute('title', `Copy slot ${i} palette to editor`);
|
||||||
|
editSpan.innerHTML = svgEdit;
|
||||||
|
editSpan.classList.add("editSpan")
|
||||||
|
|
||||||
|
gradientDiv.classList.add("paletteGradients");
|
||||||
|
let gradientColors = "";
|
||||||
|
|
||||||
|
for (let j = 0; j < palette[thisKey].length; j += 2) {
|
||||||
|
const position = palette[thisKey][j];
|
||||||
|
if (typeof(palette[thisKey][j+1]) === "string") {
|
||||||
|
gradientColors += `#${palette[thisKey][j+1]} ${position/255*100}%, `;
|
||||||
|
} else {
|
||||||
|
const red = palette[thisKey][j + 1];
|
||||||
|
const green = palette[thisKey][j + 2];
|
||||||
|
const blue = palette[thisKey][j + 3];
|
||||||
|
gradientColors += `rgba(${red}, ${green}, ${blue}, 1) ${position/255*100}%, `;
|
||||||
|
j += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gradientColors = gradientColors.slice(0, -2); // remove the last comma and space
|
||||||
|
gradientDiv.style.backgroundImage = `linear-gradient(to right, ${gradientColors})`;
|
||||||
|
paletteDiv.className = "palGradientParent";
|
||||||
|
if (thisKey == "palette") {
|
||||||
|
buttonsDiv.appendChild(sendSpan); //Only offer to send to custom palettes
|
||||||
|
} else{
|
||||||
|
editSpan.style.marginLeft = "25px";
|
||||||
|
}
|
||||||
|
if (i!=cpalc) {
|
||||||
|
buttonsDiv.appendChild(editSpan); //Dont offer to edit the empty spot
|
||||||
|
}
|
||||||
|
paletteDiv.appendChild(gradientDiv);
|
||||||
|
paletteDiv.appendChild(buttonsDiv);
|
||||||
|
if (thisKey == "palette") {
|
||||||
|
palettesDiv.appendChild(paletteDiv);
|
||||||
|
} else {
|
||||||
|
staticPalettesDiv.appendChild(paletteDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadForEdit(i) {
|
||||||
|
d.querySelectorAll('input[id^="colorPicker"]').forEach((input) => {
|
||||||
|
input.parentNode.removeChild(input);
|
||||||
|
});
|
||||||
|
d.querySelectorAll('span[id^="colorMarker"], span[id^="colorPickerMarker"], span[id^="deleteMarker"]').forEach((span) => {
|
||||||
|
span.parentNode.removeChild(span);
|
||||||
|
});
|
||||||
|
|
||||||
|
let colArray = JSON.parse(gId(`palette${i}`).getAttribute("data-colarray"));
|
||||||
|
|
||||||
|
for (let j = 0; j < colArray.length; j += 2) {
|
||||||
|
const position = colArray[j];
|
||||||
|
let hex;
|
||||||
|
if (typeof(colArray[j+1]) === "string") {
|
||||||
|
hex = `#${colArray[j+1]}`;
|
||||||
|
} else {
|
||||||
|
const red = colArray[j + 1];
|
||||||
|
const green = colArray[j + 2];
|
||||||
|
const blue = colArray[j + 3];
|
||||||
|
hex = rgbToHex(red, green, blue);
|
||||||
|
j += 2;
|
||||||
|
}
|
||||||
|
addC(position, hex);
|
||||||
|
window.scroll(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbToHex(r, g, b) {
|
||||||
|
const hex = ((r << 16) | (g << 8) | b).toString(16);
|
||||||
|
return "#" + "0".repeat(6 - hex.length) + hex;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</html>
|
@ -1245,7 +1245,7 @@ TD .checkmark, TD .radiomark {
|
|||||||
.list {
|
.list {
|
||||||
position: relative;
|
position: relative;
|
||||||
transition: background-color 0.5s;
|
transition: background-color 0.5s;
|
||||||
margin: auto auto 20px;
|
margin: auto auto 10px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,6 +198,10 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="padding-bottom: 10px;">
|
||||||
|
<button class="btn btn-xs" type="button" onclick="window.location.href=(loc?'http://'+locip:'')+'/cpal.htm'"><i class="icons btn-icon"></i></button>
|
||||||
|
<button class="btn btn-xs" type="button" onclick="palettesData=null;localStorage.removeItem('wledPalx');requestJson({rmcpal:true});setTimeout(loadPalettes,250,loadPalettesData);"><i class="icons btn-icon"></i></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -888,8 +888,21 @@ function populatePalettes()
|
|||||||
`<div class="lstIprev" style="${genPalPrevCss(pa[0])}"></div>`
|
`<div class="lstIprev" style="${genPalPrevCss(pa[0])}"></div>`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
gId('pallist').innerHTML=html;
|
gId('pallist').innerHTML=html;
|
||||||
|
// append custom palettes (when loading for the 1st time)
|
||||||
|
if (!isEmpty(lastinfo) && lastinfo.cpalcount) {
|
||||||
|
for (let j = 0; j<lastinfo.cpalcount; j++) {
|
||||||
|
let div = d.createElement("div");
|
||||||
|
gId('pallist').appendChild(div);
|
||||||
|
div.outerHTML = generateListItemHtml(
|
||||||
|
'palette',
|
||||||
|
255-j,
|
||||||
|
'~ Custom '+j+' ~',
|
||||||
|
'setPalette',
|
||||||
|
`<div class="lstIprev" style="${genPalPrevCss(255-j)}"></div>`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function redrawPalPrev()
|
function redrawPalPrev()
|
||||||
@ -1588,21 +1601,8 @@ function requestJson(command=null)
|
|||||||
if (json.success) return;
|
if (json.success) return;
|
||||||
if (json.info) {
|
if (json.info) {
|
||||||
let i = json.info;
|
let i = json.info;
|
||||||
// append custom palettes (when loading for the 1st time)
|
|
||||||
if (!command && isEmpty(lastinfo) && i.cpalcount) {
|
|
||||||
for (let j = 0; j<i.cpalcount; j++) {
|
|
||||||
let div = d.createElement("div");
|
|
||||||
gId('pallist').appendChild(div);
|
|
||||||
div.outerHTML = generateListItemHtml(
|
|
||||||
'palette',
|
|
||||||
255-j,
|
|
||||||
'~ Custom '+j+' ~',
|
|
||||||
'setPalette',
|
|
||||||
`<div class="lstIprev" style="${genPalPrevCss(255-j)}"></div>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parseInfo(i);
|
parseInfo(i);
|
||||||
|
populatePalettes(i);
|
||||||
if (isInfo) populateInfo(i);
|
if (isInfo) populateInfo(i);
|
||||||
}
|
}
|
||||||
var s = json.state ? json.state : json;
|
var s = json.state ? json.state : json;
|
||||||
|
308
wled00/html_cpal.h
Normal file
308
wled00/html_cpal.h
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
/*
|
||||||
|
* Binary array for the Web UI.
|
||||||
|
* gzip is used for smaller size and improved speeds.
|
||||||
|
*
|
||||||
|
* Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
|
||||||
|
* to find out how to easily modify the web UI source!
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/cpal/cpal.htm, do not edit!!
|
||||||
|
const uint16_t PAGE_cpal_L = 4721;
|
||||||
|
const uint8_t PAGE_cpal[] PROGMEM = {
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xbd, 0x3b, 0x7f, 0x73, 0xdb, 0xb6,
|
||||||
|
0x92, 0xff, 0xe7, 0x53, 0x20, 0x4c, 0x5f, 0x42, 0xd6, 0x14, 0x45, 0xd2, 0xb6, 0x64, 0x4b, 0xa2,
|
||||||
|
0x3b, 0xa9, 0x93, 0x77, 0xce, 0x8d, 0xdd, 0x64, 0x5e, 0x7c, 0x6e, 0x7b, 0x3e, 0xbf, 0x31, 0x4d,
|
||||||
|
0x42, 0x12, 0x1b, 0x8a, 0xe0, 0x03, 0x21, 0xd9, 0xae, 0xac, 0xef, 0x7e, 0xbb, 0x00, 0x48, 0x91,
|
||||||
|
0x94, 0xe4, 0x24, 0xd7, 0x37, 0xd7, 0xf1, 0x44, 0x20, 0xb0, 0x58, 0xec, 0x2e, 0xf6, 0x17, 0x16,
|
||||||
|
0xe8, 0xe8, 0xe5, 0xbb, 0x8f, 0xa7, 0x97, 0xbf, 0x7f, 0x7a, 0x4f, 0xa6, 0x62, 0x96, 0x9e, 0x90,
|
||||||
|
0x51, 0xf9, 0x43, 0xc3, 0x18, 0x7e, 0x66, 0x54, 0x84, 0x30, 0x22, 0xf2, 0x0e, 0xfd, 0xd7, 0x3c,
|
||||||
|
0x59, 0x04, 0xc6, 0x69, 0x18, 0x4d, 0x69, 0xe7, 0x94, 0x65, 0x82, 0xb3, 0xd4, 0x20, 0x2f, 0x22,
|
||||||
|
0x68, 0xd1, 0x4c, 0x04, 0x46, 0xc6, 0x3a, 0x11, 0x8e, 0xd9, 0x04, 0x5a, 0x85, 0x60, 0x1c, 0x5a,
|
||||||
|
0xb3, 0x79, 0x21, 0x3a, 0x9c, 0x2e, 0xc2, 0x34, 0x89, 0x43, 0x41, 0x8d, 0x6d, 0x08, 0x3f, 0xf1,
|
||||||
|
0x70, 0x32, 0x0b, 0xb7, 0x61, 0xda, 0x0a, 0xfe, 0xfe, 0x21, 0x4f, 0x38, 0x2d, 0x0c, 0x52, 0x81,
|
||||||
|
0xbb, 0x08, 0x27, 0x12, 0x91, 0xd2, 0x93, 0x17, 0xbf, 0x9e, 0xbf, 0x7f, 0x47, 0x4e, 0x61, 0x55,
|
||||||
|
0x36, 0x23, 0x9f, 0xc2, 0x94, 0x0a, 0x41, 0xc9, 0xfb, 0x38, 0x01, 0x6a, 0x46, 0x5d, 0x05, 0x42,
|
||||||
|
0x46, 0x45, 0xc4, 0x93, 0x5c, 0x10, 0xf1, 0x98, 0xd3, 0xc0, 0x10, 0xf4, 0x41, 0x74, 0xff, 0x08,
|
||||||
|
0x17, 0xa1, 0xea, 0x35, 0x4e, 0x5e, 0x8c, 0xe7, 0x59, 0x24, 0x12, 0x96, 0x91, 0xc9, 0x87, 0xd8,
|
||||||
|
0xa4, 0xd6, 0x92, 0x53, 0x31, 0xe7, 0x19, 0x89, 0x9d, 0x09, 0x15, 0xef, 0x53, 0x3a, 0x83, 0x35,
|
||||||
|
0x7f, 0x7e, 0x94, 0x43, 0xab, 0x0a, 0x34, 0x7a, 0xdf, 0x80, 0x8c, 0x38, 0x05, 0x6e, 0x35, 0x30,
|
||||||
|
0x02, 0x2e, 0x42, 0x4e, 0xe2, 0x20, 0x66, 0xd1, 0x1c, 0x7b, 0x5e, 0x8c, 0xba, 0x6a, 0x35, 0x24,
|
||||||
|
0x46, 0x3c, 0x22, 0xdd, 0x77, 0x2c, 0x7e, 0x5c, 0x8e, 0x81, 0xa3, 0xce, 0x38, 0x9c, 0x25, 0xe9,
|
||||||
|
0xe3, 0xe0, 0x2d, 0x4f, 0xc2, 0xd4, 0x2e, 0xc2, 0xac, 0xe8, 0x14, 0x94, 0x27, 0xe3, 0xe1, 0x5d,
|
||||||
|
0x18, 0x7d, 0x99, 0x70, 0x36, 0xcf, 0xe2, 0x4e, 0xc4, 0x52, 0xc6, 0x07, 0xaf, 0x3c, 0xcf, 0x1b,
|
||||||
|
0xca, 0x29, 0x45, 0xf2, 0x27, 0x1d, 0x78, 0xbd, 0xfc, 0x61, 0xa8, 0x47, 0xe2, 0x38, 0x1e, 0xce,
|
||||||
|
0x42, 0x3e, 0x49, 0xb2, 0x81, 0x4b, 0x3c, 0x17, 0x06, 0xd2, 0x24, 0xa3, 0x9d, 0x29, 0x4d, 0x26,
|
||||||
|
0x53, 0x31, 0x70, 0x0e, 0x57, 0xaf, 0xf2, 0x90, 0x03, 0x21, 0x1d, 0x94, 0x61, 0x08, 0x43, 0x7c,
|
||||||
|
0x99, 0xb3, 0x22, 0x41, 0x56, 0x06, 0x9c, 0xa6, 0xa1, 0x48, 0x16, 0x74, 0x78, 0x9f, 0xc4, 0x62,
|
||||||
|
0x3a, 0xf0, 0x5c, 0xf7, 0x6f, 0x43, 0x3d, 0xd1, 0x07, 0x4c, 0xab, 0x57, 0x77, 0x4c, 0x80, 0x74,
|
||||||
|
0x4f, 0x37, 0x67, 0x86, 0x77, 0x05, 0x4b, 0xe7, 0x82, 0xea, 0xa5, 0x3b, 0x82, 0xe5, 0x83, 0x43,
|
||||||
|
0x39, 0x65, 0xc2, 0xc3, 0x38, 0xc1, 0xf5, 0xee, 0xd8, 0xc3, 0x72, 0x13, 0x2f, 0xb6, 0x57, 0x8e,
|
||||||
|
0xa4, 0xbd, 0x03, 0x73, 0xbf, 0x50, 0x6e, 0xeb, 0xaf, 0x3c, 0x89, 0xe0, 0x4b, 0x77, 0x6e, 0x59,
|
||||||
|
0xe9, 0x8e, 0xf1, 0x18, 0xc6, 0x11, 0xfd, 0xbc, 0x18, 0xec, 0x03, 0xa3, 0x1b, 0x62, 0x2a, 0x92,
|
||||||
|
0x74, 0x41, 0xb9, 0x86, 0x1c, 0xf8, 0xf9, 0x03, 0x81, 0xb9, 0x49, 0x4c, 0xf8, 0xe4, 0x2e, 0x34,
|
||||||
|
0x7b, 0x47, 0xb6, 0xfa, 0x73, 0x0e, 0xad, 0xe1, 0x9f, 0x9d, 0x24, 0x8b, 0xe9, 0xc3, 0xc0, 0x6f,
|
||||||
|
0xd2, 0xb2, 0xd4, 0x54, 0xee, 0xa3, 0x1c, 0x15, 0xf1, 0x7d, 0x68, 0x29, 0xee, 0xfe, 0x36, 0x14,
|
||||||
|
0x1c, 0xf6, 0x68, 0xcc, 0xf8, 0x6c, 0x20, 0x5b, 0x20, 0x3c, 0xfa, 0xbb, 0xd9, 0x81, 0x11, 0x6b,
|
||||||
|
0xb5, 0x95, 0x09, 0x8d, 0xad, 0xbf, 0x81, 0xcc, 0x3b, 0x44, 0x29, 0xc4, 0x14, 0x94, 0x96, 0xee,
|
||||||
|
0xe6, 0x58, 0x4f, 0x3f, 0xac, 0xa6, 0x63, 0xeb, 0x1b, 0xc4, 0xf0, 0x6a, 0x3c, 0x1e, 0x97, 0x42,
|
||||||
|
0xd8, 0xaf, 0x84, 0xf0, 0xea, 0xf8, 0xce, 0x3f, 0xf2, 0x8f, 0xe4, 0xfa, 0xbe, 0x0f, 0xdc, 0x6c,
|
||||||
|
0xc8, 0x40, 0x11, 0xbf, 0x9b, 0x10, 0xaf, 0x22, 0xc4, 0xab, 0x08, 0x91, 0xcd, 0x92, 0xa5, 0x0a,
|
||||||
|
0xa5, 0x57, 0x92, 0x59, 0x53, 0xdf, 0xad, 0x4a, 0xbd, 0x72, 0xee, 0xe6, 0xa0, 0x62, 0x59, 0x94,
|
||||||
|
0x86, 0x45, 0xb1, 0xcc, 0xc3, 0x38, 0x4e, 0xb2, 0xc9, 0xc0, 0xad, 0x34, 0x7a, 0x08, 0xfb, 0x29,
|
||||||
|
0x92, 0x28, 0x4c, 0x3b, 0xe0, 0x56, 0x26, 0xd9, 0x40, 0x29, 0xe4, 0x0e, 0x5c, 0x6d, 0x75, 0x25,
|
||||||
|
0x45, 0x1e, 0x66, 0xcb, 0x38, 0x29, 0xf2, 0x34, 0x7c, 0x1c, 0x24, 0x99, 0x34, 0x8c, 0x71, 0x4a,
|
||||||
|
0x1f, 0x86, 0x12, 0x59, 0x27, 0x11, 0x74, 0x56, 0x0c, 0x22, 0x50, 0x56, 0x50, 0x9a, 0x9a, 0xe8,
|
||||||
|
0x6a, 0x86, 0x06, 0x3a, 0xd4, 0x26, 0x61, 0x96, 0xc4, 0x71, 0x4a, 0x57, 0xaf, 0x92, 0x6c, 0xcc,
|
||||||
|
0x2a, 0xe4, 0x86, 0x31, 0x44, 0xef, 0xa2, 0x41, 0xbe, 0x8a, 0x72, 0xd3, 0x02, 0x6b, 0x76, 0xb4,
|
||||||
|
0x61, 0xc4, 0x20, 0xa5, 0x7b, 0x1e, 0xe6, 0xda, 0x9a, 0x8e, 0x5c, 0x1c, 0xaf, 0x4c, 0x3e, 0x9c,
|
||||||
|
0x0b, 0xb6, 0x72, 0x72, 0xe5, 0xff, 0x96, 0x75, 0xeb, 0x2d, 0x3b, 0xff, 0x43, 0x5b, 0x64, 0xb1,
|
||||||
|
0x44, 0xde, 0x61, 0x6f, 0x6a, 0x40, 0x9b, 0xea, 0x54, 0x4d, 0x2b, 0x2e, 0x40, 0x88, 0xcb, 0x96,
|
||||||
|
0x7d, 0xd7, 0x3c, 0x85, 0x04, 0xbc, 0x64, 0x79, 0xb9, 0xe6, 0x38, 0x51, 0x3e, 0x06, 0x56, 0xfa,
|
||||||
|
0x8b, 0xb2, 0x68, 0xf1, 0x0e, 0xcb, 0x94, 0x2c, 0x7c, 0x92, 0xae, 0xac, 0x92, 0xfa, 0xae, 0xbd,
|
||||||
|
0xdc, 0x42, 0x51, 0x5b, 0xbe, 0xff, 0x56, 0x0a, 0x95, 0x0e, 0x17, 0xef, 0x92, 0xc5, 0x56, 0x6d,
|
||||||
|
0xd3, 0x6b, 0xa7, 0x74, 0xdc, 0x30, 0x66, 0xb9, 0x47, 0x14, 0x02, 0xd6, 0x67, 0x50, 0x53, 0xdb,
|
||||||
|
0x29, 0x68, 0x16, 0x63, 0x6b, 0x19, 0xcd, 0x79, 0x01, 0x94, 0xe4, 0x2c, 0x41, 0xba, 0x56, 0x18,
|
||||||
|
0x41, 0x64, 0xe0, 0x20, 0xa3, 0xae, 0x0e, 0xd4, 0x18, 0x41, 0xe0, 0x27, 0x4e, 0x16, 0x24, 0x89,
|
||||||
|
0x03, 0x03, 0x95, 0x03, 0x62, 0x24, 0x9a, 0x90, 0xfe, 0xd0, 0x83, 0x2f, 0xe4, 0xc4, 0xc0, 0x68,
|
||||||
|
0xc8, 0xeb, 0x0f, 0x88, 0x98, 0xc9, 0xf8, 0xb1, 0x94, 0x8c, 0x66, 0x1f, 0xa7, 0x4c, 0xbd, 0xed,
|
||||||
|
0x33, 0x36, 0x25, 0x8c, 0xd0, 0xc5, 0x62, 0x52, 0x81, 0x2b, 0x8e, 0xf6, 0x31, 0x2c, 0x95, 0x1e,
|
||||||
|
0xb4, 0x57, 0x29, 0x69, 0x87, 0xcb, 0x1e, 0xe8, 0x30, 0xc8, 0x22, 0xa1, 0xf7, 0x3f, 0xb3, 0x07,
|
||||||
|
0x08, 0xe4, 0xc4, 0x25, 0xfb, 0x3e, 0xfc, 0x19, 0x27, 0xa3, 0x3c, 0x14, 0x53, 0xf2, 0x62, 0x9c,
|
||||||
|
0xa4, 0x69, 0x60, 0xbc, 0x72, 0xdd, 0x7d, 0xd8, 0x02, 0x03, 0x42, 0xa8, 0x71, 0xd1, 0x23, 0xbe,
|
||||||
|
0x3f, 0x3d, 0x5a, 0x1c, 0x9c, 0xf5, 0xfe, 0xbc, 0xf0, 0x0e, 0x88, 0x77, 0x30, 0x3d, 0x58, 0x1c,
|
||||||
|
0x4d, 0x3b, 0x07, 0xf0, 0x75, 0x04, 0xb1, 0xae, 0xfa, 0xf2, 0x7d, 0xd2, 0x43, 0xb8, 0x69, 0xe7,
|
||||||
|
0xe8, 0x4f, 0xa3, 0x7b, 0x02, 0x02, 0x5b, 0x4c, 0x4e, 0x5e, 0x00, 0x89, 0x20, 0x4e, 0x29, 0x21,
|
||||||
|
0x94, 0x9b, 0x71, 0xf2, 0x5c, 0xc2, 0x80, 0xa0, 0x52, 0xc2, 0x1e, 0xfe, 0x0b, 0xc2, 0x2b, 0x45,
|
||||||
|
0x88, 0xd3, 0xdb, 0x11, 0xd4, 0xa8, 0x09, 0xbf, 0x1e, 0xef, 0x80, 0x17, 0x3d, 0xb5, 0x8e, 0xe1,
|
||||||
|
0xfb, 0x36, 0xa1, 0xc4, 0x5b, 0x5a, 0x21, 0x26, 0x4b, 0x6a, 0x67, 0xeb, 0x76, 0xd9, 0x82, 0x04,
|
||||||
|
0x33, 0xac, 0x14, 0x40, 0x7f, 0x02, 0xff, 0xa7, 0x73, 0x8e, 0x74, 0xa7, 0x8f, 0x24, 0xc9, 0xc8,
|
||||||
|
0xbc, 0xa0, 0x24, 0x52, 0xbc, 0x97, 0x88, 0x48, 0x8b, 0xda, 0xbf, 0x4e, 0x34, 0xfa, 0x44, 0xb9,
|
||||||
|
0x72, 0x0a, 0xa1, 0x84, 0x40, 0xb2, 0x24, 0xa6, 0x94, 0x94, 0x12, 0x22, 0x54, 0xca, 0x9a, 0x08,
|
||||||
|
0x46, 0xc0, 0xcf, 0x93, 0x8c, 0xde, 0x13, 0x69, 0x73, 0xa4, 0x80, 0xf0, 0x04, 0x79, 0x00, 0x02,
|
||||||
|
0xab, 0x19, 0xb2, 0x9b, 0xc6, 0x04, 0x44, 0x4a, 0xee, 0x68, 0xca, 0xee, 0x65, 0xaf, 0x02, 0xc3,
|
||||||
|
0xe9, 0xd1, 0x34, 0xcc, 0x26, 0x94, 0x24, 0xa2, 0x50, 0xa0, 0x8e, 0x5e, 0x10, 0xa1, 0x9a, 0xf3,
|
||||||
|
0x20, 0x1c, 0x81, 0xeb, 0xc6, 0x55, 0xcd, 0x30, 0x8b, 0x31, 0x8f, 0x1c, 0x27, 0x7c, 0x66, 0x21,
|
||||||
|
0x12, 0x15, 0x7d, 0x1d, 0xf2, 0x31, 0x8b, 0x28, 0x19, 0x27, 0x59, 0x52, 0x4c, 0x69, 0x6c, 0x83,
|
||||||
|
0x14, 0x4b, 0x4c, 0x21, 0xe7, 0x88, 0x21, 0x42, 0x36, 0x18, 0x99, 0xe7, 0x29, 0x0b, 0x63, 0x40,
|
||||||
|
0x08, 0x6d, 0x1c, 0x8d, 0x69, 0x91, 0xe0, 0x5a, 0x45, 0xca, 0x84, 0x43, 0x2e, 0x99, 0xe4, 0x8e,
|
||||||
|
0xd0, 0x87, 0x04, 0x64, 0x94, 0x4d, 0x4a, 0x19, 0xd7, 0xf1, 0xe5, 0x34, 0x8b, 0x92, 0x54, 0x22,
|
||||||
|
0x74, 0xc8, 0x8b, 0x2d, 0x42, 0xff, 0x7e, 0x99, 0x4b, 0xed, 0x2c, 0x04, 0x38, 0xa5, 0xe8, 0x53,
|
||||||
|
0xa5, 0x2f, 0x5f, 0x51, 0x17, 0x04, 0xdf, 0xa9, 0x32, 0x6f, 0x17, 0x61, 0x92, 0x86, 0x77, 0x29,
|
||||||
|
0x48, 0x5b, 0x62, 0xfd, 0x9a, 0xae, 0xc8, 0x9f, 0x51, 0x57, 0x3b, 0x24, 0x9d, 0x6d, 0xbf, 0xd8,
|
||||||
|
0x95, 0x6e, 0x63, 0x6a, 0x5c, 0x6a, 0x03, 0x7a, 0x01, 0xcc, 0xba, 0x9b, 0x06, 0x64, 0xd9, 0x11,
|
||||||
|
0xac, 0x18, 0x05, 0x1d, 0xcf, 0xce, 0x1f, 0x4e, 0x59, 0x1a, 0x2c, 0x57, 0xb6, 0xd0, 0xbf, 0x9c,
|
||||||
|
0x46, 0x22, 0xa8, 0x4d, 0xc7, 0x24, 0xfd, 0x67, 0xcc, 0x01, 0x40, 0xde, 0xb0, 0xff, 0xd0, 0xf9,
|
||||||
|
0x0f, 0x80, 0x30, 0x2d, 0xbb, 0x84, 0x39, 0xa7, 0xd9, 0x44, 0x4c, 0x03, 0x9c, 0xe7, 0x48, 0x0f,
|
||||||
|
0x65, 0xcf, 0x3e, 0x8e, 0xc7, 0x45, 0x70, 0x01, 0xfe, 0xc6, 0x91, 0xd9, 0x83, 0xd9, 0x04, 0xed,
|
||||||
|
0xfa, 0x87, 0xbd, 0xae, 0x6f, 0x75, 0x0e, 0x6d, 0xcd, 0xf6, 0x5b, 0xce, 0xc3, 0xc7, 0xe0, 0xfa,
|
||||||
|
0xc6, 0x06, 0x87, 0xf2, 0x39, 0x5c, 0xd0, 0xe0, 0x8d, 0x74, 0x7b, 0x0d, 0xaf, 0xe7, 0x1f, 0xae,
|
||||||
|
0xbd, 0x1e, 0xb6, 0x5b, 0x4e, 0xce, 0x3f, 0x80, 0xbf, 0xd2, 0xc9, 0x49, 0x1f, 0x87, 0x21, 0x46,
|
||||||
|
0xba, 0x37, 0xdf, 0xb7, 0x3d, 0xff, 0xad, 0xe7, 0xda, 0x1e, 0x02, 0xc2, 0x0f, 0xf1, 0x7c, 0xdb,
|
||||||
|
0x6f, 0xf6, 0x6c, 0x05, 0x69, 0x42, 0x20, 0xc8, 0x45, 0x1f, 0xfe, 0x39, 0x87, 0x31, 0xaf, 0x7f,
|
||||||
|
0xe5, 0x1d, 0x9c, 0x79, 0xbd, 0x2b, 0xcf, 0x3d, 0xf3, 0xfc, 0xab, 0xfe, 0x39, 0x0e, 0xfc, 0x77,
|
||||||
|
0xe5, 0x14, 0xdf, 0x20, 0x27, 0xe8, 0xf3, 0xfe, 0xbd, 0x9c, 0x20, 0x51, 0xa7, 0x3d, 0xe7, 0xa0,
|
||||||
|
0x6f, 0xfb, 0x40, 0x31, 0x36, 0x24, 0xe1, 0xa7, 0x48, 0x8f, 0x73, 0xb8, 0x4f, 0xd4, 0x90, 0xaf,
|
||||||
|
0xf8, 0x3b, 0x95, 0x7d, 0xf8, 0xe9, 0x97, 0xe3, 0xbe, 0x82, 0xd6, 0x53, 0xf5, 0xb8, 0x84, 0xbe,
|
||||||
|
0xf0, 0x0e, 0x1d, 0xcf, 0xee, 0x3b, 0x6e, 0xff, 0x14, 0x5a, 0xfe, 0x81, 0x6c, 0x12, 0x68, 0xee,
|
||||||
|
0x1f, 0x41, 0xd3, 0xf3, 0xb1, 0x79, 0x08, 0x2d, 0x7f, 0xff, 0xdc, 0xeb, 0x39, 0xfd, 0xbe, 0x7d,
|
||||||
|
0xe4, 0x1c, 0xc2, 0x02, 0xf0, 0xd3, 0x87, 0xb1, 0xbe, 0x7d, 0x2c, 0xc1, 0xe5, 0xc8, 0xb1, 0xe3,
|
||||||
|
0x1f, 0x9d, 0x03, 0x38, 0x34, 0x3d, 0x57, 0xb6, 0xf7, 0x01, 0x08, 0x20, 0x71, 0xee, 0x01, 0x36,
|
||||||
|
0x11, 0xcd, 0x29, 0x34, 0x8f, 0x7c, 0x8d, 0xfb, 0xc0, 0x39, 0xee, 0x55, 0x2b, 0x2a, 0x32, 0x2e,
|
||||||
|
0x60, 0x96, 0xb7, 0x0f, 0xb3, 0x8e, 0x3c, 0x44, 0xe6, 0x1d, 0x23, 0xb2, 0xa3, 0xfe, 0xf9, 0x31,
|
||||||
|
0xf6, 0xc2, 0x42, 0xc7, 0xfb, 0x67, 0x08, 0x76, 0x85, 0x68, 0xfa, 0xe7, 0x6b, 0xe0, 0xda, 0x1e,
|
||||||
|
0x0c, 0xab, 0xb3, 0x24, 0xa8, 0xe6, 0xc7, 0xb1, 0x89, 0xa7, 0xc9, 0xff, 0x37, 0xd5, 0xae, 0x1d,
|
||||||
|
0x64, 0xd3, 0xe4, 0xcb, 0xc7, 0xac, 0x4c, 0xad, 0xd4, 0xa1, 0x76, 0xc6, 0x16, 0xf4, 0x92, 0x87,
|
||||||
|
0xc5, 0x34, 0x0a, 0x33, 0xe8, 0xb1, 0xc1, 0x51, 0x9f, 0x9a, 0x35, 0xa4, 0xd4, 0x61, 0xb0, 0x0c,
|
||||||
|
0x15, 0xbf, 0x75, 0x9b, 0xe8, 0x7f, 0x04, 0xf4, 0x56, 0xed, 0x90, 0x2c, 0xe7, 0x51, 0x1b, 0x4e,
|
||||||
|
0xec, 0x86, 0xb5, 0x04, 0x53, 0x22, 0x1c, 0x4d, 0x9a, 0x05, 0x2f, 0x3d, 0xc8, 0xb3, 0xb2, 0x42,
|
||||||
|
0x90, 0xb0, 0xc1, 0xee, 0xbf, 0xe6, 0x94, 0x3f, 0x7e, 0x06, 0x87, 0x1c, 0x81, 0xab, 0x7e, 0x9b,
|
||||||
|
0xa6, 0xa6, 0xd1, 0x38, 0x96, 0x19, 0xd6, 0x30, 0x19, 0x9b, 0xa1, 0x03, 0x47, 0xaf, 0xf7, 0x61,
|
||||||
|
0x34, 0x35, 0x4d, 0x61, 0x73, 0x2b, 0x38, 0x59, 0x0a, 0x94, 0xd3, 0x5b, 0x21, 0x78, 0x02, 0x19,
|
||||||
|
0x18, 0x35, 0x8d, 0x38, 0x14, 0x61, 0x47, 0xf0, 0x39, 0x85, 0x8c, 0xcd, 0xb0, 0x82, 0x80, 0xbe,
|
||||||
|
0x7e, 0x6d, 0xc2, 0x9a, 0xae, 0xb5, 0x02, 0x4e, 0x9c, 0x54, 0x52, 0x7a, 0xe2, 0xf5, 0xcb, 0x5e,
|
||||||
|
0x9b, 0x59, 0xea, 0x18, 0x8f, 0xd8, 0xe9, 0x89, 0xfb, 0xfa, 0x35, 0x1d, 0xf9, 0x87, 0x87, 0x16,
|
||||||
|
0x2c, 0x63, 0xa2, 0xab, 0xca, 0x02, 0x6f, 0x98, 0x8d, 0x02, 0xaf, 0xf7, 0xfa, 0x35, 0x1f, 0x41,
|
||||||
|
0x73, 0x6f, 0xcf, 0x92, 0x1e, 0x4b, 0x92, 0x76, 0xa1, 0x28, 0xdb, 0xcb, 0xac, 0xa7, 0x27, 0x93,
|
||||||
|
0x07, 0x99, 0x35, 0xa4, 0x29, 0x84, 0x58, 0x1e, 0xd0, 0xa1, 0x61, 0x04, 0x81, 0x80, 0x45, 0x80,
|
||||||
|
0xfb, 0x57, 0xc6, 0x9e, 0xe9, 0xf5, 0xfa, 0xfd, 0xbe, 0xef, 0x1d, 0xfe, 0xa8, 0xe4, 0x08, 0x71,
|
||||||
|
0x88, 0xcd, 0x4c, 0x6b, 0x34, 0x72, 0x2d, 0x47, 0xb0, 0xcf, 0x40, 0x7c, 0x36, 0x01, 0x18, 0x0b,
|
||||||
|
0xf2, 0xdc, 0xf8, 0xb3, 0x08, 0xb9, 0x30, 0x7b, 0xb6, 0xe1, 0x1a, 0x96, 0xa5, 0x25, 0x95, 0x06,
|
||||||
|
0xd1, 0x7b, 0xd3, 0xc0, 0xfc, 0x04, 0xc4, 0x90, 0x3a, 0xd2, 0x65, 0xff, 0x12, 0xce, 0xc0, 0x6a,
|
||||||
|
0x1b, 0x22, 0xb2, 0x53, 0x07, 0xbd, 0x7b, 0x83, 0x36, 0xbe, 0x5e, 0xc0, 0x82, 0xf1, 0x62, 0xb7,
|
||||||
|
0xb0, 0x6c, 0xfa, 0x0c, 0x00, 0xe0, 0x34, 0x6c, 0xb1, 0x03, 0x40, 0xe9, 0x83, 0xa1, 0xf4, 0x0f,
|
||||||
|
0x61, 0x60, 0xeb, 0xdf, 0x2f, 0x50, 0x31, 0x20, 0x12, 0x52, 0x48, 0x96, 0x40, 0x5e, 0x18, 0x02,
|
||||||
|
0x0d, 0x1b, 0x72, 0x8f, 0xfc, 0xef, 0x73, 0x0e, 0xa1, 0x90, 0x7f, 0xe2, 0x2c, 0x97, 0xf8, 0xd0,
|
||||||
|
0xfd, 0x38, 0x98, 0x18, 0x3f, 0xaf, 0xb9, 0x3f, 0x52, 0x6b, 0x4f, 0x2e, 0xb0, 0x67, 0x80, 0x5b,
|
||||||
|
0xd2, 0x82, 0x49, 0xa4, 0x60, 0x92, 0x2c, 0x9f, 0x0b, 0x54, 0x10, 0x47, 0x45, 0x1d, 0x29, 0x00,
|
||||||
|
0xc3, 0x4e, 0x9c, 0x45, 0x98, 0xce, 0x69, 0x20, 0xa0, 0xb5, 0x21, 0x32, 0x75, 0xd0, 0x45, 0xa0,
|
||||||
|
0x4a, 0x64, 0x9f, 0x54, 0x57, 0x53, 0x64, 0xc9, 0x16, 0x66, 0xd4, 0x7a, 0xf6, 0x3c, 0xc7, 0x22,
|
||||||
|
0x57, 0x69, 0x3c, 0xdb, 0x41, 0x35, 0xdf, 0x51, 0x7e, 0x9a, 0x7e, 0x29, 0x77, 0xb3, 0xa8, 0xef,
|
||||||
|
0x66, 0xb1, 0x8b, 0xb4, 0x6a, 0x53, 0x8b, 0x36, 0x85, 0x5b, 0xb7, 0xb6, 0x78, 0x66, 0x71, 0x96,
|
||||||
|
0xe2, 0xea, 0x00, 0x52, 0x93, 0x75, 0x5d, 0xf0, 0x40, 0xf9, 0x8e, 0x11, 0x4d, 0x71, 0x5c, 0xa7,
|
||||||
|
0x98, 0xa3, 0x95, 0x70, 0xb4, 0x12, 0xd0, 0xef, 0xb8, 0x4e, 0x7e, 0xa3, 0x98, 0x61, 0xd8, 0xb1,
|
||||||
|
0x24, 0x5c, 0x75, 0x6e, 0xa5, 0x39, 0xde, 0x4d, 0x33, 0x05, 0xd3, 0x56, 0x33, 0x4f, 0x91, 0x71,
|
||||||
|
0x2c, 0xaa, 0x21, 0xfc, 0x0e, 0x32, 0xd7, 0x7a, 0xb4, 0xae, 0x0a, 0xc8, 0x79, 0x81, 0xd6, 0x81,
|
||||||
|
0x8a, 0xf7, 0x5d, 0xe3, 0x75, 0x4f, 0x14, 0xe6, 0x90, 0xa6, 0xc5, 0xa7, 0xd3, 0x24, 0x8d, 0xcd,
|
||||||
|
0xc4, 0xda, 0x39, 0x94, 0xee, 0x1e, 0x02, 0x23, 0x70, 0x5f, 0x06, 0xfc, 0xf5, 0x6b, 0x10, 0x92,
|
||||||
|
0xfc, 0xdd, 0x05, 0x18, 0x5b, 0x76, 0x5d, 0x9c, 0xb3, 0xf0, 0x0b, 0xbd, 0xa0, 0xef, 0x78, 0x38,
|
||||||
|
0x31, 0xd1, 0xcb, 0xa0, 0x39, 0x5b, 0xb0, 0x6f, 0x54, 0x5c, 0x32, 0x96, 0x8a, 0x24, 0x57, 0x52,
|
||||||
|
0xac, 0x8f, 0x35, 0x75, 0xd0, 0xac, 0xb9, 0xdf, 0xf6, 0xc8, 0x52, 0x6d, 0x25, 0xfd, 0x4e, 0xa7,
|
||||||
|
0xbb, 0x91, 0x82, 0xd1, 0x0d, 0x17, 0xac, 0x10, 0x33, 0x99, 0xca, 0xd1, 0x6b, 0x7e, 0x03, 0x94,
|
||||||
|
0x39, 0x9c, 0x42, 0xfe, 0x1a, 0xd1, 0xa6, 0xa3, 0xb4, 0x1b, 0x76, 0x66, 0x59, 0x4a, 0xf6, 0xc3,
|
||||||
|
0xef, 0x9b, 0xa7, 0xfb, 0x60, 0xf6, 0xf6, 0x1d, 0x65, 0xb6, 0xc4, 0xf5, 0xfc, 0xe0, 0x33, 0x4e,
|
||||||
|
0x8e, 0x59, 0x55, 0x78, 0x92, 0xb0, 0xcf, 0x85, 0x17, 0x3b, 0xfb, 0x8a, 0xcf, 0x0a, 0xb5, 0x00,
|
||||||
|
0xaf, 0xb3, 0x1b, 0x58, 0x1b, 0x45, 0x78, 0x1d, 0x42, 0x6b, 0xb5, 0x56, 0x1d, 0x65, 0x0c, 0x81,
|
||||||
|
0x81, 0xa5, 0x82, 0x90, 0x77, 0xca, 0x6e, 0x13, 0x8e, 0x18, 0xf2, 0xcc, 0x6c, 0xd8, 0x1f, 0xef,
|
||||||
|
0xfe, 0xc0, 0x10, 0x0f, 0x9d, 0x3c, 0xa1, 0x85, 0x29, 0xf1, 0x59, 0xeb, 0x4d, 0xb8, 0x86, 0x10,
|
||||||
|
0x7b, 0x83, 0xdb, 0xd0, 0xc4, 0xb8, 0x17, 0xdc, 0xda, 0xe4, 0x87, 0xa5, 0x58, 0xc1, 0x3f, 0x74,
|
||||||
|
0x95, 0x3f, 0xdc, 0x6e, 0xac, 0xb9, 0x17, 0x18, 0x96, 0xd1, 0x50, 0xe1, 0xb6, 0xcc, 0x82, 0xe6,
|
||||||
|
0x84, 0xb5, 0x6e, 0xb5, 0xdc, 0x38, 0xe6, 0x0d, 0xd4, 0xc1, 0x4e, 0xfc, 0x0a, 0x27, 0x21, 0x02,
|
||||||
|
0xd5, 0x75, 0x51, 0x79, 0xa0, 0xed, 0xe9, 0xc5, 0x96, 0x89, 0xb6, 0xd4, 0x08, 0xa7, 0xe0, 0x91,
|
||||||
|
0xae, 0xa9, 0x37, 0x34, 0xa3, 0x52, 0x0a, 0xd4, 0x01, 0xe9, 0x2e, 0x1a, 0x4b, 0xe5, 0x3b, 0x56,
|
||||||
|
0x5a, 0x48, 0x1f, 0xfd, 0x2c, 0x99, 0x35, 0xf3, 0x03, 0x04, 0x18, 0xfe, 0x45, 0xe0, 0xda, 0xfc,
|
||||||
|
0x9b, 0xb2, 0x32, 0x16, 0x70, 0x47, 0x6e, 0x98, 0x1d, 0x42, 0x4b, 0x7a, 0xd5, 0x2c, 0x60, 0x9d,
|
||||||
|
0x70, 0xcf, 0x5b, 0xa7, 0x7a, 0xa9, 0xc9, 0xad, 0x25, 0x24, 0x0a, 0xfc, 0xe9, 0xe9, 0x1e, 0x4e,
|
||||||
|
0xa5, 0xec, 0xde, 0x51, 0x54, 0x39, 0x39, 0x97, 0x8d, 0x77, 0x74, 0x1c, 0xce, 0x53, 0xc4, 0x26,
|
||||||
|
0x3a, 0x1c, 0x59, 0x83, 0xbe, 0xdf, 0x20, 0x81, 0x5a, 0xb7, 0x67, 0x0c, 0xce, 0xf0, 0x9f, 0x58,
|
||||||
|
0xf1, 0xa1, 0xca, 0xd9, 0x02, 0xd1, 0x31, 0x61, 0x11, 0x98, 0x02, 0x4a, 0x09, 0x23, 0x75, 0x85,
|
||||||
|
0xdc, 0x84, 0xee, 0x66, 0x32, 0x4b, 0xb3, 0x59, 0x1a, 0x5f, 0x6a, 0x78, 0xfa, 0xbc, 0x86, 0x6b,
|
||||||
|
0xb4, 0xe8, 0xa4, 0x74, 0x53, 0xb9, 0xaa, 0x35, 0x86, 0x97, 0x81, 0x1e, 0xc0, 0x74, 0x47, 0x83,
|
||||||
|
0xf4, 0x0e, 0x7e, 0x12, 0xd3, 0xa4, 0xf8, 0x28, 0x13, 0x83, 0xc0, 0x1d, 0x94, 0x58, 0xbc, 0x63,
|
||||||
|
0xbf, 0x3e, 0xd0, 0x1f, 0xd4, 0x3e, 0xf6, 0xe5, 0xe6, 0x6c, 0x4b, 0x06, 0x32, 0x69, 0x4b, 0x1a,
|
||||||
|
0x47, 0x3d, 0x0b, 0xd0, 0x8a, 0xf2, 0x7f, 0xf2, 0x1b, 0x72, 0x91, 0xfa, 0x8a, 0x5f, 0x45, 0xd6,
|
||||||
|
0x88, 0x64, 0x7f, 0x01, 0x4f, 0xcb, 0x09, 0xee, 0x42, 0x43, 0x9f, 0x4d, 0xd6, 0x4a, 0x69, 0x6c,
|
||||||
|
0x46, 0x07, 0xba, 0x19, 0x15, 0x6a, 0x3a, 0x9e, 0x40, 0x24, 0x88, 0x1d, 0x96, 0x49, 0xdd, 0x98,
|
||||||
|
0xe7, 0x41, 0x36, 0x4f, 0x53, 0xbb, 0xea, 0x40, 0x93, 0x91, 0x5d, 0x2b, 0x5a, 0x76, 0x81, 0x9a,
|
||||||
|
0x66, 0x41, 0x39, 0x7d, 0xb7, 0x61, 0x99, 0x34, 0xa0, 0x5f, 0x57, 0x6b, 0xe0, 0xb0, 0x54, 0xe5,
|
||||||
|
0x3a, 0x11, 0x49, 0x8b, 0x82, 0x74, 0x55, 0xf3, 0x35, 0x9b, 0xfc, 0x2d, 0xdb, 0xa2, 0x91, 0x57,
|
||||||
|
0x7d, 0x86, 0x7d, 0x0b, 0xae, 0xee, 0x59, 0x6d, 0x5e, 0x91, 0x01, 0x79, 0x06, 0x06, 0xfd, 0xbf,
|
||||||
|
0xb5, 0xba, 0xad, 0x49, 0xab, 0x99, 0x82, 0x68, 0x97, 0x80, 0xb9, 0x50, 0x9c, 0x2c, 0x20, 0x38,
|
||||||
|
0xa2, 0xf6, 0xbe, 0xab, 0x69, 0x45, 0x50, 0x77, 0x5a, 0x36, 0x8e, 0x9e, 0xae, 0x77, 0x5e, 0xc6,
|
||||||
|
0xc7, 0xf6, 0x8c, 0x86, 0x9a, 0xa8, 0xd5, 0x4a, 0x0d, 0x01, 0xdd, 0x58, 0xa3, 0xa8, 0xeb, 0xf0,
|
||||||
|
0xf7, 0x22, 0xaa, 0x54, 0xad, 0x8d, 0xee, 0x5b, 0x11, 0xed, 0xd0, 0x5c, 0x9b, 0x43, 0x1e, 0x43,
|
||||||
|
0xb9, 0x32, 0xdf, 0xdf, 0x02, 0xcf, 0xd5, 0x1d, 0xbf, 0x35, 0xc4, 0xb0, 0xcb, 0x63, 0x3a, 0x0f,
|
||||||
|
0x9d, 0xc6, 0x7c, 0x3d, 0xf9, 0xf7, 0x6f, 0x9b, 0xfc, 0xb8, 0x07, 0x67, 0x6a, 0x21, 0x13, 0x4c,
|
||||||
|
0x81, 0x9a, 0x68, 0xe0, 0x47, 0x06, 0x19, 0xe4, 0xd9, 0xe5, 0xc5, 0xb9, 0x2e, 0x6c, 0x6c, 0xa9,
|
||||||
|
0x5c, 0x90, 0x87, 0x59, 0x9a, 0x15, 0x81, 0x81, 0x37, 0xcc, 0x83, 0x6e, 0xf7, 0xfe, 0xfe, 0xde,
|
||||||
|
0xb9, 0xdf, 0x77, 0x18, 0x9f, 0x74, 0x7d, 0xd7, 0x75, 0xf1, 0x68, 0x6e, 0x10, 0x79, 0x96, 0x0e,
|
||||||
|
0x0c, 0xbc, 0xff, 0x33, 0x88, 0x2a, 0x85, 0xe8, 0x2f, 0x5d, 0xf7, 0xd0, 0x05, 0x13, 0x2c, 0x7f,
|
||||||
|
0x0c, 0x5e, 0x1d, 0x1d, 0xc1, 0x44, 0x77, 0x08, 0x9d, 0x9c, 0x7d, 0xa1, 0x03, 0x02, 0x1d, 0xf8,
|
||||||
|
0x5f, 0xd9, 0xd1, 0x51, 0x65, 0x15, 0xd2, 0xc1, 0x4b, 0x04, 0xdd, 0x15, 0x03, 0xbd, 0x21, 0x56,
|
||||||
|
0x95, 0x06, 0xc4, 0x75, 0x3c, 0x9b, 0x1c, 0x0d, 0x55, 0xa9, 0xfb, 0xd8, 0xde, 0xbf, 0x3a, 0x38,
|
||||||
|
0x3b, 0xb8, 0xea, 0x9d, 0x1d, 0x5e, 0x79, 0xc7, 0x6f, 0x7d, 0xdb, 0x97, 0xe5, 0x1d, 0x97, 0xf4,
|
||||||
|
0x6d, 0xdf, 0x3b, 0xf3, 0xfa, 0xb5, 0x1e, 0x2c, 0x39, 0x1c, 0x03, 0xa0, 0xef, 0xc2, 0x0c, 0xef,
|
||||||
|
0xf0, 0x6a, 0xff, 0xec, 0xf8, 0xa2, 0x6f, 0xf7, 0xce, 0xb0, 0xf4, 0x73, 0x7c, 0xd6, 0xbf, 0xea,
|
||||||
|
0x01, 0xb2, 0xa3, 0x2b, 0xaf, 0x7f, 0xe6, 0x79, 0x57, 0x47, 0x30, 0x86, 0x05, 0x08, 0xf9, 0x79,
|
||||||
|
0x08, 0x9f, 0xde, 0x7e, 0xbd, 0x18, 0x24, 0xb4, 0xcf, 0x29, 0x6f, 0x38, 0x02, 0xa3, 0xbc, 0xf3,
|
||||||
|
0x33, 0xaa, 0x31, 0xe9, 0x9c, 0xf4, 0xe6, 0x2a, 0xc7, 0x5b, 0x8e, 0x40, 0x30, 0xd5, 0x03, 0xbf,
|
||||||
|
0xab, 0x81, 0xd8, 0xc1, 0x42, 0x60, 0x23, 0xc9, 0x05, 0xef, 0x20, 0x9e, 0xcf, 0xf4, 0x85, 0xa3,
|
||||||
|
0xca, 0xeb, 0xbf, 0xb0, 0x98, 0x3a, 0xca, 0xbf, 0xac, 0xa7, 0xb6, 0xf5, 0x73, 0x17, 0x68, 0x0b,
|
||||||
|
0x6e, 0x87, 0xf1, 0x3c, 0x37, 0x7d, 0x03, 0xd8, 0x6a, 0xdb, 0xf0, 0x57, 0x67, 0xef, 0x58, 0xfb,
|
||||||
|
0x1b, 0x57, 0xdd, 0x92, 0xcf, 0x6f, 0x4f, 0x90, 0x9e, 0x39, 0x39, 0x35, 0xdd, 0xf3, 0x57, 0x32,
|
||||||
|
0x9e, 0x8d, 0x74, 0x6c, 0x29, 0xad, 0x49, 0x55, 0x65, 0x95, 0x61, 0x21, 0x06, 0x11, 0x72, 0x30,
|
||||||
|
0x44, 0x0c, 0xf4, 0xd0, 0x83, 0x89, 0x80, 0xfc, 0x31, 0xe5, 0xef, 0x4e, 0xd6, 0x70, 0x10, 0x29,
|
||||||
|
0x55, 0x9d, 0xdf, 0x44, 0x6c, 0x3d, 0x8f, 0x9b, 0x7e, 0xf9, 0xb5, 0x7e, 0x68, 0x41, 0x82, 0xe4,
|
||||||
|
0xbd, 0x16, 0x46, 0x11, 0xf9, 0x25, 0x2f, 0x74, 0xac, 0x61, 0x59, 0x8e, 0xfa, 0x15, 0x0d, 0x6d,
|
||||||
|
0xd4, 0x73, 0xdd, 0x9f, 0x4a, 0xdd, 0xd4, 0x45, 0x74, 0x7c, 0x60, 0x92, 0x51, 0x63, 0xb0, 0xd1,
|
||||||
|
0xad, 0xee, 0xe7, 0x8c, 0xda, 0x9a, 0x61, 0x1a, 0xfd, 0xe7, 0xe7, 0x8f, 0xbf, 0x98, 0xaa, 0x5e,
|
||||||
|
0x45, 0x83, 0x37, 0xcb, 0xb2, 0x84, 0x6e, 0x0c, 0xae, 0xdf, 0x0c, 0xf5, 0x83, 0x8f, 0x56, 0x42,
|
||||||
|
0x2e, 0x5a, 0xf9, 0x38, 0x9c, 0x8a, 0x64, 0x3e, 0x2e, 0x30, 0x67, 0x32, 0x29, 0xa4, 0xd9, 0x36,
|
||||||
|
0x0a, 0x11, 0x12, 0x72, 0x4c, 0xc7, 0x6d, 0xe3, 0x87, 0x25, 0x77, 0x0a, 0x60, 0x9f, 0x9a, 0x9e,
|
||||||
|
0xb5, 0x32, 0x30, 0x2f, 0x47, 0x98, 0x9b, 0x15, 0x98, 0x42, 0x2d, 0x4c, 0x67, 0x60, 0x8c, 0xa0,
|
||||||
|
0x09, 0xff, 0x25, 0xaf, 0x1c, 0x70, 0x63, 0xd4, 0xe5, 0x83, 0x24, 0x6f, 0x4d, 0xa7, 0x7d, 0xdb,
|
||||||
|
0xd5, 0x04, 0x62, 0x96, 0xef, 0xfc, 0x51, 0xb0, 0xec, 0xb6, 0x71, 0x06, 0xac, 0xe6, 0xc0, 0x29,
|
||||||
|
0x41, 0xc5, 0x2f, 0x1e, 0xe0, 0xad, 0xcb, 0x6f, 0x17, 0xe7, 0x67, 0xe0, 0x03, 0xff, 0x41, 0xe1,
|
||||||
|
0x04, 0x58, 0x08, 0xc8, 0x5e, 0xb1, 0xf3, 0xe7, 0x94, 0xdd, 0xc1, 0x79, 0xe2, 0xc6, 0x5e, 0x62,
|
||||||
|
0x1d, 0x65, 0x60, 0x80, 0x11, 0xa7, 0x78, 0x75, 0x02, 0xa8, 0xba, 0x88, 0xda, 0x58, 0xc1, 0xe9,
|
||||||
|
0x7f, 0x8b, 0xe6, 0xe1, 0x22, 0x86, 0x6d, 0x96, 0x67, 0x41, 0x86, 0x1e, 0x83, 0x4d, 0xa4, 0x72,
|
||||||
|
0xc3, 0xee, 0x17, 0x39, 0xf4, 0xd1, 0x4b, 0xfa, 0x20, 0x6c, 0x83, 0x74, 0x88, 0x21, 0x6d, 0xc3,
|
||||||
|
0xc1, 0xbb, 0x85, 0x39, 0x16, 0x8b, 0x18, 0x70, 0xf3, 0x19, 0x4e, 0x9f, 0xe1, 0xa4, 0xd4, 0x9f,
|
||||||
|
0x0f, 0x82, 0xce, 0x60, 0xb3, 0x53, 0x1a, 0x7f, 0x0a, 0x53, 0xbc, 0x0f, 0xd0, 0x59, 0x05, 0x82,
|
||||||
|
0x22, 0x2d, 0xce, 0x94, 0xd3, 0x71, 0x60, 0x74, 0x81, 0x1c, 0x7b, 0x1b, 0x39, 0x94, 0x73, 0x2c,
|
||||||
|
0xff, 0xd0, 0x16, 0x39, 0xc6, 0x7b, 0xec, 0x1f, 0x10, 0x59, 0xe8, 0x6a, 0x0c, 0x90, 0xcf, 0x92,
|
||||||
|
0x98, 0x41, 0x9b, 0x36, 0x4c, 0x3d, 0x92, 0x19, 0x65, 0x73, 0x61, 0x4a, 0xe6, 0x56, 0xb6, 0x47,
|
||||||
|
0xf7, 0x2d, 0xb9, 0x2a, 0x03, 0xf7, 0x66, 0x1a, 0x9f, 0x3e, 0x7e, 0xbe, 0x84, 0xdd, 0xed, 0x2a,
|
||||||
|
0x39, 0x83, 0x32, 0xa2, 0x80, 0x43, 0x29, 0xcb, 0xbf, 0x33, 0x3e, 0x7b, 0x07, 0x89, 0x45, 0xa9,
|
||||||
|
0x34, 0xa1, 0x76, 0x89, 0x2a, 0xdd, 0x80, 0x63, 0x26, 0x56, 0xd3, 0xb8, 0xbc, 0xf1, 0x35, 0x43,
|
||||||
|
0xcb, 0x7e, 0xe9, 0xad, 0xc2, 0xe2, 0x31, 0x8b, 0xc8, 0xfa, 0x39, 0x12, 0x15, 0x1f, 0xb2, 0x31,
|
||||||
|
0x03, 0x5d, 0x4c, 0xc6, 0xe6, 0xb4, 0x10, 0xc1, 0x9a, 0x7d, 0x06, 0x3b, 0x06, 0x3d, 0x65, 0x35,
|
||||||
|
0xd3, 0xb5, 0x04, 0x7f, 0xac, 0x2c, 0x25, 0xbc, 0x0f, 0x13, 0x41, 0xc6, 0x54, 0x80, 0x32, 0x96,
|
||||||
|
0x71, 0xce, 0xd8, 0x03, 0xf0, 0x3d, 0x43, 0x6e, 0x62, 0x57, 0x5e, 0xd0, 0xa1, 0x15, 0x29, 0x48,
|
||||||
|
0x2a, 0xb5, 0xc6, 0xb4, 0x86, 0x72, 0x4a, 0x79, 0x85, 0x64, 0x9a, 0xea, 0x12, 0x46, 0x38, 0xf2,
|
||||||
|
0x17, 0x42, 0xb0, 0xb0, 0x3a, 0xa0, 0xaf, 0x40, 0x02, 0xe0, 0xa5, 0x56, 0x25, 0x59, 0x29, 0x6c,
|
||||||
|
0x2c, 0xcf, 0xc8, 0xd2, 0x67, 0xb3, 0xd7, 0x00, 0x9b, 0xce, 0x98, 0x20, 0x49, 0x0c, 0xfb, 0x93,
|
||||||
|
0x8c, 0x1f, 0x09, 0x52, 0x0e, 0x19, 0x56, 0x8b, 0xd3, 0xe6, 0xc2, 0x80, 0xbb, 0x7e, 0xf3, 0xa2,
|
||||||
|
0x99, 0x0c, 0xdc, 0x21, 0x96, 0x64, 0xd1, 0x2c, 0xe1, 0x3c, 0x31, 0x14, 0xa3, 0x80, 0x0e, 0xc5,
|
||||||
|
0xde, 0xde, 0xda, 0x41, 0xdc, 0x6a, 0x56, 0x7f, 0x58, 0x02, 0xab, 0xab, 0xb5, 0x55, 0x08, 0x6d,
|
||||||
|
0x15, 0xc3, 0xb5, 0x8c, 0x44, 0x43, 0x46, 0xa0, 0x0c, 0x5c, 0x77, 0x88, 0x52, 0x14, 0x0d, 0x02,
|
||||||
|
0xf2, 0x79, 0x31, 0x85, 0x83, 0x9b, 0x66, 0x5d, 0xb4, 0x59, 0xbf, 0x95, 0x6a, 0xa5, 0x90, 0xe1,
|
||||||
|
0xad, 0x1f, 0x5a, 0x1b, 0x19, 0x73, 0x36, 0x93, 0x07, 0xef, 0x01, 0xb9, 0x85, 0x8d, 0x5e, 0xad,
|
||||||
|
0xb6, 0xb0, 0x34, 0xf2, 0xc0, 0x3f, 0x6c, 0xae, 0x54, 0x72, 0x3f, 0xb8, 0x76, 0xed, 0x7e, 0xf9,
|
||||||
|
0x07, 0x47, 0xae, 0xea, 0xe3, 0x66, 0x55, 0x56, 0x28, 0x44, 0x80, 0x8b, 0xa1, 0x03, 0x2e, 0xa8,
|
||||||
|
0xd9, 0x30, 0x24, 0x54, 0x9e, 0x96, 0x15, 0xc9, 0xfa, 0x39, 0x50, 0x8f, 0x62, 0xd4, 0x42, 0xc3,
|
||||||
|
0x3b, 0x61, 0x08, 0xbd, 0x52, 0xc3, 0xe8, 0x89, 0x7f, 0x70, 0x68, 0xe9, 0x9a, 0x1b, 0xf6, 0x82,
|
||||||
|
0x1f, 0xc0, 0x65, 0x44, 0x92, 0xcd, 0xe9, 0x4a, 0x4d, 0xe0, 0x81, 0xee, 0xc7, 0x6d, 0xc0, 0xf2,
|
||||||
|
0xf9, 0xb0, 0x8e, 0x8c, 0x8d, 0x09, 0x97, 0xa8, 0x5e, 0x2a, 0x6e, 0x92, 0x42, 0xfe, 0x82, 0x80,
|
||||||
|
0x9f, 0x9e, 0x0e, 0x5e, 0x06, 0x01, 0xd5, 0x7c, 0x5b, 0x4b, 0x79, 0x07, 0x70, 0xc7, 0x69, 0xf8,
|
||||||
|
0x65, 0xb5, 0x46, 0x20, 0x10, 0x01, 0xb5, 0x60, 0xbe, 0x91, 0xcd, 0x67, 0x77, 0x90, 0x61, 0x42,
|
||||||
|
0xbc, 0x01, 0x37, 0x04, 0xbd, 0xe2, 0xe9, 0x49, 0x8c, 0x5c, 0xf8, 0xe7, 0x04, 0xe4, 0xf0, 0xf4,
|
||||||
|
0xf4, 0xf2, 0x17, 0x39, 0x0e, 0x0b, 0x7c, 0xc8, 0x04, 0x9d, 0x80, 0xc9, 0x0b, 0xab, 0x81, 0x74,
|
||||||
|
0x85, 0x44, 0xb0, 0xaf, 0x30, 0x03, 0xc7, 0xf4, 0x6b, 0xae, 0x49, 0xea, 0x78, 0x37, 0x28, 0x1d,
|
||||||
|
0x59, 0xad, 0x0b, 0xc2, 0x6b, 0xf7, 0x66, 0xad, 0x57, 0xd7, 0x8e, 0xe3, 0x84, 0x37, 0x43, 0x0a,
|
||||||
|
0x9d, 0x01, 0xee, 0x02, 0x57, 0xbb, 0x04, 0x0a, 0xbf, 0x2a, 0x41, 0xda, 0xf1, 0x00, 0x24, 0xea,
|
||||||
|
0xcc, 0xc2, 0x7c, 0x5d, 0x9a, 0x31, 0x97, 0xb0, 0x3e, 0xc4, 0x9f, 0x71, 0x1a, 0xca, 0x90, 0xbe,
|
||||||
|
0x4d, 0xc1, 0x60, 0x99, 0xd2, 0x88, 0x60, 0x8c, 0x0b, 0xd3, 0xb8, 0xc4, 0x5b, 0x70, 0x7c, 0x17,
|
||||||
|
0x89, 0x82, 0xa9, 0xee, 0x60, 0x21, 0xd8, 0x92, 0x59, 0x52, 0x14, 0xc9, 0x44, 0x29, 0xd9, 0x23,
|
||||||
|
0x9b, 0x73, 0x72, 0xc7, 0xd9, 0x7d, 0x01, 0x12, 0x21, 0xbf, 0xb3, 0x39, 0x29, 0xa6, 0x6c, 0x9e,
|
||||||
|
0xc6, 0x24, 0xe7, 0xec, 0x2e, 0xbc, 0x4b, 0x1f, 0x89, 0x76, 0x40, 0xfa, 0xce, 0x7a, 0x16, 0xc2,
|
||||||
|
0xa6, 0x43, 0x2a, 0x00, 0xcb, 0x64, 0x31, 0xc1, 0x8d, 0x04, 0xc5, 0x97, 0xd7, 0xda, 0x30, 0x21,
|
||||||
|
0xa7, 0x1c, 0x26, 0x8c, 0xf1, 0x82, 0x1e, 0x2f, 0xab, 0xcb, 0x35, 0x15, 0x15, 0x58, 0x91, 0x02,
|
||||||
|
0x69, 0x83, 0x8b, 0x85, 0xb8, 0x44, 0xee, 0x28, 0x80, 0x51, 0x8d, 0x1c, 0xf5, 0x7e, 0x4a, 0x39,
|
||||||
|
0x75, 0xc0, 0x19, 0x5e, 0x20, 0x71, 0xf0, 0x2d, 0x27, 0xc5, 0x15, 0x92, 0x97, 0xe0, 0x1d, 0xcb,
|
||||||
|
0xc9, 0xda, 0xd6, 0xdf, 0x25, 0x8b, 0xa2, 0x9e, 0x8c, 0x6c, 0x1d, 0xae, 0x36, 0x62, 0xe3, 0x41,
|
||||||
|
0xe6, 0xfa, 0x79, 0x04, 0x3a, 0xb3, 0xcd, 0xe1, 0xd6, 0x9d, 0x38, 0x9a, 0xb9, 0x92, 0x37, 0xca,
|
||||||
|
0x0d, 0x0e, 0xe8, 0x11, 0xa6, 0x29, 0x90, 0xba, 0x40, 0xec, 0x4e, 0x52, 0x81, 0x07, 0xcb, 0xe0,
|
||||||
|
0x44, 0x1e, 0xdb, 0x67, 0xd2, 0xd0, 0xbb, 0xff, 0xd4, 0xf8, 0xff, 0x27, 0xfe, 0xa1, 0x0b, 0x5b,
|
||||||
|
0xd6, 0xd2, 0x54, 0x6e, 0xb5, 0x33, 0xd5, 0xca, 0x41, 0x71, 0x70, 0x50, 0x7c, 0xb4, 0xc5, 0xe2,
|
||||||
|
0x87, 0x7c, 0xed, 0xb1, 0x58, 0x50, 0x07, 0xb8, 0xe6, 0x37, 0x76, 0x18, 0xb4, 0x5f, 0x92, 0xea,
|
||||||
|
0x53, 0x66, 0xe8, 0xd4, 0x1e, 0x83, 0x18, 0x7b, 0xdc, 0x0e, 0x55, 0xd1, 0x1d, 0x23, 0x1e, 0x86,
|
||||||
|
0xbf, 0x4a, 0x12, 0x46, 0xe9, 0x18, 0xb2, 0x52, 0x27, 0xbf, 0xd0, 0xc7, 0xc2, 0x64, 0x16, 0x28,
|
||||||
|
0x2f, 0x60, 0xc1, 0xc0, 0x03, 0x21, 0x0d, 0x2b, 0xbc, 0xf2, 0xf8, 0xa1, 0xbc, 0x47, 0x21, 0x6b,
|
||||||
|
0x7b, 0xe0, 0x9d, 0x4d, 0x76, 0x9d, 0xdd, 0xac, 0x6f, 0x9c, 0x76, 0x10, 0x93, 0xd6, 0x89, 0x29,
|
||||||
|
0xf3, 0x54, 0x20, 0xaa, 0xba, 0x90, 0xd9, 0x31, 0x4f, 0xdd, 0xb3, 0xac, 0x5f, 0x49, 0x21, 0x1f,
|
||||||
|
0x49, 0x9b, 0x8f, 0xda, 0xf0, 0xfa, 0xb2, 0x64, 0x03, 0x61, 0x75, 0x73, 0x22, 0x9f, 0x32, 0xe8,
|
||||||
|
0x27, 0x53, 0x88, 0xaf, 0x70, 0xf0, 0x15, 0x21, 0x24, 0x96, 0xeb, 0x7a, 0x05, 0x38, 0xa4, 0x66,
|
||||||
|
0x26, 0x05, 0x8e, 0x1c, 0x2f, 0x03, 0xb6, 0x95, 0x0f, 0x8c, 0xcf, 0x14, 0xdf, 0x87, 0xa8, 0x17,
|
||||||
|
0x33, 0xb5, 0x97, 0x2a, 0xf8, 0xbc, 0x83, 0x00, 0x7e, 0xbc, 0x41, 0x59, 0x9f, 0x31, 0xf5, 0x73,
|
||||||
|
0x00, 0xbb, 0x68, 0x33, 0x51, 0x51, 0x54, 0xb2, 0x10, 0xed, 0x64, 0x21, 0x92, 0x2c, 0x94, 0xef,
|
||||||
|
0xbf, 0x90, 0x85, 0x68, 0x1b, 0x0b, 0x48, 0x38, 0xe4, 0x13, 0x78, 0x67, 0x2f, 0xe9, 0x8f, 0x76,
|
||||||
|
0x94, 0x3f, 0x4e, 0x59, 0xfe, 0xa8, 0xa8, 0x85, 0x1c, 0x73, 0x55, 0x9a, 0x1e, 0xb2, 0xa0, 0x98,
|
||||||
|
0xb9, 0x85, 0xbc, 0xa7, 0xc9, 0x01, 0xa2, 0x84, 0xbe, 0x16, 0x07, 0x15, 0x41, 0x78, 0xaf, 0xb2,
|
||||||
|
0x5d, 0xd5, 0xaa, 0x07, 0x85, 0xa8, 0x12, 0xa0, 0xf3, 0x79, 0x60, 0x18, 0x95, 0x01, 0x50, 0x30,
|
||||||
|
0x00, 0x3a, 0x42, 0x75, 0x2a, 0x15, 0x1f, 0x32, 0x5c, 0xdf, 0xaa, 0xc2, 0x2f, 0x8e, 0xa0, 0x47,
|
||||||
|
0x46, 0x5f, 0xaf, 0xd4, 0x0f, 0x6f, 0x4b, 0x95, 0xaf, 0x57, 0x63, 0x7b, 0xde, 0x8d, 0x95, 0x43,
|
||||||
|
0xc6, 0xfc, 0xea, 0x87, 0x65, 0xd5, 0x81, 0x95, 0x6c, 0xd1, 0x05, 0x1f, 0xfc, 0xa3, 0xe7, 0xba,
|
||||||
|
0xab, 0xbf, 0xd9, 0xe4, 0x56, 0x5e, 0xb7, 0x2e, 0x11, 0x4e, 0xbe, 0xee, 0xad, 0xc3, 0x62, 0xed,
|
||||||
|
0x5b, 0x7f, 0xf9, 0x8d, 0xaf, 0x7d, 0xfc, 0xf2, 0xac, 0x0d, 0x5c, 0x98, 0x84, 0xfb, 0x10, 0xa7,
|
||||||
|
0x83, 0x5c, 0x27, 0xe7, 0xae, 0xdd, 0xf1, 0xb7, 0xdd, 0x2b, 0x7d, 0x98, 0x81, 0xf3, 0x0c, 0x6e,
|
||||||
|
0x77, 0xd5, 0xeb, 0x71, 0xa9, 0x7c, 0x65, 0xdd, 0x96, 0x46, 0xaa, 0x6e, 0xc6, 0x36, 0xde, 0x2f,
|
||||||
|
0x82, 0xb6, 0x95, 0x46, 0x1b, 0x04, 0xd9, 0x4f, 0x49, 0xeb, 0xfa, 0x68, 0x10, 0xe9, 0x75, 0xd5,
|
||||||
|
0xf3, 0xb9, 0x73, 0x3c, 0x7f, 0x1b, 0xf2, 0x3d, 0x86, 0xcd, 0x5f, 0x06, 0x32, 0x25, 0x7b, 0xfd,
|
||||||
|
0xba, 0x39, 0x29, 0xc2, 0xfb, 0xed, 0xd6, 0xfd, 0x54, 0xd8, 0xbe, 0xcb, 0x6a, 0x2c, 0x4a, 0x1b,
|
||||||
|
0xa3, 0xa1, 0x05, 0x11, 0xaa, 0xd9, 0x51, 0xab, 0xc2, 0xd5, 0x55, 0x90, 0x62, 0x05, 0x71, 0xe3,
|
||||||
|
0xe6, 0xe8, 0x8d, 0xbc, 0x15, 0xbd, 0x4e, 0xe2, 0x7f, 0x36, 0xaf, 0x53, 0x6f, 0xde, 0xac, 0x0f,
|
||||||
|
0x47, 0x98, 0x92, 0xd3, 0x5d, 0x07, 0x46, 0x7d, 0xc5, 0xb7, 0x89, 0x18, 0x8d, 0xa5, 0x86, 0x57,
|
||||||
|
0x57, 0xa3, 0x6e, 0x6c, 0xd2, 0x1a, 0x68, 0xd4, 0x79, 0x1b, 0xc3, 0x8d, 0x32, 0xd6, 0x77, 0x11,
|
||||||
|
0x34, 0x54, 0x19, 0x67, 0x2d, 0xcf, 0x9a, 0xd4, 0x42, 0x8f, 0xb1, 0x47, 0xad, 0x6d, 0xc5, 0xc4,
|
||||||
|
0xd2, 0xc3, 0x1a, 0x96, 0xd5, 0x32, 0x0a, 0xb1, 0xcd, 0x22, 0x20, 0xaf, 0xaa, 0xb2, 0xaa, 0xad,
|
||||||
|
0x46, 0x21, 0x94, 0x45, 0x30, 0xf9, 0x98, 0x40, 0x7d, 0x28, 0xdd, 0x67, 0x01, 0x68, 0xfe, 0x25,
|
||||||
|
0x3b, 0xa3, 0x0f, 0xa6, 0xea, 0xb6, 0x85, 0xd4, 0x78, 0xf9, 0xb3, 0x7f, 0x63, 0x29, 0xad, 0x96,
|
||||||
|
0x2f, 0x31, 0xb8, 0xcd, 0xaa, 0x93, 0x54, 0x11, 0x71, 0x06, 0x92, 0x75, 0x6d, 0xb7, 0xbe, 0xc7,
|
||||||
|
0x15, 0x2a, 0x48, 0x5b, 0x6c, 0xbe, 0x0e, 0x54, 0x26, 0x1d, 0x8d, 0xbc, 0x1e, 0xa4, 0x60, 0xa3,
|
||||||
|
0xa3, 0x27, 0xde, 0x7c, 0xb0, 0xa0, 0x4f, 0x37, 0x48, 0x96, 0xe1, 0x1a, 0x58, 0x37, 0x04, 0x37,
|
||||||
|
0x67, 0xf6, 0x3a, 0xac, 0xcc, 0xf5, 0xf6, 0xd8, 0xaa, 0x3a, 0xc8, 0x94, 0xab, 0xef, 0x3a, 0x40,
|
||||||
|
0xe2, 0x91, 0xff, 0x19, 0x20, 0x38, 0x49, 0x26, 0x7f, 0xd2, 0x12, 0xac, 0x71, 0xa3, 0xba, 0xf3,
|
||||||
|
0xe6, 0xbb, 0xf1, 0xbc, 0x45, 0x3f, 0x65, 0x71, 0xf5, 0x2f, 0x3e, 0xf3, 0xd8, 0xa8, 0xb7, 0xd4,
|
||||||
|
0xff, 0x5f, 0x8d, 0xae, 0xfa, 0x5f, 0x63, 0xfe, 0x17, 0x66, 0xba, 0xb1, 0x98, 0x32, 0x33, 0x00,
|
||||||
|
0x00
|
||||||
|
};
|
3902
wled00/html_ui.h
3902
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -433,6 +433,15 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
|||||||
else callMode = CALL_MODE_DIRECT_CHANGE; // possible bugfix for playlist only containing HTTP API preset FX=~
|
else callMode = CALL_MODE_DIRECT_CHANGE; // possible bugfix for playlist only containing HTTP API preset FX=~
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (root.containsKey(F("rmcpal")) && root[F("rmcpal")].as<bool>()) {
|
||||||
|
if (strip.customPalettes.size()) {
|
||||||
|
char fileName[32];
|
||||||
|
sprintf_P(fileName, PSTR("/palette%d.json"), strip.customPalettes.size()-1);
|
||||||
|
if (WLED_FS.exists(fileName)) WLED_FS.remove(fileName);
|
||||||
|
strip.loadCustomPalettes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stateUpdated(callMode);
|
stateUpdated(callMode);
|
||||||
if (presetToRestore) currentPreset = presetToRestore;
|
if (presetToRestore) currentPreset = presetToRestore;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#ifdef WLED_ENABLE_PIXART
|
#ifdef WLED_ENABLE_PIXART
|
||||||
#include "html_pixart.h"
|
#include "html_pixart.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "html_cpal.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Integrated HTTP web server page declarations
|
* Integrated HTTP web server page declarations
|
||||||
@ -58,8 +59,10 @@ void handleUpload(AsyncWebServerRequest *request, const String& filename, size_t
|
|||||||
if (filename.indexOf(F("cfg.json")) >= 0) { // check for filename with or without slash
|
if (filename.indexOf(F("cfg.json")) >= 0) { // check for filename with or without slash
|
||||||
doReboot = true;
|
doReboot = true;
|
||||||
request->send(200, "text/plain", F("Configuration restore successful.\nRebooting..."));
|
request->send(200, "text/plain", F("Configuration restore successful.\nRebooting..."));
|
||||||
} else
|
} else {
|
||||||
|
if (filename.indexOf(F("palette")) >= 0 && filename.indexOf(F(".json")) >= 0) strip.loadCustomPalettes();
|
||||||
request->send(200, "text/plain", F("File Uploaded!"));
|
request->send(200, "text/plain", F("File Uploaded!"));
|
||||||
|
}
|
||||||
cacheInvalidate++;
|
cacheInvalidate++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -359,6 +362,15 @@ void initServer()
|
|||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
server.on("/cpal.htm", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||||
|
if (handleFileRead(request, "/cpal.htm")) return;
|
||||||
|
if (handleIfNoneMatchCacheHeader(request)) return;
|
||||||
|
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_cpal, PAGE_cpal_L);
|
||||||
|
response->addHeader(FPSTR(s_content_enc),"gzip");
|
||||||
|
setStaticContentCacheHeaders(response);
|
||||||
|
request->send(response);
|
||||||
|
});
|
||||||
|
|
||||||
#ifdef WLED_ENABLE_WEBSOCKETS
|
#ifdef WLED_ENABLE_WEBSOCKETS
|
||||||
server.addHandler(&ws);
|
server.addHandler(&ws);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user