1240 lines
99 KiB
JavaScript
1240 lines
99 KiB
JavaScript
function display_func(img1, img2, img3) {
|
|
$("#base_control").hide();
|
|
$("#line_control").hide();
|
|
$("#pic_control").hide();
|
|
$("#out_pic_control").hide();
|
|
$("#text_control").hide();
|
|
$("#circle_text_control").hide();
|
|
$("#out_text_control").hide();
|
|
$("#rect_control").hide();
|
|
$("#circle_control").hide();
|
|
$("#counter_control").hide();
|
|
$("#qrcode_Controll").hide();
|
|
$("#barcode_controll").hide();
|
|
$("#component_type").text(language_str("bg"));//"背景"
|
|
canvas1.discardActiveObject().renderAll();
|
|
canvas2.discardActiveObject().renderAll();
|
|
let _objs1 = canvas1.getObjects();
|
|
let g1 = [];
|
|
let g3 = [];
|
|
let g5 = [];
|
|
let left = 0;//左裁剪
|
|
let top = 0;//顶裁剪
|
|
let black_left = 0;//黑色左裁剪
|
|
let black_top = 0;//黑色顶裁剪
|
|
let all_left = 0;//预览图左裁剪
|
|
let all_top = 0;//预览图顶裁剪
|
|
let list1 = [..._objs1]
|
|
for (let item of list1) {
|
|
let idx = getIndex(item, canvas1);
|
|
//console.log("------");
|
|
//console.log(item.getCoords());
|
|
//console.log(getCoordsMinX(background_image.getCoords()));
|
|
//console.log(getCoordsMinX(item.getCoords()));
|
|
//console.log(getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()));
|
|
//console.log("------");
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > all_left) {
|
|
all_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > all_top) {
|
|
all_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g3.push(fabric.util.object.clone(item));
|
|
if (idx != 0 && (objs1[idx - 1].type == 10 || objs1[idx - 1].type == 4)) {
|
|
continue;//计数器 或 合成文字
|
|
}
|
|
if (idx != 0 && (objs1[idx - 1].type == 8 || objs1[idx - 1].type == 9)) {
|
|
continue;//二维码 条形码
|
|
}
|
|
if (idx != 0 && (objs1[idx - 1].type == 2)) {
|
|
continue;//合成图片
|
|
}
|
|
if (idx != 0 &&
|
|
(
|
|
(
|
|
objs1[idx - 1].type == 3
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 11
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//圆形文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 5//矩形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 6//圆形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 7//直线
|
|
&&
|
|
(item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")
|
|
)
|
|
||
|
|
objs1[idx - 1].black == true //勾选并入黑色图层
|
|
// (
|
|
// objs1[idx-1].type == 1//固定图片
|
|
// &&
|
|
// objs1[idx-1].black == true //勾选并入黑色图层
|
|
// )
|
|
)
|
|
) {
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > black_left) {
|
|
black_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > black_top) {
|
|
black_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g1.push(fabric.util.object.clone(item));
|
|
continue;//黑色文字 黑色矩形 黑色线条 黑色圆形
|
|
} else if (idx == 0) {
|
|
g1.push(fabric.util.object.clone(item));
|
|
}
|
|
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > left) {
|
|
left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > top) {
|
|
top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g1.push(fabric.util.object.clone(item));
|
|
}
|
|
let url1 = new fabric.Group(g1).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
|
|
g3.push(img1);
|
|
// 预览图缩小尺寸以减小文件大小,使用 multiplier 来缩放整个 Group,保持所有内容完整
|
|
// 原始尺寸 2787x2787,缩小到 512x512,比例约为 0.184
|
|
let url3 = new fabric.Group(g3).toDataURL({
|
|
format: 'png',
|
|
multiplier: 512 / 2787, // 约 0.184,缩小到 512x512,保持宽高比和所有内容
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
let url5 = new fabric.Group(g5).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: black_top,
|
|
left: black_left
|
|
});
|
|
let _objs2 = canvas2.getObjects();
|
|
let g2 = [];
|
|
let g4 = [];
|
|
let g6 = [];
|
|
left = 0;
|
|
top = 0;
|
|
black_top = 0;
|
|
black_left = 0;
|
|
all_top = 0;
|
|
all_left = 0;
|
|
for (let item of _objs2) {
|
|
let idx = getIndex(item, canvas2);
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > all_left) {
|
|
all_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > all_top) {
|
|
all_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g4.push(fabric.util.object.clone(item));
|
|
if (idx != 0 && (objs2[idx - 1].type == 10 || objs2[idx - 1].type == 4)) {
|
|
continue;//黑色字或计数器 或 合成文字
|
|
}
|
|
if (idx != 0 && (objs2[idx - 1].type == 8 || objs2[idx - 1].type == 9)) {
|
|
continue;//二维码 条形码
|
|
}
|
|
if (idx != 0 && (objs2[idx - 1].type == 2)) {
|
|
continue;//合成图片
|
|
}
|
|
if (idx != 0 && (objs2[idx - 1].type == 10)) {
|
|
continue;//合成图片
|
|
}
|
|
if (idx != 0 &&
|
|
(
|
|
(
|
|
objs2[idx - 1].type == 3
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 11
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//圆形文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 5//矩形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 6//圆形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 7//直线
|
|
&&
|
|
(item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")
|
|
)
|
|
||
|
|
objs2[idx - 1].black == true //勾选并入黑色图层
|
|
// (
|
|
// objs2[idx-1].type == 1//固定图片
|
|
// &&
|
|
// objs2[idx-1].black == true //勾选并入黑色图层
|
|
// )
|
|
)
|
|
) {
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > black_left) {
|
|
black_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > black_top) {
|
|
black_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g2.push(fabric.util.object.clone(item));
|
|
continue;//黑色文字 黑色矩形 黑色线条 黑色圆形
|
|
} else if (idx == 0) {
|
|
g2.push(fabric.util.object.clone(item));
|
|
}
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > left) {
|
|
left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > top) {
|
|
top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g2.push(fabric.util.object.clone(item));
|
|
|
|
}
|
|
let url2 = new fabric.Group(g2).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: top,
|
|
left: left
|
|
});
|
|
let white_url1 = canvas1.getObjects()[0].toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
});
|
|
g4.push(img2);
|
|
// 预览图缩小尺寸以减小文件大小,使用 multiplier 来缩放整个 Group,保持所有内容完整
|
|
// 原始尺寸 2787x2787,缩小到 512x512,比例约为 0.184
|
|
let url4 = new fabric.Group(g4).toDataURL({
|
|
format: 'png',
|
|
multiplier: 512 / 2787, // 约 0.184,缩小到 512x512,保持宽高比和所有内容
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
let url6 = new fabric.Group(g6).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: black_top,
|
|
left: black_left
|
|
});
|
|
|
|
let w = document.body.clientWidth * 0.7 + "px";
|
|
let h = (document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 + 150 + "px";
|
|
let h1 = (document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 + "px";
|
|
|
|
if ((document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 > document.body.clientHeight) {
|
|
//高度超出,则按高度计算
|
|
h = document.body.clientHeight * 0.8 + "px";
|
|
h1 = document.body.clientHeight * 0.8 - 150 + "px";
|
|
w = ((document.body.clientHeight * 0.8 - 150) / 0.62548 + 40) / 0.94
|
|
}
|
|
|
|
let fs = require('fs');
|
|
const Buffer = require('buffer').Buffer;
|
|
const buffer = Buffer.from(url3.replace(/^data:image\/\w+;base64,/, ""), 'base64');
|
|
const printPath = path.join(exePath, 'print.png');
|
|
fs.writeFileSync(printPath, buffer);
|
|
|
|
layer.open({
|
|
type: 1,
|
|
area: [w, h],
|
|
title: language_str("display"), //不显示标题栏"预览"
|
|
shadeClose: true, //点击遮罩关闭
|
|
content: `
|
|
<div style="padding:20px;background-color:#1E252D;height:${h1};display:flex;align-items: center;overflow:hidden;">
|
|
<div style="display: flex;justify-content: center;height: 100%;width: 100%;">
|
|
<div class="rotate-div" id="displayImg1" angle="0">
|
|
<img src="${printPath}" style="max-width:100%;max-height:100%;"/>
|
|
<div class="rotate-wrap" onclick="window.rotate('displayImg1')">
|
|
<img src="./public/images/rotate.png" style="height: 64px;width: 64px"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>`,
|
|
btn: [language_str("output"), "打印"],//'导出'
|
|
btn1: function (index, layero) {
|
|
saveImageAsPNG(buffer)
|
|
|
|
printJS({ printable: printPath, type: 'image', style: 'img { width: 100%; height: auto; }' })
|
|
}
|
|
});
|
|
}
|
|
|
|
function output(callback = null, _save = save) {
|
|
// 类型改变
|
|
fabric.Image.fromURL('./public/images/op_1.png', function (i1) {
|
|
i1.left = background_image.left;
|
|
i1.top = background_image.top;
|
|
let img1 = i1;
|
|
fabric.Image.fromURL('./public/images/op_1.png', function (i2) {
|
|
i2.left = background_image.left;
|
|
i2.top = background_image.top;
|
|
let img2 = i2;
|
|
|
|
$("#base_control").hide();
|
|
$("#line_control").hide();
|
|
$("#pic_control").hide();
|
|
$("#out_pic_control").hide();
|
|
$("#text_control").hide();
|
|
$("#circle_text_control").hide();
|
|
$("#out_text_control").hide();
|
|
$("#rect_control").hide();
|
|
$("#circle_control").hide();
|
|
$("#counter_control").hide();
|
|
$("#qrcode_Controll").hide();
|
|
$("#barcode_controll").hide();
|
|
$("#component_type").text(language_str("bg"));//"背景"
|
|
canvas1.discardActiveObject().renderAll();
|
|
canvas2.discardActiveObject().renderAll();
|
|
let _objs1 = canvas1.getObjects();
|
|
let g1 = [];
|
|
let g3 = [];
|
|
let g5 = [];//黑色图层
|
|
let left = 0;//左裁剪
|
|
let top = 0;//顶裁剪
|
|
let black_left = 0;//黑色左裁剪
|
|
let black_top = 0;//黑色顶裁剪
|
|
let all_left = 0;//预览图左裁剪
|
|
let all_top = 0;//预览图顶裁剪
|
|
for (let item of _objs1) {
|
|
let idx = getIndex(item, canvas1);
|
|
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > all_left) {
|
|
all_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > all_top) {
|
|
all_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g3.push(fabric.util.object.clone(item));
|
|
if (idx != 0 && (objs1[idx - 1].type == 10 || objs1[idx - 1].type == 4)) {
|
|
continue;//计数器 或 合成文字
|
|
}
|
|
if (idx != 0 && (objs1[idx - 1].type == 8 || objs1[idx - 1].type == 9)) {
|
|
continue;//二维码 条形码
|
|
}
|
|
if (idx != 0 && (objs1[idx - 1].type == 2)) {
|
|
continue;//合成图片
|
|
}
|
|
if (idx != 0 &&
|
|
(
|
|
(
|
|
objs1[idx - 1].type == 3
|
|
&&
|
|
item.get("fill") == "#000000"
|
|
//文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 11
|
|
&&
|
|
item.get("fill") == "#000000"
|
|
//圆形文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 5//矩形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 6//圆形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs1[idx - 1].type == 7//直线
|
|
&&
|
|
(item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")
|
|
)
|
|
||
|
|
objs1[idx - 1].black == true //勾选并入黑色图层
|
|
|
|
)
|
|
) {
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > black_left) {
|
|
black_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > black_top) {
|
|
black_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g1.push(fabric.util.object.clone(item));
|
|
continue;//黑色文字 黑色矩形 黑色线条 黑色圆形
|
|
} else if (idx == 0) {
|
|
g1.push(fabric.util.object.clone(item));
|
|
}
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > left) {
|
|
left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > top) {
|
|
top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g1.push(fabric.util.object.clone(item));
|
|
}
|
|
let url1 = new fabric.Group(g1).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
g3.push(img1);
|
|
// 预览图缩小尺寸以减小文件大小,使用 multiplier 来缩放整个 Group,保持所有内容完整
|
|
// 原始尺寸 2787x2787,缩小到 512x512,比例约为 0.184
|
|
let url3 = new fabric.Group(g3).toDataURL({
|
|
format: 'png',
|
|
multiplier: 512 / 2787, // 约 0.184,缩小到 512x512,保持宽高比和所有内容
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
let url5 = new fabric.Group(g5).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: black_top,
|
|
left: black_left
|
|
});
|
|
let _objs2 = canvas2.getObjects();
|
|
let g2 = [];
|
|
let g4 = [];
|
|
let g6 = [];//黑色图层
|
|
left = 0;
|
|
top = 0;
|
|
black_left = 0;//黑色左裁剪
|
|
black_top = 0;//黑色顶裁剪
|
|
all_left = 0;//黑色左裁剪
|
|
all_top = 0;//黑色顶裁剪
|
|
for (let item of _objs2) {
|
|
let idx = getIndex(item, canvas2);
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > all_left) {
|
|
all_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > all_top) {
|
|
all_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g4.push(fabric.util.object.clone(item));
|
|
if (idx != 0 && (objs2[idx - 1].type == 10 || objs2[idx - 1].type == 4)) {
|
|
continue;//计数器 或 合成文字
|
|
}
|
|
if (idx != 0 && (objs2[idx - 1].type == 8 || objs2[idx - 1].type == 9)) {
|
|
continue;//二维码 条形码
|
|
}
|
|
if (idx != 0 && (objs2[idx - 1].type == 2)) {
|
|
continue;//合成图片
|
|
}
|
|
if (idx != 0 &&
|
|
(
|
|
(
|
|
objs2[idx - 1].type == 3
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 11
|
|
&&
|
|
(item.get("fill") == "#000000" || (item.get("fill") == "#ffffff" && false))
|
|
//圆形文字 && 黑色
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 5//矩形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 6//圆形
|
|
&&
|
|
(
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("stroke") == "") //黑填充 透明边框
|
|
||
|
|
(item.get("fill") == "" && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //透明填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && (item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")) //黑填充 黑边框
|
|
||
|
|
((item.get("fill") == "#000000" || item.get("fill") == "#ffffff") && item.get("strokeWidth") == 0) //黑填充 0边框
|
|
)
|
|
)
|
|
||
|
|
(
|
|
objs2[idx - 1].type == 7//直线
|
|
&&
|
|
(item.get("stroke") == "#000000" || item.get("stroke") == "#ffffff")
|
|
)
|
|
||
|
|
objs2[idx - 1].black == true //勾选并入黑色图层
|
|
// (
|
|
// objs2[idx-1].type == 1//固定图片
|
|
// &&
|
|
// objs2[idx-1].black == true //勾选并入黑色图层
|
|
// )
|
|
)
|
|
) {
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > black_left) {
|
|
black_left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > black_top) {
|
|
black_top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g2.push(fabric.util.object.clone(item));
|
|
continue;//黑色文字 黑色矩形 黑色线条 黑色圆形
|
|
} else if (idx == 0) {
|
|
g2.push(fabric.util.object.clone(item));
|
|
}
|
|
if (getCoordsMinX(background_image.getCoords()) - getCoordsMinX(item.getCoords()) > left) {
|
|
left = -(getCoordsMinX(item.getCoords()) - getCoordsMinX(background_image.getCoords()));
|
|
}
|
|
if (getCoordsMinY(background_image.getCoords()) - getCoordsMinY(item.getCoords()) > top) {
|
|
top = -(getCoordsMinY(item.getCoords()) - getCoordsMinY(background_image.getCoords()));
|
|
}
|
|
g2.push(fabric.util.object.clone(item));
|
|
|
|
}
|
|
let url2 = new fabric.Group(g2).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: top,
|
|
left: left
|
|
});
|
|
let white_url1 = canvas1.getObjects()[0].toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
});
|
|
g4.push(img2);
|
|
// 预览图缩小尺寸以减小文件大小,使用 multiplier 来缩放整个 Group,保持所有内容完整
|
|
// 原始尺寸 2787x2787,缩小到 512x512,比例约为 0.184
|
|
let url4 = new fabric.Group(g4).toDataURL({
|
|
format: 'png',
|
|
multiplier: 512 / 2787, // 约 0.184,缩小到 512x512,保持宽高比和所有内容
|
|
top: all_top,
|
|
left: all_left
|
|
});
|
|
let url6 = new fabric.Group(g6).toDataURL({
|
|
height: 2787,
|
|
width: 2787,
|
|
top: black_top,
|
|
left: black_left
|
|
});
|
|
// let white_url2 = canvas2.getObjects()[0].toDataURL({
|
|
// height: 2787,
|
|
// width: 2787,
|
|
// });
|
|
//console.log(canvas.getObjects())
|
|
let w = document.body.clientWidth * 0.7 + "px";
|
|
let h = (document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 + 150 + "px";
|
|
let h1 = (document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 + "px";
|
|
|
|
if ((document.body.clientWidth * 0.7 - 40 - 0.06 * document.body.clientWidth * 0.7) * 0.62548 > document.body.clientHeight) {
|
|
//高度超出,则按高度计算
|
|
h = document.body.clientHeight * 0.8 + "px";
|
|
h1 = document.body.clientHeight * 0.8 - 150 + "px";
|
|
w = ((document.body.clientHeight * 0.8 - 150) / 0.62548 + 40) / 0.94
|
|
}
|
|
|
|
let op = { frontColorPic: "", backColorPic: "", frontBlackPic: "", backBlackPic: "", frontData: [], backData: [], flag: 1, frontDisplayPic: url3, backDisplayPic: '' };
|
|
if (objs1.length != 0 & objs2.length == 0) {
|
|
op.flag = 2;
|
|
} else if (objs1.length == 0 & objs2.length != 0) {
|
|
op.flag = 3;
|
|
}
|
|
op.frontColorPic = desEncrypt(url1);
|
|
op.backColorPic = '';
|
|
//op.frontBlPic = url5;
|
|
//op.backBlPic = url6;
|
|
op.frontBlackPic = '';
|
|
op.backBlackPic = '';
|
|
for (let item of _objs1) {
|
|
let idx = getIndex(item, canvas1);
|
|
if (idx == 0) continue;//background-image
|
|
let type = objs1[idx - 1].type;
|
|
if (type == 2) {
|
|
//out_pic
|
|
let xy = getAbsoluteXY(item);
|
|
op.frontData.push({
|
|
"type": 1,
|
|
"name": objs1[idx - 1].name,
|
|
"FontColor": objs1[idx - 1].black ? "#000000" : "@",
|
|
"transparency": item.get("opacity"),
|
|
"x": parseInt((xy[0] - background_image1.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 3) {
|
|
|
|
} else if (type == 11) {
|
|
|
|
op.frontData.push({
|
|
"type": 2,
|
|
"Text": item.get("text"),
|
|
"FontFamily": item.get("fontFamily"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontColor": "#000000",
|
|
"FontBackgroudColor": item.get("textBackgroundColor"),
|
|
"Bold": item.get("fontWeight") == "bold",
|
|
"Underline": item.get("underline"),
|
|
"Italic": item.get("fontStyle") == "italic",
|
|
"Strikeout": item.get("linethrough"),
|
|
"x": parseInt((item.get("left") - background_image1.left).toFixed(0)),
|
|
"y": parseInt((item.get("top") - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0)),
|
|
"circleCenter": objs1[idx - 1].circleCenter
|
|
});
|
|
} else if (type == 4) {
|
|
//out_text
|
|
let xy = getAbsoluteXY(item);
|
|
op.frontData.push({
|
|
"type": 3,
|
|
"name": objs1[idx - 1].name,
|
|
"FontFamily": item.get("fontFamily"),
|
|
"DefaultText": item.get("text"),
|
|
"FontBackgroudColor": item.get("textBackgroundColor"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontColor": item.get("fill"),
|
|
"Exceed": objs1[idx - 1].exceed,
|
|
"AutoWrap": objs1[idx - 1].autoWrap,
|
|
"FixSize": objs1[idx - 1].fixSize,
|
|
"Bold": item.get("fontWeight") == "bold",
|
|
"Underline": item.get("underline"),
|
|
"Italic": item.get("fontStyle") == "italic",
|
|
"Strikeout": item.get("linethrough"),
|
|
"x": parseInt((xy[0] - background_image1.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0)),
|
|
align: objs1[idx - 1].align
|
|
});
|
|
} else if (type == 8) {
|
|
//二维码
|
|
let xy = getAbsoluteXY(item);
|
|
op.frontData.push({
|
|
"type": 4,
|
|
"name": objs1[idx - 1].name,
|
|
"FontColor": objs1[idx - 1].color,
|
|
"DefaultText": objs1[idx - 1].val,
|
|
"x": parseInt((xy[0] - background_image1.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 9) {
|
|
//条形码
|
|
let xy = getAbsoluteXY(item);
|
|
op.frontData.push({
|
|
"type": 5,
|
|
"name": objs1[idx - 1].name,
|
|
"FontSize": parseInt(objs1[idx - 1].fontSize),
|
|
"DefaultText": objs1[idx - 1].val,
|
|
"HideText": objs1[idx - 1].show,
|
|
"FontFamily": objs1[idx - 1].font,
|
|
"FontColor": objs1[idx - 1].color,
|
|
"x": parseInt((xy[0] - background_image1.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 10) {
|
|
let xy = getAbsoluteXY(item);
|
|
op.frontData.push({
|
|
"type": 6,
|
|
"name": objs1[idx - 1].name,
|
|
"FontFamily": item.get("fontFamily"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontColor": item.get("fill"),
|
|
"start": objs1[idx - 1].start,
|
|
"add": parseInt(objs1[idx - 1].add),
|
|
"x": parseInt((xy[0] - background_image1.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
}
|
|
}
|
|
//obj2
|
|
for (let item of _objs2) {
|
|
let idx = getIndex(item, canvas2);
|
|
if (idx == 0) continue;//background-image
|
|
let type = objs2[idx - 1].type;
|
|
if (type == 2) {
|
|
//out_pic
|
|
let xy = getAbsoluteXY(item);
|
|
op.backData.push({
|
|
"type": 1,
|
|
"name": objs2[idx - 1].name,
|
|
"FontColor": objs2[idx - 1].black ? "#000000" : "@",
|
|
"transparency": item.get("opacity"),
|
|
"x": parseInt((xy[0] - background_image2.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image2.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 3) {
|
|
|
|
} else if (type == 11) {
|
|
|
|
op.frontData.push({
|
|
"type": 2,
|
|
"Text": item.get("text"),
|
|
"FontFamily": item.get("fontFamily"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontColor": "#000000",
|
|
"FontBackgroudColor": item.get("textBackgroundColor"),
|
|
"Bold": item.get("fontWeight") == "bold",
|
|
"Underline": item.get("underline"),
|
|
"Italic": item.get("fontStyle") == "italic",
|
|
"Strikeout": item.get("linethrough"),
|
|
"x": parseInt((item.get("left") - background_image1.left).toFixed(0)),
|
|
"y": parseInt((item.get("top") - background_image1.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0)),
|
|
"circleCenter": objs2[idx - 1].circleCenter
|
|
});
|
|
} else if (type == 4) {
|
|
let xy = getAbsoluteXY(item);
|
|
op.backData.push({
|
|
"type": 3,
|
|
"name": objs2[idx - 1].name,
|
|
"FontFamily": item.get("fontFamily"),
|
|
"DefaultText": item.get("text"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontBackgroudColor": item.get("textBackgroundColor"),
|
|
"FontColor": item.get("fill"),
|
|
"Exceed": objs2[idx - 1].exceed,
|
|
"AutoWrap": objs2[idx - 1].autoWrap,
|
|
"FixSize": objs2[idx - 1].fixSize,
|
|
"Bold": item.get("fontWeight") == "bold",
|
|
"Underline": item.get("underline"),
|
|
"Italic": item.get("fontStyle") == "italic",
|
|
"Strikeout": item.get("linethrough"),
|
|
"x": parseInt((xy[0] - background_image2.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image2.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0)),
|
|
align: objs2[idx - 1].align
|
|
});
|
|
} else if (type == 8) {
|
|
//二维码
|
|
let xy = getAbsoluteXY(item);
|
|
op.backData.push({
|
|
"type": 4,
|
|
"name": objs2[idx - 1].name,
|
|
"FontColor": objs2[idx - 1].color,
|
|
"DefaultText": objs2[idx - 1].val,
|
|
"x": parseInt((xy[0] - background_image2.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image2.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 9) {
|
|
let xy = getAbsoluteXY(item);
|
|
op.backData.push({
|
|
"type": 5,
|
|
"name": objs2[idx - 1].name,
|
|
"DefaultText": objs2[idx - 1].val,
|
|
"HideText": objs1[idx - 1].show,
|
|
"FontSize": parseInt(objs2[idx - 1].fontSize),
|
|
"FontFamily": objs2[idx - 1].font,
|
|
"FontColor": objs2[idx - 1].color,
|
|
"x": parseInt((xy[0] - background_image2.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image2.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
} else if (type == 10) {
|
|
let xy = getAbsoluteXY(item);
|
|
op.backData.push({
|
|
"type": 6,
|
|
"name": objs2[idx - 1].name,
|
|
"FontFamily": item.get("fontFamily"),
|
|
"FontSize": parseInt(item.get("fontSize")),
|
|
"FontColor": item.get("fill"),
|
|
"start": parseInt(objs2[idx - 1].start),
|
|
"add": parseInt(objs2[idx - 1].add),
|
|
"x": parseInt((xy[0] - background_image2.left).toFixed(0)),
|
|
"y": parseInt((xy[1] - background_image2.top).toFixed(0)),
|
|
"h": parseInt((item.get("scaleY") * item.get("height")).toFixed(0)),
|
|
"w": parseInt((item.get("scaleX") * item.get("width")).toFixed(0)),
|
|
"rotate": parseInt(item.get("angle").toFixed(0))
|
|
});
|
|
}
|
|
}
|
|
_save(op, callback);
|
|
//return false 开启该代码可禁止点击该按钮关闭
|
|
})
|
|
})
|
|
}
|
|
|
|
// 重新生成二维码和条形码(加载文件后调用)
|
|
function regenerateQrCodesAndBarcodes(canvas, objsArray) {
|
|
if (!canvas || !objsArray || !Array.isArray(objsArray)) return;
|
|
|
|
const objects = canvas.getObjects();
|
|
|
|
// 遍历对象(跳过背景图片,索引 0)
|
|
for (let i = 1; i < objects.length; i++) {
|
|
const obj = objects[i];
|
|
if (!obj || obj.type !== 'image') continue;
|
|
|
|
const objIndex = i - 1;
|
|
if (objIndex >= objsArray.length) continue;
|
|
|
|
const objMeta = objsArray[objIndex];
|
|
if (!objMeta || (objMeta.type !== 8 && objMeta.type !== 9)) continue;
|
|
|
|
// type == 8: 二维码 - 复用 ui.js 中的生成逻辑
|
|
if (objMeta.type === 8) {
|
|
const qr = jrQrcode.getQrBase64(objMeta.val || 'https://www.cardsoon.com', {
|
|
padding: 0,
|
|
foreground: objMeta.color || '#000000'
|
|
});
|
|
obj.setSrc(qr, function(img) {
|
|
canvas.renderAll();
|
|
});
|
|
}
|
|
// type == 9: 条形码 - 复用 ui.js 中的生成逻辑
|
|
else if (objMeta.type === 9) {
|
|
JsBarcode("#barcode", objMeta.val || '123456789', {
|
|
margin: 0,
|
|
lineColor: objMeta.color || '#000000',
|
|
fontSize: objMeta.fontSize || 18,
|
|
font: objMeta.font || 'Arial'
|
|
});
|
|
const barcode = document.getElementById('barcode');
|
|
const bar = barcode.toDataURL("image/png");
|
|
obj.setSrc(bar, function(img) {
|
|
canvas.renderAll();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// 清理不需要的 src 字段(保留自定义图片的 src)
|
|
function cleanupSrcFields(jsonObjects, objsArray) {
|
|
if (!jsonObjects || !Array.isArray(jsonObjects)) return;
|
|
if (!objsArray || !Array.isArray(objsArray)) return;
|
|
|
|
for (let i = 0; i < jsonObjects.length; i++) {
|
|
let obj = jsonObjects[i];
|
|
// 只处理 fabric.Image 对象且有 src 字段的
|
|
if (obj && obj.type === 'image' && obj.src) {
|
|
// 背景图片(索引 0)- 删除 src
|
|
if (i === 0) {
|
|
delete obj.src;
|
|
}
|
|
// 其他对象,通过 objs 数组判断类型
|
|
else if (i - 1 < objsArray.length) {
|
|
let objMeta = objsArray[i - 1];
|
|
// type == 2: 合成图片 - 删除 src
|
|
// type == 8: 二维码 - 删除 src
|
|
// type == 9: 条形码 - 删除 src
|
|
// type == 1: 自定义图片 - 必须保留 src
|
|
if (objMeta && (objMeta.type === 2 || objMeta.type === 8 || objMeta.type === 9)) {
|
|
delete obj.src;
|
|
}
|
|
// type == 1 不处理,保留 src
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function saveAs(op1, callback) {
|
|
let j = canvas1.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
let b = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
|
|
// 清理不需要的 src 字段
|
|
cleanupSrcFields(j.objects, objs1);
|
|
cleanupSrcFields(b.objects, objs2);
|
|
|
|
let o = { f: j, b: {}, fo: objs1, bo: objs2 };
|
|
let con_o = Object.assign(o, op1);
|
|
dialog.showSaveDialog({
|
|
title: language_str("saveFile"),//'保存文件'
|
|
filters: [
|
|
{ name: 'Soon File Type', extensions: ['soon'] },
|
|
]
|
|
}).then(result => {
|
|
if (result.filePath == "") { return; }
|
|
if (result.filePath.substring(result.filePath.length - 5).indexOf('.') == -1) {
|
|
result.filePath += '.soon';
|
|
}
|
|
let fs = require('fs')
|
|
con_o.soonType = 1
|
|
fs.writeFileSync(result.filePath, JSON.stringify(con_o))
|
|
openAs.name = result.filePath;
|
|
layer.msg(language_str("saveSucc") + openAs.name);//'保存成功至'
|
|
saveHistory();
|
|
if (callback && typeof callback === 'function') {
|
|
callback();
|
|
}
|
|
}).catch(err => {
|
|
console.log()
|
|
})
|
|
}
|
|
|
|
function save(op1, callback) {
|
|
let j = canvas1.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
let b = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
|
|
// 清理不需要的 src 字段
|
|
cleanupSrcFields(j.objects, objs1);
|
|
cleanupSrcFields(b.objects, objs2);
|
|
|
|
let o = { f: j, b: {}, fo: objs1, bo: objs2 };
|
|
let con_o = Object.assign(o, op1);
|
|
if (openAs.name != "") {
|
|
//打开的文件
|
|
let fs = require('fs')
|
|
con_o.soonType = 1
|
|
fs.writeFileSync(openAs.name, JSON.stringify(con_o))
|
|
layer.msg(language_str("saveSucc") + openAs.name);//'保存成功至'
|
|
saveHistory();
|
|
if (callback && typeof callback === 'function') {
|
|
callback();
|
|
}
|
|
return;
|
|
}
|
|
dialog.showSaveDialog({
|
|
title: language_str("saveFile"),//'保存文件'
|
|
filters: [
|
|
{ name: 'Soon File Type', extensions: ['soon'] },
|
|
]
|
|
}).then(result => {
|
|
if (result.filePath == "") { return; }
|
|
if (result.filePath.substring(result.filePath.length - 5).indexOf('.') == -1) {
|
|
result.filePath += '.soon';
|
|
}
|
|
let fs = require('fs')
|
|
con_o.soonType = 1
|
|
fs.writeFileSync(result.filePath, JSON.stringify(con_o))
|
|
openAs.name = result.filePath;
|
|
layer.msg(language_str("saveSucc") + openAs.name);//'保存成功至'
|
|
saveHistory();
|
|
if (callback && typeof callback === 'function') {
|
|
callback();
|
|
}
|
|
}).catch(err => {
|
|
console.log()
|
|
})
|
|
}
|
|
|
|
function saveHistory() {
|
|
let fs = require('fs');
|
|
let j = { history: [] }; // 默认结构必须是数组
|
|
|
|
try {
|
|
// 1. 读取并解析现有文件
|
|
if (fs.existsSync(fullPath)) {
|
|
let content = fs.readFileSync(fullPath).toString();
|
|
// 防止空文件报错
|
|
if (content.trim()) {
|
|
j = JSON.parse(content);
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error("读取历史记录失败,将重置:", e);
|
|
// 出错时使用默认空数组,不中断流程
|
|
j = { history: [] };
|
|
}
|
|
|
|
// 确保 j.history 是数组 (防御性编程)
|
|
if (!Array.isArray(j.history)) {
|
|
j.history = [];
|
|
}
|
|
|
|
// 2. 【核心优化】先过滤掉当前文件(如果已存在),然后加到最前面
|
|
// 这样可以实现“最近使用的文件排在第一位”的效果
|
|
let currentPath = openAs.name;
|
|
let newList = j.history.filter(item => item.path !== currentPath);
|
|
|
|
// 3. 插入到头部 (Unshift)
|
|
newList.unshift({
|
|
time: getDate(),
|
|
path: currentPath,
|
|
// type: 1 // 如果需要记录文件类型也可以加在这里
|
|
});
|
|
|
|
// 4. (可选) 限制历史记录数量,比如只保留最近20条,防止文件无限膨胀
|
|
if (newList.length > 20) {
|
|
newList = newList.slice(0, 20);
|
|
}
|
|
|
|
j.history = newList;
|
|
|
|
// 5. 统一写入
|
|
try {
|
|
fs.writeFileSync(fullPath, JSON.stringify(j));
|
|
} catch (e) {
|
|
console.error("写入历史记录失败:", e);
|
|
}
|
|
}
|
|
|
|
function open(file) {
|
|
console.log(file)
|
|
let fs = require('fs')
|
|
var fsData = fs.readFileSync(file)
|
|
openAs.name = file;
|
|
let j = JSON.parse(fsData.toString());
|
|
// 安全检查:确保 background_image 已初始化
|
|
if (!background_image) {
|
|
console.error('background_image 未初始化,无法打开文件');
|
|
return;
|
|
}
|
|
// 安全检查:确保 JSON 中有 objects 数组
|
|
if (!j.f || !j.f.objects || !Array.isArray(j.f.objects) || j.f.objects.length === 0) {
|
|
console.error('JSON 格式错误:缺少 f.objects');
|
|
return;
|
|
}
|
|
// design1 的背面数据是可选的(type 1 可能只有正面)
|
|
// 如果没有 b 或 b.objects,创建一个空的 canvas
|
|
if (!j.b || !j.b.objects || !Array.isArray(j.b.objects) || j.b.objects.length === 0) {
|
|
// 创建空的背面数据
|
|
j.b = {
|
|
version: '4.6.0',
|
|
objects: [],
|
|
hoverCursor: 'move'
|
|
};
|
|
}
|
|
let left = background_image.left;
|
|
let top = background_image.top;
|
|
let new_left = j.f.objects[0].left;
|
|
let new_top = j.f.objects[0].top;
|
|
for (let o of j.f.objects) {
|
|
o.left = o.left - new_left + left;
|
|
o.top = o.top - new_top + top;
|
|
}
|
|
// for (let o of j.b.objects) {
|
|
// o.left = o.left - new_left + left;
|
|
// o.top = o.top - new_top + top;
|
|
// }
|
|
// 如果背景图片没有src,从路径恢复(因为保存时删除了src以减小文件大小)
|
|
if (j.f.objects[0] && !j.f.objects[0].src) {
|
|
j.f.objects[0].src = './public/images/bg_front_1.png'
|
|
}
|
|
if (j.b.objects && j.b.objects.length > 0 && j.b.objects[0] && !j.b.objects[0].src) {
|
|
j.b.objects[0].src = './public/images/bg_back.png'
|
|
}
|
|
|
|
// 为二维码和条形码对象创建临时的 src(Fabric.js 需要 src 来创建 Image 对象)
|
|
// 加载完成后会重新生成,所以这里只需要一个占位符
|
|
const fo = j.fo || [];
|
|
const bo = j.bo || [];
|
|
const placeholder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
|
|
|
|
// 为正面二维码和条形码创建临时 src
|
|
fo.forEach((objMeta, idx) => {
|
|
if ((objMeta.type === 8 || objMeta.type === 9) && j.f.objects[idx + 1] && !j.f.objects[idx + 1].src) {
|
|
j.f.objects[idx + 1].src = placeholder;
|
|
}
|
|
});
|
|
|
|
// 为背面二维码和条形码创建临时 src
|
|
bo.forEach((objMeta, idx) => {
|
|
if ((objMeta.type === 8 || objMeta.type === 9) && j.b.objects && j.b.objects[idx + 1] && !j.b.objects[idx + 1].src) {
|
|
j.b.objects[idx + 1].src = placeholder;
|
|
}
|
|
});
|
|
|
|
console.log(j.f)
|
|
|
|
// 加载 JSON,并在回调中重新生成二维码和条形码
|
|
canvas1.loadFromJSON(j.f, function() {
|
|
regenerateQrCodesAndBarcodes(canvas1, fo);
|
|
canvas1.renderAll();
|
|
});
|
|
canvas2.loadFromJSON(j.b, function() {
|
|
regenerateQrCodesAndBarcodes(canvas2, bo);
|
|
canvas2.renderAll();
|
|
});
|
|
// 安全检查:确保加载后 canvas 中有对象
|
|
let objects1 = canvas1.getObjects();
|
|
let objects2 = canvas2.getObjects();
|
|
if (!objects1 || objects1.length === 0) {
|
|
console.error('canvas1 加载失败:没有对象');
|
|
return;
|
|
}
|
|
background_image1 = objects1[0];
|
|
// canvas2 可能为空(type 1 文件)
|
|
background_image2 = objects2 && objects2.length > 0 ? objects2[0] : null;
|
|
|
|
objs2 = j.bo || [];
|
|
objs1 = j.fo || [];
|
|
step1.val = 0;
|
|
step2.val = 0;
|
|
recordJson1 = [];
|
|
recordJson2 = [];
|
|
recordObjs1 = [];
|
|
recordObjs2 = [];
|
|
if ($("#front_side").hasClass("ui-button-active")) {
|
|
objs = objs1;
|
|
recordObjs = recordObjs1;
|
|
recordJson = recordJson1;
|
|
step = step1;
|
|
background_image = background_image1;
|
|
} else if ($("#back_side").hasClass("ui-button-active")) {
|
|
objs = objs2;
|
|
recordObjs = recordObjs2;
|
|
recordJson = recordJson2;
|
|
background_image = background_image2 || background_image1; // 如果背面为空,使用正面
|
|
step = step2;
|
|
}
|
|
canvas1.renderAll();
|
|
canvas2.renderAll();
|
|
updateList(); //修复打开新文件后无法撤销的bug
|
|
setTimeout(() => {
|
|
recordObjs1.push(JSON.stringify(objs1))
|
|
let j1 = canvas1.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
j1.objects[0].hoverCursor = "default";
|
|
recordJson1.push(j1);
|
|
|
|
recordObjs2.push(JSON.stringify(objs2))
|
|
let j2 = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
|
// j2.objects[0].hoverCursor = "default";
|
|
recordJson2.push(j2);
|
|
}, 0);
|
|
}
|
|
|
|
function clearAll() {
|
|
//let blank = "{\"f\":{\"version\":\"4.6.0\",\"objects\":[{\"type\":\"image\",\"version\":\"4.6.0\",\"originX\":\"left\",\"originY\":\"top\",\"left\":253.5,\"top\":121.5,\"width\":2787,\"height\":2787,\"fill\":\"#000000\",\"stroke\":null,\"strokeWidth\":0,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeDashOffset\":0,\"strokeLineJoin\":\"miter\",\"strokeUniform\":false,\"strokeMiterLimit\":4,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"backgroundColor\":\"\",\"fillRule\":\"nonzero\",\"paintFirst\":\"fill\",\"globalCompositeOperation\":\"source-over\",\"skewX\":0,\"skewY\":0,\"cropX\":0,\"cropY\":0,\"selectable\":false,\"hoverable\":false,\"hoverCursor\":\"default\",\"src\":\"data:image/png;base64,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YFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIEDpfCiFAAAcY0lEQVSAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMT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\",\"crossOrigin\":null,\"filters\":[]}],\"hoverCursor\":\"move\"},\"b\":{\"version\":\"4.6.0\",\"objects\":[{\"type\":\"image\",\"version\":\"4.6.0\",\"originX\":\"left\",\"originY\":\"top\",\"left\":253.5,\"top\":121.5,\"width\":2787,\"height\":2787,\"fill\":\"rgb(0,0,0)\",\"stroke\":null,\"strokeWidth\":0,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeDashOffset\":0,\"strokeLineJoin\":\"miter\",\"strokeUniform\":false,\"strokeMiterLimit\":4,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"backgroundColor\":\"\",\"fillRule\":\"nonzero\",\"paintFirst\":\"fill\",\"globalCompositeOperation\":\"source-over\",\"skewX\":0,\"skewY\":0,\"cropX\":0,\"cropY\":0,\"selectable\":false,\"hoverable\":false,\"hoverCursor\":\"default\",\"src\":\"data:image/png;base64,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YFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIEDpfCiFAAAcY0lEQVSAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMT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\",\"crossOrigin\":null,\"filters\":[]}],\"hoverCursor\":\"move\"},\"fo\":[],\"bo\":[]}";
|
|
//let j = JSON.parse(blank);
|
|
//canvas1.setZoom(1);
|
|
//canvas2.setZoom(1);
|
|
//canvas1.loadFromJSON(j.f);
|
|
//canvas2.loadFromJSON(j.b);
|
|
let t_objs1 = canvas1.getObjects();
|
|
let t_objs2 = canvas2.getObjects();
|
|
for (let i = 1; i < t_objs1.length; i++) {
|
|
canvas1.remove(t_objs1[i]);
|
|
}
|
|
for (let i = 1; i < t_objs2.length; i++) {
|
|
canvas2.remove(t_objs2[i]);
|
|
}
|
|
objs2 = [];
|
|
objs1 = [];
|
|
step1.val = 0;
|
|
step2.val = 0;
|
|
recordJson1 = [];
|
|
recordJson2 = [];
|
|
recordObjs1 = [];
|
|
recordObjs2 = [];
|
|
if ($("#front_side").hasClass("ui-button-active")) {
|
|
objs = objs1;
|
|
recordObjs = recordObjs1;
|
|
recordJson = recordJson1;
|
|
step = step1;
|
|
} else if ($("#back_side").hasClass("ui-button-active")) {
|
|
objs = objs2;
|
|
recordObjs = recordObjs2;
|
|
recordJson = recordJson2;
|
|
step = step2;
|
|
}
|
|
openAs.name = "";
|
|
canvas1.renderAll();
|
|
canvas2.renderAll();
|
|
updateList();
|
|
console.log();
|
|
}
|
|
|