document.write('
');
/* hitstat v3 — visitor analytics. Без кук (localStorage→sessionStorage,
pseudonymous), без query, referrer host-only, 1 GET-пиксель same-origin,
failure-silent. Плейсхолдер mem_id подставляет hitstat-emit.php. */
(function () {
try {
if (typeof Image === "undefined" || !window.location) return;
var D = document, N = navigator, W = window, E = encodeURIComponent, i, LS = null, SS = null;
try { LS = W.localStorage; } catch (e) {}
try { SS = W.sessionStorage; } catch (e) {}
// persistent vid + first_seen(день); seq — на вкладку
var vid = "", fs = 0, seq = 0, day = (Date.now() / 864e5) | 0, ST = LS || SS;
if (ST) try {
vid = ST.getItem("hc_vid") || "";
if (!/^[0-9a-f]{16}$/.test(vid)) {
vid = "";
for (i = 0; i < 16; i++) vid += "0123456789abcdef"[Math.random() * 16 | 0];
ST.setItem("hc_vid", vid); ST.setItem("hc_fs", String(day));
}
fs = +(ST.getItem("hc_fs") || 0) || day;
} catch (e) {}
if (SS) try { seq = (SS.getItem("hc_seq") | 0) + 1; SS.setItem("hc_seq", String(seq)); } catch (e) {}
// боты: webdriver|headlessUA|phantom|noScreen|noPlugins|permAnomaly|CDP
var b = 0;
try {
if (N.webdriver) b |= 1;
if (/HeadlessChrome|PhantomJS|SlimerJS|jsdom/i.test(N.userAgent || "")) b |= 2;
if (W.callPhantom || W._phantom || W.__nightmare || W.domAutomation) b |= 4;
if (!screen.width || !screen.height) b |= 8;
if (N.plugins && N.plugins.length === 0 && (N.languages || []).length === 0) b |= 16;
if (N.permissions && typeof Notification === "undefined") b |= 32;
if (W.cdc_ || D.$cdc_) b |= 64;
} catch (e) {}
// UA-CH: платформа + точная версия браузера; соединение
var g = "", ub = "";
try {
var u = N.userAgentData;
if (u) {
g = (u.platform || "") + (u.mobile ? ".m" : ".d");
if (u.brands) {
for (i = 0; i < u.brands.length; i++) {
var br = u.brands[i];
if (!/Not/.test(br.brand)) ub = br.brand + " " + br.version;
if (!/Not|Chromium/.test(br.brand)) break;
}
ub = ub.slice(0, 32);
}
}
} catch (e) {}
var ct = "";
try { var cn = N.connection; if (cn && cn.effectiveType) ct = String(cn.effectiveType).charAt(0); } catch (e) {}
// класс устройства: ядра/память/тач/DNT
var hc = N.hardwareConcurrency | 0, dm = 0;
try { var mm = N.deviceMemory; if (mm) dm = mm <= 1 ? 1 : mm <= 2 ? 2 : mm <= 4 ? 4 : 8; } catch (e) {}
var tp = Math.min(N.maxTouchPoints | 0, 9), nt = 0;
try { if (N.doNotTrack === "1" || W.doNotTrack === "1") nt = 1; } catch (e) {}
// поведение: mouse|scroll|touch|key
var h = 0;
function bh(k) { return function () { h |= k; }; }
try {
D.addEventListener("mousemove", bh(1));
D.addEventListener("scroll", bh(2));
D.addEventListener("touchstart", bh(4));
D.addEventListener("keydown", bh(8));
} catch (e) {}
// видимое время (visibilitychange-накопитель)
var vt = 0, vs = D.visibilityState === "visible" ? Date.now() : 0;
try {
D.addEventListener("visibilitychange", function () {
try {
if (D.visibilityState === "visible") { if (!vs) vs = Date.now(); }
else if (vs) { vt += Date.now() - vs; vs = 0; }
} catch (e) {}
});
} catch (e) {}
function vsec() { return (vt + (vs ? Date.now() - vs : 0)) / 1e3; }
// adblock bait
var ab = 0, RAF = W.requestAnimationFrame || function (f) { setTimeout(f, 60); };
function adb() {
try {
var dv = D.createElement("div");
dv.className = "adsbox pub_300x250 ad";
dv.style.cssText = "position:absolute;left:-999px;top:-999px;width:1px;height:1px";
(D.body || D.documentElement).appendChild(dv);
RAF(function () {
try { ab = dv.offsetHeight ? 0 : 1; } catch (e) {}
try { if (dv.parentNode) dv.parentNode.removeChild(dv); } catch (e) {}
});
} catch (e) {}
}
// перф: "ttfb.load" бакеты + протокол h1/h2/h3
function pB(ms) { return ms < 200 ? 0 : ms < 500 ? 1 : ms < 1000 ? 2 : ms < 2000 ? 3 : ms < 5000 ? 4 : 5; }
function tB(s) { return s < 5 ? "a" : s < 15 ? "b" : s < 30 ? "c" : s < 60 ? "d" : s < 180 ? "e" : s < 600 ? "f" : "g"; }
function navPerf() {
try {
var n = performance && performance.getEntriesByType ? performance.getEntriesByType("navigation")[0] : null;
if (!n || !n.responseStart) return ["", ""];
var f = pB(n.responseStart - n.startTime) + "." +
pB(n.loadEventEnd ? n.loadEventEnd - n.startTime : n.duration || 0);
var p = n.nextHopProtocol || "";
p = p.indexOf("h2") === 0 ? "h2" : p.indexOf("h3") === 0 ? "h3" : p.indexOf("http/1") === 0 ? "h1" : "";
return [f, p];
} catch (e) { return ["", ""]; }
}
// CDN: catalog_common_new.js → [duration-бакет, size-бакет(c=кэш)]
function cdn() {
try {
var rs = performance.getEntriesByType("resource");
for (i = 0; i < rs.length; i++) {
if (rs[i].name.indexOf("catalog_common_new.js") > 0) {
var z = rs[i].transferSize | 0;
return [pB(rs[i].duration),
z === 0 ? "c" : z < 20480 ? "0" : z < 102400 ? "1" : z < 307200 ? "2" : z < 1048576 ? "3" : "4"];
}
}
} catch (e) {}
return ["", ""];
}
// крипто-провайдеры: только факт присутствия (typeof), БЕЗ вызовов API
// кошельков. Проверка в момент отправки — провайдеры доинжектятся поздно.
// биты: ethereum=1 solana/phantom=2 tron=4 binance=8 keplr=16 coinbase=32
// okx=64 trustwallet=128 brave=256
function wallets() {
try {
var w = 0, wp = 0, eth = W.ethereum;
if (typeof eth !== "undefined") w |= 1;
if (typeof W.solana !== "undefined" || (W.phantom && W.phantom.solana)) w |= 2;
if (W.tronWeb || W.tronLink) w |= 4;
if (W.BinanceChain) w |= 8;
if (W.keplr) w |= 16;
if (W.coinbaseWalletExtension) w |= 32;
if (W.okxwallet) w |= 64;
if (W.trustwallet) w |= 128;
if (N.brave) w |= 256;
if (typeof eth !== "undefined") wp = (eth.providers && eth.providers.length) || 1;
return [w, wp];
} catch (e) { return [0, 0]; }
}
// отправка: один пиксель на страницу
var fired = false;
function fire() {
if (fired) return; fired = true;
try {
var rh = "";
try { if (D.referrer) rh = (D.referrer.split("/")[2] || "").toLowerCase(); } catch (e) {}
var np = navPerf(), cd = cdn(), wl = wallets();
var q = "m=163615&v=" + vid + "&fs=" + fs + "&q=" + seq +
"&p=" + E((location.pathname || "/").slice(0, 200)) +
"&r=" + E(rh.slice(0, 100)) +
"&l=" + E((N.language || "").slice(0, 16)) +
"&s=" + (screen.width | 0) + "x" + (screen.height | 0) +
"&t=" + new Date().getTimezoneOffset() + "&b=" + b + "&h=" + h +
"&d=" + tB(vsec()) + "&f=" + np[0] + "&np=" + np[1] +
"&rn=" + cd[0] + "&rz=" + cd[1] + "&c=" + ct +
"&g=" + E(g.slice(0, 24)) + "&ub=" + E(ub) +
"&hc=" + hc + "&dm=" + dm + "&tp=" + tp + "&nt=" + nt + "&ab=" + ab +
"&w=" + wl[0] + "&wp=" + wl[1];
var im = new Image();
im.src = location.protocol + "//" + location.host + "/hitcounter/hitstat.gif?" + q;
} catch (e) {}
}
// pagehide | кап 45s | страховка 10s без load; adblock-замер после load+rAF
var armed = false;
function arm() {
armed = true; adb();
W.addEventListener("pagehide", fire);
setTimeout(fire, 45000);
}
if (D.readyState === "complete") arm();
else { W.addEventListener("load", arm); setTimeout(function () { if (!armed) fire(); }, 10000); }
} catch (e) {}
})();