ljs-tools
Version:
ljs-tools和常用插件
1,456 lines (1,455 loc) • 380 kB
JavaScript
var so = Object.defineProperty;
var lo = (e, n, r) => n in e ? so(e, n, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[n] = r;
var St = (e, n, r) => (lo(e, typeof n != "symbol" ? n + "" : n, r), r);
import { getCurrentInstance as He, inject as Ee, ref as ie, computed as H, unref as R, shallowRef as Rt, watchEffect as ya, readonly as co, getCurrentScope as uo, onScopeDispose as _a, onMounted as qe, nextTick as Ce, watch as Be, isRef as Ca, warn as fo, provide as yn, defineComponent as se, openBlock as L, createElementBlock as V, mergeProps as Lt, renderSlot as he, createElementVNode as Y, toRef as n0, onUnmounted as xo, useAttrs as vo, useSlots as Ea, normalizeClass as U, normalizeStyle as ve, createCommentVNode as Q, Fragment as Le, createBlock as ne, withCtx as oe, resolveDynamicComponent as Se, withModifiers as Pt, createVNode as xe, toDisplayString as le, onBeforeUnmount as Nt, Text as po, reactive as Ba, h as ho, markRaw as r0, toRefs as mo, resolveComponent as Fe, Transition as _n, withDirectives as y0, withKeys as Wt, createTextVNode as Jt, vShow as _0, isVNode as Da, render as Aa, Teleport as wa, renderList as x0, pushScopeId as Cn, popScopeId as En } from "vue";
const go = () => {
re.colorLog({ content: ["", "******************************************"] }), re.colorLog({ content: ["Core Dependencies:", "ljs-tools"] }), re.colorLog({ content: ["Author:", "LJS"] }), re.colorLog({ content: ["API", "https://ljs-y.github.io/ljs-vue3"], color: [
"background: #666666; color: #fff; border-radius: 4px 0 0 4px; padding: 3px 6px;",
"background: #FFF; border: 1px solid #666666; color: #fff; border-radius: 0 4px 4px 0; padding: 2px 6px;"
] }), re.colorLog({ content: ["", "******************************************"] });
};
function Bn(e) {
if (re.fieldCheck(e))
return null;
const n = {};
let r = e.split("?");
if (r.length === 1)
return [r[0], n];
const t = r[1].split("&"), a = t.length;
for (let i = 0; i < a; i++) {
const o = t[i].split("=");
n[o[0]] = o[1];
}
return [r[0], n];
}
function bo(e, n = location.search) {
const r = Bn(n);
if (r === null)
return null;
const t = r[1];
return e in t ? t[e] : null;
}
function yo(e, n = !0) {
if (re.fieldCheck(e))
return null;
let r = e.lastIndexOf(".");
return r === -1 ? null : (r = n ? r : r + 1, e.slice(r, e.length));
}
function _o(e, n = !1) {
if (re.fieldCheck(e))
return null;
const r = e.lastIndexOf("/"), t = e.lastIndexOf("\\");
let a = r > t ? r : t;
return a !== -1 ? a++ : a = 0, n ? e.slice(a, e.length) : e.lastIndexOf(".") > -1 ? e.slice(a, e.lastIndexOf(".")) : e.slice(a, e.length);
}
function Fa(e) {
var n = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
return n.test(e);
}
function Sa(e) {
var n = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/gm;
return n.test(e);
}
function Co(e) {
return Sa(e) || Fa(e);
}
function ka(e, n = ["sign"]) {
return Object.entries(e).filter(([a, i]) => /* 排除未定义的值 */ i != null && // 排除 null
i !== "" && // 排除空字符串
!n.includes(a)).sort(([a], [i]) => a.localeCompare(i, "en-US")).map(([a, i]) => `${a}=${i}`).join("&");
}
const Ta = {
getUrlAllParameter: Bn,
getUrlParameter: bo,
getFileType: yo,
getFileName: _o,
isIPV4ValidIP: Fa,
isIPV6ValidIP: Sa,
isIPValid: Co,
formatParamsByAscii: ka
};
function Eo(e) {
return e == null || e === "";
}
function Ia({ data: e, value: n, key: r = "id", children: t = "children", parents: a = [] }) {
const i = e.length;
for (let o = 0; o < i; o++)
if (e[o][r] === n || e[o][t] !== void 0 && (a = Ia({
data: e[o][t],
value: n,
key: r,
children: t,
parents: a
}), a.length > 0 && a[a.length - 1][r] === n))
return a.unshift(e[o]), a;
return a;
}
function fn({ data: e, opts: n = [], disabled: r = !1 }) {
if (!e)
return;
const t = e.length;
for (let a = 0; a < t; a++) {
e[a].disabled = r;
let i = !1;
const o = n.length;
for (let l = 0; l < o; l++) {
const c = n[l];
if (e[a][c.key] === c.value) {
i = !0;
break;
}
}
i ? (e[a].disabled = !0, e[a].children = fn({ data: e[a].children, opts: n, disabled: !0 })) : e[a].children !== void 0 && (e[a].children = fn({ data: e[a].children, opts: n, disabled: r }));
}
return e;
}
function Bo(e) {
let n = [];
if (!e || !e.length)
return [];
for (let r = 0; r < e.length; r++) {
let t = e[r], a = JSON.parse(JSON.stringify(t));
a.children = void 0, n.push(a);
const i = this.handleTreeList(t.children);
n = n.concat(i);
}
return n;
}
function Do({ data: e, id: n = "id", parentId: r = "parentId", children: t = "children" }) {
let a = { id: n, parentId: r, childrenList: t };
var i = {}, o = {}, l = [];
for (let s of e) {
let u = s[a.parentId];
i[u] == null && (i[u] = []), o[s[a.id]] = s, i[u].push(s);
}
for (let s of e) {
let u = s[a.parentId];
o[u] == null && l.push(s);
}
for (let s of l)
c(s);
function c(s) {
if (i[s[a.id]] !== null && (s[a.childrenList] = i[s[a.id]]), s[a.childrenList])
for (let u of s[a.childrenList])
c(u);
}
return l;
}
function Ao(e = 120) {
var n = document.documentElement, r = n.clientWidth / e;
n.style.fontSize = r + "px";
}
function wo({ data: e, value: n, labelKey: r = "dictLabel", valueKey: t = "dictValue", isTrue: a = !1 }) {
if (n === void 0)
return "";
let i = [];
return Object.keys(e).some((o, l) => {
if (e[o][t] == "" + n)
return r === "$index" ? (i = l, l) : (i.push(e[o][r]), !0);
}), r === "$index" ? i : (i.length === 0 && i.push(n), a ? i[0] : i.join(""));
}
function Fo({ content: e = ["暂无内容"], type: n = "info", color: r = [
"background: #666666; color: #fff; border-radius: 4px 0 0 4px; padding: 3px 6px;",
"background: #1475B2; color: #fff; border-radius: 0 4px 4px 0; padding: 3px 6px;"
] }) {
let t = "";
e.forEach((a) => {
t += `%c${a}`;
}), console[n](t, r[0], r[1]);
}
function So({ _this: e, url: n, name: r = (/* @__PURE__ */ new Date()).valueOf() }) {
let t = new Image();
t.setAttribute("crossOrigin", "anonymous");
const a = Bn(n);
n = a[0];
let i = {};
a.length === 2 && (i = {
...a[1]
}), i._time = (/* @__PURE__ */ new Date()).valueOf(), t.src = n + "?time=" + ka(i), e.$nextTick(() => {
t.onload = () => {
const o = document.createElement("canvas");
o.width = t.width, o.height = t.height, o.getContext("2d").drawImage(t, 0, 0, t.width, t.height), o.toBlob((c) => {
const s = URL.createObjectURL(c), u = document.createElement("a");
u.download = r, u.href = s, u.click(), u.remove(), URL.revokeObjectURL(s);
});
};
});
}
function ko(e) {
return e instanceof Blob || e instanceof File ? new Promise((n, r) => {
const t = new FileReader();
t.onloadend = () => n(t.result);
try {
t.readAsDataURL(e);
} catch (a) {
r(a);
}
}) : "";
}
function To() {
var e = 0, n = window.screen, r = navigator.userAgent.toLowerCase();
return window.devicePixelRatio !== void 0 ? e = window.devicePixelRatio : ~r.indexOf("msie") ? n.deviceXDPI && n.logicalXDPI && (e = n.deviceXDPI / n.logicalXDPI) : window.outerWidth !== void 0 && window.innerWidth !== void 0 && (e = window.outerWidth / window.innerWidth), e && (e = Math.round(e * 100)), e;
}
function a0(e) {
let n = Array.isArray(e) ? [] : {};
for (let r in e)
e.hasOwnProperty(r) && (typeof e[r] == "object" && e[r] !== null ? n[r] = a0(e[r]) : n[r] = e[r]);
return n;
}
function Io(e, n) {
if (typeof e != "object" || typeof n != "object")
return n;
const r = a0(e), t = a0(n);
for (let a in r)
t[a] = r[a];
return t;
}
const re = {
fieldCheck: Eo,
deepCopy: a0,
getTreeParents: Ia,
editTreeParentIdCheck: fn,
handleTreeList: Bo,
handleListTree: Do,
setRemUnit: Ao,
selectDictLabel: wo,
colorLog: Fo,
downloadImage: So,
imageFileToBase64: ko,
getWindowRatio: To,
objectCopy: Io
};
go();
function Po(e) {
const n = e.getters.menuList, r = Ma({ menuList: n }), t = Pa({ data: n, value: r.url });
r.address = t, e.commit("SET_menuNowOpen", r), e.commit("SET_menuOpenList", [r]);
}
function Pa({ data: e, value: n, key: r = "url" }) {
const t = re.getTreeParents({ data: e, value: n, key: r }), a = [];
return t.forEach((i) => {
const o = {
title: i.title,
// 菜单名称
url: i.url
// 菜单路由path
};
a.push(o);
}), a;
}
function Ma({ menuList: e }) {
if (e.length === 0)
return {};
let n = {};
return e.forEach((r, t) => {
t === 0 && (!re.fieldCheck(r.children) && r.children.length > 0 ? (r.open = !0, n = Ma({ menuList: r.children })) : n = r);
}), n;
}
function Mo({ store: e, path: n }) {
const r = e.getters.menuList, t = re.handleTreeList(r), a = t.length;
for (let i = 0; i < a; i++) {
const o = t[i];
if (o.url === n)
return o;
}
}
function Ro({ store: e, run: n, path: r, query: t = {} }) {
const a = Mo({ store: e, path: r });
Ra({ store: e, run: n, menuObj: a, query: t });
}
function Ra({ store: e, run: n, menuObj: r, query: t }) {
let a = e.getters.menuList;
if (re.fieldCheck(r.children) && (r.children = []), r.children.length > 0) {
if (r.open)
r.open = !r.open;
else {
const i = re.getTreeParents({
data: a,
value: r.menuId,
key: "menuId"
});
Dn({ menuList: a, parents: i });
}
e.commit("SET_menuList", a);
} else {
const i = e.getters.menuNowOpen;
let o = e.getters.menuOpenList;
if (i.url === r.url)
return;
r.address = Pa({ data: e.getters.menuList, value: r.url });
let l = r;
r.choose = !r.choose, e.commit("SET_menuNowOpen", l);
const c = o.length;
let s = !1;
for (let u = 0; u < c; u++)
if (o[u].url === r.url) {
s = !0;
break;
}
s || (o = e.getters.menuOpenList, o.push(l), e.commit("SET_menuOpenList", o)), n.push({
path: r.url,
query: t
});
}
}
function Dn({ menuList: e, parents: n, key: r = "menuId" }) {
return e.forEach((t) => {
t[r] === n[0][r] ? (t.open = !0, n.length > 1 && n.splice(0, 1)) : t.open = !1, t.children && t.children.length > 0 && (t.children = Dn({ menuList: t.children, parents: n, key: r }));
}), e;
}
const za = {
fristOpenMenu: Po,
handPush: Ro,
menuControl: Ra,
updateTreeOpen: Dn
}, Zt = 1e-14;
function zo(e, n = 2, r = "0") {
if (Ct(e)) {
e = e.toString();
const t = e.length, a = n - t;
let i = "";
for (let o = 0; o < a; o++)
i += r;
return i + e;
}
return e;
}
function Lo(e, n = 4, r = ",") {
if (Ct(e)) {
e += "";
var t = e.split("."), a = t[0], i = t.length > 1 ? "." + t[1] : "";
const o = new RegExp("(\\d+)(\\d{" + n + "})");
for (; o.test(a); )
a = a.replace(o, "$1" + r + "$2");
return a + i;
}
return e;
}
function $o(e) {
if (Ct(e)) {
e = Math.ceil(e);
const n = (e + "").length, r = Math.pow(10, n - 1);
return Math.ceil(e / r) * r;
}
return e;
}
function Oo({
value: e,
ws: n = 0,
units: r = ["", "万", "亿万", "万亿"],
isMerge: t = !0
}) {
if (Ct(e)) {
let a = "";
const i = Number(e) < 0 ? -1 : 1, o = Math.abs(Number(e));
let l = 0;
if (o < 1e4)
a = i * o, l = 0;
else if (o >= 1e4 && o < 1e4 * 1e4) {
let c = o / 1e4 + Zt;
c = Number(c.toFixed(n)), c < 1e4 ? (a = i * c, l = 1) : (a = i * c / 1e4, l = 2);
} else if (o >= 1e4 * 1e4 && o < 1e4 * 1e4 * 1e4) {
let c = o / 1e8 + Zt;
c = Number(c.toFixed(n)), c < 1e4 ? (a = i * c, l = 2) : (a = i * c / 1e4, l = 3);
} else
o >= 1e4 * 1e4 * 1e4 && (a = i * (o / (1e4 * 1e4 * 1e4) + Zt).toFixed(n), l = 3);
return t ? a + r[l] : {
num: a,
unit: r[l]
};
}
return e;
}
function La(e, n = 2) {
return Ct(e) && (e = e + "", e.indexOf(".") > -1 && e.split(".")[1].length > n) ? (e = Number(e), (e + Zt).toFixed(n)) : e;
}
function Ct(e) {
const n = typeof e;
return n === "number" || n === "string" && !isNaN(Number(e, 10));
}
function Ho(e, n = 12, r = 2) {
e = Number(e);
const t = (e / n).toFixed(r), a = [];
for (let i = 0; i < n; i++)
i < n - 1 ? a.push(t) : a.push(La(e - t * (n - 1), r));
return a;
}
const te = {
numberB0: zo,
longNumText: Oo,
numberCeil: $o,
moneySplit: Lo,
numberChangeDecimal: La,
averageNum: Ho
};
function Me(e, n) {
if (re.fieldCheck(e))
return e;
const r = new Date(e), t = n || "{y}-{m}-{d} {h}:{i}:{s}", a = {
y: r.getFullYear(),
m: te.numberB0(r.getMonth() + 1),
d: te.numberB0(r.getDate()),
h: te.numberB0(r.getHours()),
i: te.numberB0(r.getMinutes()),
s: te.numberB0(r.getSeconds()),
MS: r.getMilliseconds()
};
return t.replace(/{(y|m|d|h|i|s|MS)+}/g, (i, o) => a[o]);
}
function No(e, n, r = 0) {
if (re.fieldCheck(e))
return e;
if (r === 0) {
let t = new Date(e).getTime();
return Me(t, n);
}
if (n === "{y}-{m}-{d}") {
let t = new Date(e).getTime();
return t = t + 3600 * 1e3 * 24 * r, Me(t, n);
} else if (n === "{y}-{m}") {
const t = r / Math.abs(r);
let a = new Date(e), i = "";
const o = a.getMonth() + 1;
let l = 0, c = 0;
if (t === -1)
l = a.getFullYear() + Math.floor((o + r) / 12), c = 12 * Math.abs(l - a.getFullYear()) + o + r, (o + r) % 12 === 0 && (l += t, c = 12);
else if (t === 1)
if (o + r <= 12)
l = a.getFullYear(), c = o + r;
else if ((o + r) % 12 !== 0)
l = a.getFullYear() + Math.floor((o + r) / 12), c = o + r - Math.abs(l - a.getFullYear()) * 12;
else {
const s = (o + r) / 12;
l = a.getFullYear() + (s > 1 ? s - 1 : s), c = o + r - Math.abs(l - a.getFullYear()) * 12;
}
return i = l + "-" + te.numberB0(c), i;
} else if (n === "{y}")
return (new Date(e).getFullYear() + r).toString();
}
function Vo(e, n = 1) {
if (e[0] === "" || e[0] === null)
return e;
const r = new Date(e[0]), t = new Date(e[1]);
switch (n === void 0 && (n = 1), n) {
case 1:
return [
r.getFullYear() + "-" + te.numberB0(r.getMonth() + 1) + "-" + te.numberB0(r.getDate()) + " 00:00:00",
t.getFullYear() + "-" + te.numberB0(t.getMonth() + 1) + "-" + te.numberB0(t.getDate()) + " 23:59:59"
];
case 2:
return [
r.getFullYear() + "-" + te.numberB0(r.getMonth() + 1) + "-" + te.numberB0(r.getDate()) + " " + te.numberB0(r.getHours()) + ":00:00",
t.getFullYear() + "-" + te.numberB0(t.getMonth() + 1) + "-" + te.numberB0(t.getDate()) + " " + te.numberB0(t.getHours()) + ":59:59"
];
case 3:
return [
r.getFullYear() + "-" + te.numberB0(r.getMonth() + 1) + "-" + te.numberB0(r.getDate()) + " " + te.numberB0(r.getHours()) + ":" + te.numberB0(r.getMinutes()) + ":00",
t.getFullYear() + "-" + te.numberB0(t.getMonth() + 1) + "-" + te.numberB0(t.getDate()) + " " + te.numberB0(t.getHours()) + ":" + te.numberB0(t.getMinutes()) + ":59"
];
}
return e;
}
function qo({ time: e = 0, showTag: n = ["天", "小时", "分钟", "秒", "毫秒"], showAll: r = !1, onlyTime: t = !1 }) {
let a = 1;
e < 0 && (a = -1), e = Math.abs(e);
const i = 1e3, o = 60 * i, l = 60 * o, c = 24 * l, s = [0, 0, 0, 0, 0];
if (e >= c) {
const f = Math.floor(e / c);
s[0] = a * f, e -= c * f;
}
if (e >= l) {
const f = Math.floor(e / l);
s[1] = a * f, e -= l * f;
}
if (e >= o) {
const f = Math.floor(e / o);
s[2] = a * f, e -= o * f;
}
if (e >= i) {
const f = Math.floor(e / i);
s[3] = a * f, e -= i * f;
}
if (s[4] = a * e, t)
return s;
let u = r, m = "";
return s.forEach((f, h) => {
!u && f !== 0 && (u = !0), u && (m += f + n[h]);
}), m;
}
function Wo(e = 10, n = !1) {
let r = "", t = "", a = "{y}-{m}-{d}";
return n && (a = "{y}-{m}-{d} {h}:{i}:{s}"), r = Me((/* @__PURE__ */ new Date()).getTime() - 3600 * 1e3 * 24 * (e - 1), a), t = Me(/* @__PURE__ */ new Date(), a), [r, t];
}
function Yo(e = "date", n = 0) {
const r = /* @__PURE__ */ new Date();
let t = "", a = "";
switch (e) {
case "datetime":
t = Me(r, "{y}-{m}-{d} 00:00:00"), a = Me(r, "{y}-{m}-{d} {h}:{i}:{s}");
break;
case "date":
t = Me(r, "{y}-{m}-01"), a = Me(r, "{y}-{m}-{d}");
break;
case "month":
t = Me(r, "{y}-01"), a = Me(r, "{y}-{m}");
break;
case "year":
t = r.getFullYear() - (n + 1) * 5, a = r.getFullYear();
break;
}
return [t, a];
}
const ue = {
formatTime: Me,
customizedDate: No,
dateQjChange: Vo,
timeRunDistance: qo,
initSearchDate: Wo,
initSearchDateQj: Yo
};
function Uo({ form: e, key: n = "money", zs: r = 10, ws: t = 2, type: a = "Number", fu: i = !1 }) {
const o = e;
o[n] = o[n] + "", a === "Number" && (o[n].slice(0, 1) === "0" && (o[n] = o[n].slice(1, 2) !== "." ? "0" : o[n]), o[n].slice(0, 1) === "-" && (o[n] = o[n].slice(1, 2) === "." ? "-" : o[n]), o[n].slice(0, 2) === "-0" && (o[n] = o[n].slice(2, 3) !== "." ? "-0" : o[n])), i ? o[n] = o[n].replace(/[^\d.-]/g, "") : o[n] = o[n].replace(/[^\d.]/g, ""), o[n] = o[n].replace(/^\./g, ""), o[n] = o[n].replace(/\.{2,}/g, "."), o[n] = o[n].slice(0, 1) + o[n].slice(1, o[n].length).replace(/\-/g, "");
const l = new RegExp("^(\\-)*(\\d+)\\.(\\d{0," + t + "}).*$");
if (r !== "" && o[n].length > 0) {
const c = o[n].split(".");
let s = c[0], u = "";
const m = s.slice(0, 1) === "-" ? 1 : 0;
s.length > r + m && (s = s.slice(0, r + m)), c.length > 1 ? (u = c[1], o[n] = s + "." + u) : o[n] = s;
}
o[n] = o[n].replace(l, "$1$2.$3");
}
function Ko({ form: e, key: n = "num", type: r = "Number", fu: t = !1 }) {
r === "Number" && (t ? e[n] = e[n].slice(0, 1) + e[n].slice(1, e[n].length).replace(/\-/g, "") : e[n].slice(0, 1) === "-" && (e[n] = e[n].slice(1, e[n].length))), e[n] = e[n].replace(/[^\d-]/g, ""), r === "Number" && e[n].length > 0 && e[n] !== "-" && (e[n] = Number(e[n]));
}
function jo({ form: e, key: n = "num" }) {
if (!Ct(e[n])) {
e[n] = "";
return;
}
if (e[n] === "0." || e[n] === "-0.") {
e[n] = "";
return;
}
if (e[n] === "-0") {
e[n] = "0";
return;
}
}
function Go(e, n = "username") {
e[n] = e[n] + "", e[n] = e[n].replace(/[^\w]/g, ""), e[n] = e[n].replace(/\_/g, "");
}
function Xo(e, n) {
const r = document.createElement("a"), t = new Blob([e], {
type: "application/vnd.ms-excel"
});
r.style.display = "none", r.href = URL.createObjectURL(t), r.setAttribute("download", n), document.body.appendChild(r), r.click(), document.body.removeChild(r);
}
function Jo(e = {}) {
const n = {
dateType: "3",
direction: 1,
span: 0,
dateTypeKeyValue: ["1", "2", "3", "4"]
};
for (let o in e)
n[o] = e[o];
const r = 3600 * 1e3 * 24;
let t = null, a = null, i = 0;
switch (n.dateType) {
case n.dateTypeKeyValue[3]:
i += 1e3 * n.span;
break;
case n.dateTypeKeyValue[2]:
i += r * n.span;
break;
case n.dateTypeKeyValue[1]:
t = new Date(i).getFullYear(), a = new Date(i).getMonth() + 1 + n.span, a < 0 ? (t += n.span, a = 12) : a += 1, i = (/* @__PURE__ */ new Date(`${t}-${a}`)).getTime();
break;
case n.dateTypeKeyValue[0]:
t = new Date(i).getFullYear(), t += n.span, i = (/* @__PURE__ */ new Date(`${t}-01`)).getTime();
break;
}
return (o) => {
if (n.direction === 1)
return o.getTime() > i + Date.now();
if (n.direction === -1)
return o.getTime() < i + Date.now();
};
}
let mt = 0;
function Zo(e = 30, n) {
n ? mt = ue.formatTime(n[0], "{y}-{m}-{d}") : mt = 0;
const r = 3600 * 1e3 * 24 * e;
return (t) => {
if (mt === 0)
return t.getTime() > Date.now() || t.getTime() < mt;
{
const a = new Date(mt).getTime() + r - 864e5, i = new Date(mt).getTime() - r;
return a >= Date.now() ? t.getTime() > Date.now() || t.getTime() < i : t.getTime() > a || t.getTime() < i;
}
};
}
const v0 = {
numCheck: Ko,
numBlurCheck: jo,
numEnCheck: Go,
numDxsCheck: Uo,
downloadBlobData: Xo,
pickerOptions: Jo,
pickerOptionsDynamic: Zo
};
function Qo(e, n = {
name: "name",
key: "val"
}) {
if (e.length === 0)
return e;
const r = {
name: "name",
key: "val"
};
for (let i in n)
r[i] = n[i];
let t = 0;
if (e.forEach((i) => {
i.proportion = 0, t += Number(i[r.key]);
}), t > 0) {
let i = {
value: 0,
index: -1
};
e.forEach((o, l) => {
o[r.key] = o[r.key] == 0 ? null : o[r.key];
const c = te.numberChangeDecimal(Number(o[r.key]) / t * 100), s = Number(c);
Number(i.value) < s && (i = {
value: c,
index: l
}), o.proportion = s === 0 && Number(o[r.key]) > 0 ? 0.01 : s;
}), e[i.index].proportion = 100, e.forEach((o, l) => {
l !== i.index && (e[i.index].proportion = te.numberChangeDecimal(e[i.index].proportion - Number(o.proportion)));
});
}
const a = [];
return e.forEach((i) => {
a.push({
name: i[r.name],
value: i[r.key],
proportion: i.proportion + "%"
});
}), a;
}
const $a = {
pieChange: Qo
};
var j = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function es(e) {
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
}
function ts(e) {
if (e.__esModule)
return e;
var n = e.default;
if (typeof n == "function") {
var r = function t() {
return this instanceof t ? Reflect.construct(n, arguments, this.constructor) : n.apply(this, arguments);
};
r.prototype = n.prototype;
} else
r = {};
return Object.defineProperty(r, "__esModule", { value: !0 }), Object.keys(e).forEach(function(t) {
var a = Object.getOwnPropertyDescriptor(e, t);
Object.defineProperty(r, t, a.get ? a : {
enumerable: !0,
get: function() {
return e[t];
}
});
}), r;
}
var Oa = { exports: {} };
function ns(e) {
throw new Error('Could not dynamically require "' + e + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}
var C0 = { exports: {} };
const rs = {}, as = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: rs
}, Symbol.toStringTag, { value: "Module" })), is = /* @__PURE__ */ ts(as);
var er;
function X() {
return er || (er = 1, function(e, n) {
(function(r, t) {
e.exports = t();
})(j, function() {
var r = r || function(t, a) {
var i;
if (typeof window < "u" && window.crypto && (i = window.crypto), typeof self < "u" && self.crypto && (i = self.crypto), typeof globalThis < "u" && globalThis.crypto && (i = globalThis.crypto), !i && typeof window < "u" && window.msCrypto && (i = window.msCrypto), !i && typeof j < "u" && j.crypto && (i = j.crypto), !i && typeof ns == "function")
try {
i = is;
} catch {
}
var o = function() {
if (i) {
if (typeof i.getRandomValues == "function")
try {
return i.getRandomValues(new Uint32Array(1))[0];
} catch {
}
if (typeof i.randomBytes == "function")
try {
return i.randomBytes(4).readInt32LE();
} catch {
}
}
throw new Error("Native crypto module could not be used to get secure random number.");
}, l = Object.create || function() {
function p() {
}
return function(g) {
var b;
return p.prototype = g, b = new p(), p.prototype = null, b;
};
}(), c = {}, s = c.lib = {}, u = s.Base = function() {
return {
/**
* Creates a new object that inherits from this object.
*
* @param {Object} overrides Properties to copy into the new object.
*
* @return {Object} The new object.
*
* @static
*
* @example
*
* var MyType = CryptoJS.lib.Base.extend({
* field: 'value',
*
* method: function () {
* }
* });
*/
extend: function(p) {
var g = l(this);
return p && g.mixIn(p), (!g.hasOwnProperty("init") || this.init === g.init) && (g.init = function() {
g.$super.init.apply(this, arguments);
}), g.init.prototype = g, g.$super = this, g;
},
/**
* Extends this object and runs the init method.
* Arguments to create() will be passed to init().
*
* @return {Object} The new object.
*
* @static
*
* @example
*
* var instance = MyType.create();
*/
create: function() {
var p = this.extend();
return p.init.apply(p, arguments), p;
},
/**
* Initializes a newly created object.
* Override this method to add some logic when your objects are created.
*
* @example
*
* var MyType = CryptoJS.lib.Base.extend({
* init: function () {
* // ...
* }
* });
*/
init: function() {
},
/**
* Copies properties into this object.
*
* @param {Object} properties The properties to mix in.
*
* @example
*
* MyType.mixIn({
* field: 'value'
* });
*/
mixIn: function(p) {
for (var g in p)
p.hasOwnProperty(g) && (this[g] = p[g]);
p.hasOwnProperty("toString") && (this.toString = p.toString);
},
/**
* Creates a copy of this object.
*
* @return {Object} The clone.
*
* @example
*
* var clone = instance.clone();
*/
clone: function() {
return this.init.prototype.extend(this);
}
};
}(), m = s.WordArray = u.extend({
/**
* Initializes a newly created word array.
*
* @param {Array} words (Optional) An array of 32-bit words.
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
*
* @example
*
* var wordArray = CryptoJS.lib.WordArray.create();
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
*/
init: function(p, g) {
p = this.words = p || [], g != a ? this.sigBytes = g : this.sigBytes = p.length * 4;
},
/**
* Converts this word array to a string.
*
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
*
* @return {string} The stringified word array.
*
* @example
*
* var string = wordArray + '';
* var string = wordArray.toString();
* var string = wordArray.toString(CryptoJS.enc.Utf8);
*/
toString: function(p) {
return (p || h).stringify(this);
},
/**
* Concatenates a word array to this word array.
*
* @param {WordArray} wordArray The word array to append.
*
* @return {WordArray} This word array.
*
* @example
*
* wordArray1.concat(wordArray2);
*/
concat: function(p) {
var g = this.words, b = p.words, E = this.sigBytes, C = p.sigBytes;
if (this.clamp(), E % 4)
for (var B = 0; B < C; B++) {
var w = b[B >>> 2] >>> 24 - B % 4 * 8 & 255;
g[E + B >>> 2] |= w << 24 - (E + B) % 4 * 8;
}
else
for (var P = 0; P < C; P += 4)
g[E + P >>> 2] = b[P >>> 2];
return this.sigBytes += C, this;
},
/**
* Removes insignificant bits.
*
* @example
*
* wordArray.clamp();
*/
clamp: function() {
var p = this.words, g = this.sigBytes;
p[g >>> 2] &= 4294967295 << 32 - g % 4 * 8, p.length = t.ceil(g / 4);
},
/**
* Creates a copy of this word array.
*
* @return {WordArray} The clone.
*
* @example
*
* var clone = wordArray.clone();
*/
clone: function() {
var p = u.clone.call(this);
return p.words = this.words.slice(0), p;
},
/**
* Creates a word array filled with random bytes.
*
* @param {number} nBytes The number of random bytes to generate.
*
* @return {WordArray} The random word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.lib.WordArray.random(16);
*/
random: function(p) {
for (var g = [], b = 0; b < p; b += 4)
g.push(o());
return new m.init(g, p);
}
}), f = c.enc = {}, h = f.Hex = {
/**
* Converts a word array to a hex string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The hex string.
*
* @static
*
* @example
*
* var hexString = CryptoJS.enc.Hex.stringify(wordArray);
*/
stringify: function(p) {
for (var g = p.words, b = p.sigBytes, E = [], C = 0; C < b; C++) {
var B = g[C >>> 2] >>> 24 - C % 4 * 8 & 255;
E.push((B >>> 4).toString(16)), E.push((B & 15).toString(16));
}
return E.join("");
},
/**
* Converts a hex string to a word array.
*
* @param {string} hexStr The hex string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Hex.parse(hexString);
*/
parse: function(p) {
for (var g = p.length, b = [], E = 0; E < g; E += 2)
b[E >>> 3] |= parseInt(p.substr(E, 2), 16) << 24 - E % 8 * 4;
return new m.init(b, g / 2);
}
}, d = f.Latin1 = {
/**
* Converts a word array to a Latin1 string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The Latin1 string.
*
* @static
*
* @example
*
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
*/
stringify: function(p) {
for (var g = p.words, b = p.sigBytes, E = [], C = 0; C < b; C++) {
var B = g[C >>> 2] >>> 24 - C % 4 * 8 & 255;
E.push(String.fromCharCode(B));
}
return E.join("");
},
/**
* Converts a Latin1 string to a word array.
*
* @param {string} latin1Str The Latin1 string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
*/
parse: function(p) {
for (var g = p.length, b = [], E = 0; E < g; E++)
b[E >>> 2] |= (p.charCodeAt(E) & 255) << 24 - E % 4 * 8;
return new m.init(b, g);
}
}, x = f.Utf8 = {
/**
* Converts a word array to a UTF-8 string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The UTF-8 string.
*
* @static
*
* @example
*
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
*/
stringify: function(p) {
try {
return decodeURIComponent(escape(d.stringify(p)));
} catch {
throw new Error("Malformed UTF-8 data");
}
},
/**
* Converts a UTF-8 string to a word array.
*
* @param {string} utf8Str The UTF-8 string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
*/
parse: function(p) {
return d.parse(unescape(encodeURIComponent(p)));
}
}, v = s.BufferedBlockAlgorithm = u.extend({
/**
* Resets this block algorithm's data buffer to its initial state.
*
* @example
*
* bufferedBlockAlgorithm.reset();
*/
reset: function() {
this._data = new m.init(), this._nDataBytes = 0;
},
/**
* Adds new data to this block algorithm's buffer.
*
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
*
* @example
*
* bufferedBlockAlgorithm._append('data');
* bufferedBlockAlgorithm._append(wordArray);
*/
_append: function(p) {
typeof p == "string" && (p = x.parse(p)), this._data.concat(p), this._nDataBytes += p.sigBytes;
},
/**
* Processes available data blocks.
*
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
*
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
*
* @return {WordArray} The processed data.
*
* @example
*
* var processedData = bufferedBlockAlgorithm._process();
* var processedData = bufferedBlockAlgorithm._process(!!'flush');
*/
_process: function(p) {
var g, b = this._data, E = b.words, C = b.sigBytes, B = this.blockSize, w = B * 4, P = C / w;
p ? P = t.ceil(P) : P = t.max((P | 0) - this._minBufferSize, 0);
var _ = P * B, A = t.min(_ * 4, C);
if (_) {
for (var F = 0; F < _; F += B)
this._doProcessBlock(E, F);
g = E.splice(0, _), b.sigBytes -= A;
}
return new m.init(g, A);
},
/**
* Creates a copy of this object.
*
* @return {Object} The clone.
*
* @example
*
* var clone = bufferedBlockAlgorithm.clone();
*/
clone: function() {
var p = u.clone.call(this);
return p._data = this._data.clone(), p;
},
_minBufferSize: 0
});
s.Hasher = v.extend({
/**
* Configuration options.
*/
cfg: u.extend(),
/**
* Initializes a newly created hasher.
*
* @param {Object} cfg (Optional) The configuration options to use for this hash computation.
*
* @example
*
* var hasher = CryptoJS.algo.SHA256.create();
*/
init: function(p) {
this.cfg = this.cfg.extend(p), this.reset();
},
/**
* Resets this hasher to its initial state.
*
* @example
*
* hasher.reset();
*/
reset: function() {
v.reset.call(this), this._doReset();
},
/**
* Updates this hasher with a message.
*
* @param {WordArray|string} messageUpdate The message to append.
*
* @return {Hasher} This hasher.
*
* @example
*
* hasher.update('message');
* hasher.update(wordArray);
*/
update: function(p) {
return this._append(p), this._process(), this;
},
/**
* Finalizes the hash computation.
* Note that the finalize operation is effectively a destructive, read-once operation.
*
* @param {WordArray|string} messageUpdate (Optional) A final message update.
*
* @return {WordArray} The hash.
*
* @example
*
* var hash = hasher.finalize();
* var hash = hasher.finalize('message');
* var hash = hasher.finalize(wordArray);
*/
finalize: function(p) {
p && this._append(p);
var g = this._doFinalize();
return g;
},
blockSize: 16,
/**
* Creates a shortcut function to a hasher's object interface.
*
* @param {Hasher} hasher The hasher to create a helper for.
*
* @return {Function} The shortcut function.
*
* @static
*
* @example
*
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
*/
_createHelper: function(p) {
return function(g, b) {
return new p.init(b).finalize(g);
};
},
/**
* Creates a shortcut function to the HMAC's object interface.
*
* @param {Hasher} hasher The hasher to use in this HMAC helper.
*
* @return {Function} The shortcut function.
*
* @static
*
* @example
*
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
*/
_createHmacHelper: function(p) {
return function(g, b) {
return new y.HMAC.init(p, b).finalize(g);
};
}
});
var y = c.algo = {};
return c;
}(Math);
return r;
});
}(C0)), C0.exports;
}
var E0 = { exports: {} }, tr;
function p0() {
return tr || (tr = 1, function(e, n) {
(function(r, t) {
e.exports = t(X());
})(j, function(r) {
return function(t) {
var a = r, i = a.lib, o = i.Base, l = i.WordArray, c = a.x64 = {};
c.Word = o.extend({
/**
* Initializes a newly created 64-bit word.
*
* @param {number} high The high 32 bits.
* @param {number} low The low 32 bits.
*
* @example
*
* var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
*/
init: function(s, u) {
this.high = s, this.low = u;
}
/**
* Bitwise NOTs this word.
*
* @return {X64Word} A new x64-Word object after negating.
*
* @example
*
* var negated = x64Word.not();
*/
// not: function () {
// var high = ~this.high;
// var low = ~this.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise ANDs this word with the passed word.
*
* @param {X64Word} word The x64-Word to AND with this word.
*
* @return {X64Word} A new x64-Word object after ANDing.
*
* @example
*
* var anded = x64Word.and(anotherX64Word);
*/
// and: function (word) {
// var high = this.high & word.high;
// var low = this.low & word.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise ORs this word with the passed word.
*
* @param {X64Word} word The x64-Word to OR with this word.
*
* @return {X64Word} A new x64-Word object after ORing.
*
* @example
*
* var ored = x64Word.or(anotherX64Word);
*/
// or: function (word) {
// var high = this.high | word.high;
// var low = this.low | word.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise XORs this word with the passed word.
*
* @param {X64Word} word The x64-Word to XOR with this word.
*
* @return {X64Word} A new x64-Word object after XORing.
*
* @example
*
* var xored = x64Word.xor(anotherX64Word);
*/
// xor: function (word) {
// var high = this.high ^ word.high;
// var low = this.low ^ word.low;
// return X64Word.create(high, low);
// },
/**
* Shifts this word n bits to the left.
*
* @param {number} n The number of bits to shift.
*
* @return {X64Word} A new x64-Word object after shifting.
*
* @example
*
* var shifted = x64Word.shiftL(25);
*/
// shiftL: function (n) {
// if (n < 32) {
// var high = (this.high << n) | (this.low >>> (32 - n));
// var low = this.low << n;
// } else {
// var high = this.low << (n - 32);
// var low = 0;
// }
// return X64Word.create(high, low);
// },
/**
* Shifts this word n bits to the right.
*
* @param {number} n The number of bits to shift.
*
* @return {X64Word} A new x64-Word object after shifting.
*
* @example
*
* var shifted = x64Word.shiftR(7);
*/
// shiftR: function (n) {
// if (n < 32) {
// var low = (this.low >>> n) | (this.high << (32 - n));
// var high = this.high >>> n;
// } else {
// var low = this.high >>> (n - 32);
// var high = 0;
// }
// return X64Word.create(high, low);
// },
/**
* Rotates this word n bits to the left.
*
* @param {number} n The number of bits to rotate.
*
* @return {X64Word} A new x64-Word object after rotating.
*
* @example
*
* var rotated = x64Word.rotL(25);
*/
// rotL: function (n) {
// return this.shiftL(n).or(this.shiftR(64 - n));
// },
/**
* Rotates this word n bits to the right.
*
* @param {number} n The number of bits to rotate.
*
* @return {X64Word} A new x64-Word object after rotating.
*
* @example
*
* var rotated = x64Word.rotR(7);
*/
// rotR: function (n) {
// return this.shiftR(n).or(this.shiftL(64 - n));
// },
/**
* Adds this word with the passed word.
*
* @param {X64Word} word The x64-Word to add with this word.
*
* @return {X64Word} A new x64-Word object after adding.
*
* @example
*
* var added = x64Word.add(anotherX64Word);
*/
// add: function (word) {
// var low = (this.low + word.low) | 0;
// var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
// var high = (this.high + word.high + carry) | 0;
// return X64Word.create(high, low);
// }
}), c.WordArray = o.extend({
/**
* Initializes a newly created word array.
*
* @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
*
* @example
*
* var wordArray = CryptoJS.x64.WordArray.create();
*
* var wordArray = CryptoJS.x64.WordArray.create([
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
* ]);
*
* var wordArray = CryptoJS.x64.WordArray.create([
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
* ], 10);
*/
init: function(s, u) {
s = this.words = s || [], u != t ? this.sigBytes = u : this.sigBytes = s.length * 8;
},
/**
* Converts this 64-bit word array to a 32-bit word array.
*
* @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
*
* @example
*
* var x32WordArray = x64WordArray.toX32();
*/
toX32: function() {
for (var s = this.words, u = s.length, m = [], f = 0; f < u; f++) {
var h = s[f];
m.push(h.high), m.push(h.low);
}
return l.create(m, this.sigBytes);
},
/**
* Creates a copy of this word array.
*
* @return {X64WordArray} The clone.
*
* @example
*
* var clone = x64WordArray.clone();
*/
clone: function() {
for (var s = o.clone.call(this), u = s.words = this.words.slice(0), m = u.length, f = 0; f < m; f++)
u[f] = u[f].clone();
return s;
}
});
}(), r;
});
}(E0)), E0.exports;
}
var B0 = { exports: {} }, nr;
function os() {
return nr || (nr = 1, function(e, n) {
(function(r, t) {
e.exports = t(X());
})(j, function(r) {
return function() {
if (typeof ArrayBuffer == "function") {
var t = r, a = t.lib, i = a.WordArray, o = i.init, l = i.init = function(c) {
if (c instanceof ArrayBuffer && (c = new Uint8Array(c)), (c instanceof Int8Array || typeof Uint8ClampedArray < "u" && c instanceof Uint8ClampedArray || c instanceof Int16Array || c instanceof Uint16Array || c instanceof Int32Array || c instanceof Uint32Array || c instanceof Float32Array || c instanceof Float64Array) && (c = new Uint8Array(c.buffer, c.byteOffset, c.byteLength)), c instanceof Uint8Array) {
for (var s = c.byteLength, u = [], m = 0; m < s; m++)
u[m >>> 2] |= c[m] << 24 - m % 4 * 8;
o.call(this, u, s);
} else
o.apply(this, arguments);
};
l.prototype = i;
}
}(), r.lib.WordArray;
});
}(B0)), B0.exports;
}
var D0 = { exports: {} }, rr;
function ss() {
return rr || (rr = 1, function(e, n) {
(function(r, t) {
e.exports = t(X());
})(j, function(r) {
return function() {
var t = r, a = t.lib, i = a.WordArray, o = t.enc;
o.Utf16 = o.Utf16BE = {
/**
* Converts a word array to a UTF-16 BE string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The UTF-16 BE string.
*
* @static
*
* @example
*
* var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
*/
stringify: function(c) {
for (var s = c.words, u = c.sigBytes, m = [], f = 0; f < u; f += 2) {
var h = s[f >>> 2] >>> 16 - f % 4 * 8 & 65535;