<html><head></head><body>
<p id="notice" style="font-family:sans-serif;color:transparent;font-size:13px;margin:20px;">
  <strong>Notice:</strong> Lofty does not support embedding its pages inside iframes or framesets.<br>
  Embedding third-party pages via iframe poses security risks, including clickjacking attacks and cookie theft.<br>
  If you are seeing this page inside an iframe, please open it directly in your browser.<br>
  If this page keeps reloading, please enable cookies, or open this URL directly in your browser.<br><br>
  If you have any questions about this page, please contact <a href="/cdn-cgi/l/email-protection#e58790829780958a9791a5888a849184878980cb868a88" style="color:transparent;"><span class="__cf_email__" data-cfemail="086a7d6f7a6d78677a7c486567697c696a646d266b6765">[email&#160;protected]</span></a>
</p>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
(function(){
  // 脚本放在 notice 之后：同步执行时元素已存在，封顶提示才能亮出来
  // key 用 cf_retry2：与 PoW 页的 cf_retry（parseInt 旧格式）隔离——回滚后 PoW 读到
  // JSON 串 parseInt 得 NaN，NaN >= 3 永假，计数上限失效造成无限刷新
  var key = 'cf_retry2';
  var now = Date.now ? Date.now() : new Date().getTime();
  var n = 0, t0 = now;
  try {
    var raw = JSON.parse(sessionStorage.getItem(key) || 'null');
    if (raw && typeof raw.n === 'number' && typeof raw.t0 === 'number') { n = raw.n; t0 = raw.t0; }
  } catch(e) {}
  // 60 秒固定窗口（从窗口内第一次挑战起算）：窗口外重新计数——通过后因 30 分钟 TTL
  // 过期或换网（IP 变化）触发的正常再挑战不会累计；只有 60 秒内连续失败（真挑战循环）才封顶
  if (now - t0 > 60000) { n = 0; t0 = now; }
  if (n >= 3) {
    try { sessionStorage.removeItem(key); } catch(e) {}
    // 停下时亮出提示（平时透明是为不惊扰正常用户），链接一并提亮，并给手动重载按钮
    var el = document.getElementById('notice');
    if (el) {
      el.style.color = '#444';
      var link = el.querySelector('a');
      if (link) { link.style.color = '#06c'; }
      el.innerHTML = el.innerHTML + '<br><br><button onclick="location.reload()" style="font-family:sans-serif;font-size:14px;padding:6px 16px;">Reload page</button>';
    }
    return;
  }
  try { sessionStorage.setItem(key, JSON.stringify({n: n + 1, t0: t0})); } catch(e) {}

  function probeEnv() {
    var e = '';
    try { if (navigator.webdriver === true) e += 'w'; } catch (err) {}
    try { if (!window.chrome) e += 'c'; } catch (err) {}
    try { if (!navigator.languages || !navigator.languages.length) e += 'l'; } catch (err) {}
    try { if (navigator.plugins && navigator.plugins.length === 0) e += 'p'; } catch (err) {}
    try {
      var cv = document.createElement('canvas');
      var gl = cv.getContext('webgl') || cv.getContext('experimental-webgl');
      if (gl) {
        var dbg = gl.getExtension('WEBGL_debug_renderer_info');
        var r = dbg ? String(gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL)) : '';
        if (/swiftshader|llvmpipe|mesa offscreen|angle \(software/i.test(r)) e += 'g';
      }
    } catch (err) {}
    return e;
  }
  var env = probeEnv();

  var _a = '1794401334.44d', _b = '6c50b76b128d4c', _c = '2e2cc96c0c6986604197610';
  window['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x63\x6f\x6f\x6b\x69\x65'] = '\x63\x66\x5f\x70\x61\x73\x73\x5f\x6a\x73' + '=' + (_a + _b + _c) + '; path=/; max-age=1800; SameSite=None; Secure';
  window['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x63\x6f\x6f\x6b\x69\x65'] = '\x63\x66\x5f\x65\x6e\x76' + '=' + (env || 'n') + '; path=/; max-age=1800; SameSite=None; Secure';
  window['\x6c\x6f\x63\x61\x74\x69\x6f\x6e']['\x72\x65\x6c\x6f\x61\x64']();
})();
</script>
</body></html>

