SHARE
TWEET

Cyberfend browser fingerprinting

a guest May 26th, 2015 631 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var _cf = _cf || [],
  2.     cf = {
  3.         get_cf_date: function() {
  4.             return Date.now ? Date.now() : +new Date
  5.         },
  6.         kact: "",
  7.         ver: .79,
  8.         mact: "",
  9.         mme_cnt: 0,
  10.         mme_cnt_lmt: 100,
  11.         mduce_cnt: 0,
  12.         mduce_cnt_lmt: 100,
  13.         me_vel: 0,
  14.         ke_cnt: 0,
  15.         ke_cnt_lmt: 1e3,
  16.         ke_vel: 0,
  17.         tact: "",
  18.         tme_cnt: 0,
  19.         tme_cnt_lmt: 100,
  20.         te_cnt: 0,
  21.         te_cnt_lmt: 100,
  22.         te_vel: 0,
  23.         doact: "",
  24.         doe_cnt: 0,
  25.         doe_cnt_lmt: 100,
  26.         doe_vel: 0,
  27.         dmact: "",
  28.         dme_cnt: 0,
  29.         dme_cnt_lmt: 100,
  30.         dme_vel: 0,
  31.         start_ts: Date.now ? Date.now() : +new Date,
  32.         doa_throttle: 0,
  33.         dma_throttle: 0,
  34.         session_id: 0,
  35.         js_post: !1,
  36.         xmlhttp: null,
  37.         xmlhttp_loc: null,
  38.         loc: "",
  39.         cf_url: ("https:" === document.location.protocol ? "https://" : "http://") + "api.cformanalytics.com/",
  40.         auth: "",
  41.         api_public_key: null,
  42.         aj_indx: 0,
  43.         aj_type: -1,
  44.         ce_js_post: 0,
  45.         init_time: 0,
  46.         informinfo: "",
  47.         prevfid: -1,
  48.         fidcnt: 0,
  49.         sensor_data: 0,
  50.         ins: null,
  51.         cns: null,
  52.         enOnSubmitAdder: 0,
  53.         enGetLoc: 0,
  54.         enAddHidden: 0,
  55.         enReadDocUrl: 1,
  56.         xagg: -1,
  57.         pen: -1,
  58.         brow: "",
  59.         browver: "",
  60.         psub: "-",
  61.         lang: "-",
  62.         prod: "-",
  63.         plen: -1,
  64.         sdfn: [],
  65.         get_dinfo: function() {
  66.             var _user_agent = window.navigator.userAgent,
  67.                 awidth = window.screen.availWidth,
  68.                 aheight = window.screen.availHeight,
  69.                 width = window.screen.width,
  70.                 height = window.screen.height,
  71.                 winwidth = window.innerWidth || document.body.clientWidth,
  72.                 winheight = window.innerHeight || document.body.clientHeight,
  73.                 owidth = window.outerWidth || document.body.outerWidth;
  74.             cf.get_browser(), cf.bc(), cf.bmisc();
  75.             var dinfo = _user_agent + ",uaend," + cf.xagg + "," + cf.psub + "," + cf.lang + "," + cf.prod + "," + cf.plen + "," + cf.pen + "," + cf.wen + "," + cf.den + "," + awidth + "," + aheight + "," + width + "," + height + "," + winwidth + "," + winheight + "," + owidth + cf.bdetect() + ",loc:" + cf.loc;
  76.             return dinfo
  77.         },
  78.         get_browser: function() {
  79.             navigator.productSub && (cf.psub = navigator.productSub), navigator.languages && (cf.lang = navigator.language), navigator.product && (cf.prod = navigator.product), cf.plen = navigator.plugins.length
  80.         },
  81.         bc: function() {
  82.             var aelen;
  83.             aelen = window.addEventListener ? 1 : 0;
  84.             var xhren;
  85.             xhren = window.XMLHttpRequest ? 1 : 0;
  86.             var xdren;
  87.             xdren = window.XDomainRequest ? 1 : 0;
  88.             var een;
  89.             een = window.emit ? 1 : 0;
  90.             var doeen;
  91.             doeen = window.DeviceOrientationEvent ? 1 : 0;
  92.             var dmeen;
  93.             dmeen = window.DeviceMotionEvent ? 1 : 0;
  94.             var teen;
  95.             teen = window.TouchEvent ? 1 : 0;
  96.             var sen;
  97.             sen = window.spawn ? 1 : 0;
  98.             var iwen;
  99.             iwen = window.innerWidth ? 1 : 0;
  100.             var owen;
  101.             owen = window.outerWidth ? 1 : 0;
  102.             var cen;
  103.             cen = window.chrome ? 1 : 0;
  104.             var fpben;
  105.             fpben = Function.prototype.bind ? 1 : 0;
  106.             var ben;
  107.             ben = window.Buffer ? 1 : 0, cf.xagg = aelen + (xhren << 1) + (xdren << 2) + (een << 3) + (doeen << 4) + (dmeen << 5) + (teen << 6) + (sen << 7) + (iwen << 8) + (owen << 9) + (cen << 10) + (fpben << 11) + (ben << 12)
  108.         },
  109.         bmisc: function() {
  110.             cf.pen = window._phantom ? 1 : 0;
  111.             cf.wen = window.webdriver ? 1 : 0;
  112.             cf.den = window.domAutomation ? 1 : 0
  113.         },
  114.         bdetect: function() {
  115.             var cpen, b = [];
  116.             cpen = window.callPhantom ? 1 : 0, b.push(",cpen:" + cpen);
  117.             var i1;
  118.             i1 = new Function("return/*@cc_on!@*/!1")(), b.push(i1 ? "i1:1" : "i1:0");
  119.             var dm;
  120.             dm = "number" == typeof document.documentMode ? 1 : 0, b.push("dm:" + dm);
  121.             var cwen;
  122.             cwen = window.chrome && window.chrome.webstore ? 1 : 0, b.push("cwen:" + cwen);
  123.             var non;
  124.             non = navigator.onLine ? 1 : 0, b.push("non:" + non);
  125.             var opc;
  126.             opc = window.opera ? 1 : 0, b.push("opc:" + opc);
  127.             var fc;
  128.             fc = "undefined" != typeof InstallTrigger ? 1 : 0, b.push("fc:" + fc);
  129.             var sc;
  130.             sc = Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") > 0 ? 1 : 0, b.push("sc:" + sc);
  131.             var wrc;
  132.             wrc = "function" == typeof window.RTCPeerConnection || "function" == typeof window.mozRTCPeerConnection || "function" == typeof window.webkitRTCPeerConnection ? 1 : 0, b.push("wrc:" + wrc);
  133.             var isc;
  134.             isc = "mozInnerScreenY" in window ? window.mozInnerScreenY : 0, b.push("isc:" + isc);
  135.             var vib;
  136.             vib = "function" == typeof navigator.vibrate ? 1 : 0, b.push("vib:" + vib);
  137.             var bat;
  138.             bat = "function" == typeof navigator.getBattery ? 1 : 0, b.push("bat:" + bat);
  139.             var x11;
  140.             x11 = Array.prototype.forEach ? 0 : 1, b.push("x11:" + x11);
  141.             var x12;
  142.             return x12 = "FileReader" in window ? 1 : 0, b.push("x12:" + x12), b.join(",")
  143.         },
  144.         cma: function(subEvent, eventtype) {
  145.             if (1 == eventtype && cf.mme_cnt < cf.mme_cnt_lmt || 1 != eventtype && cf.mduce_cnt < cf.mduce_cnt_lmt) {
  146.                 var mainEvent = subEvent ? subEvent : window.event,
  147.                     xcoord = "",
  148.                     ycoord = "";
  149.                 mainEvent.pageX ? (xcoord = Math.floor(mainEvent.pageX), ycoord = Math.floor(mainEvent.pageY)) : (xcoord = Math.floor(mainEvent.clientX), ycoord = Math.floor(mainEvent.clientY));
  150.                 var ts = cf.get_cf_date() - cf.start_ts,
  151.                     tot_me_cnt = cf.mduce_cnt + cf.mme_cnt,
  152.                     new_mact = tot_me_cnt + "," + eventtype + "," + ts + "," + xcoord + "," + ycoord + ";";
  153.                 cf.me_vel = cf.me_vel + tot_me_cnt + eventtype + ts + xcoord + ycoord, cf.mact = cf.mact + new_mact, 1 == eventtype ? cf.mme_cnt++ : cf.mduce_cnt++
  154.             }
  155.             cf.js_post && 3 == eventtype && (cf.aj_type = 1, cf.bpd(), cf.pd(!0), cf.ce_js_post = 1)
  156.         },
  157.         str2sum: function(str) {
  158.             if (null == str) return -1;
  159.             var sum = 0,
  160.                 i = 0;
  161.             for (i = 0; i < str.length; i++) sum += str.charCodeAt(i);
  162.             return sum
  163.         },
  164.         getfid: function() {
  165.             var x = document.activeElement,
  166.                 x_name = x.getAttribute("name");
  167.             if (null == x_name) {
  168.                 var x_id = x.getAttribute("id");
  169.                 return null == x_id ? -1 : cf.str2sum(x_id)
  170.             }
  171.             return cf.str2sum(x_name)
  172.         },
  173.         isIgn: function(sk) {
  174.             var el = document.activeElement,
  175.                 type_str = el.getAttribute("type"),
  176.                 type_int = null == type_str ? -1 : cf.get_type(type_str);
  177.             return 1 == type_int && cf.fidcnt > 9 && (32 == sk || 48 == sk) ? 1 : 0
  178.         },
  179.         cka: function(subEvent, eventtype) {
  180.             if (cf.ke_cnt < cf.ke_cnt_lmt) {
  181.                 var mainEvent = subEvent ? subEvent : window.event,
  182.                     sk = mainEvent.keyCode,
  183.                     sc = mainEvent.charCode,
  184.                     shiftOn = mainEvent.shiftKey ? 1 : 0,
  185.                     ctrlOn = mainEvent.ctrlKey ? 1 : 0,
  186.                     metaOn = mainEvent.metaKey ? 1 : 0,
  187.                     altOn = mainEvent.altKey ? 1 : 0,
  188.                     flags = 8 * shiftOn + 4 * ctrlOn + 2 * metaOn + altOn,
  189.                     ts = cf.get_cf_date() - cf.start_ts,
  190.                     fid = cf.getfid(),
  191.                     dbg = 0;
  192.                 sc && sk && (sk = 0 != sc && 0 != sk && sc != sk ? -1 : 0 != sk ? sk : sc), 0 == ctrlOn && 0 == metaOn && 0 == altOn && sk >= 32 && (sk = 3 == eventtype && sk >= 32 && 126 >= sk ? -2 : sk >= 33 && 47 >= sk ? -3 : sk >= 112 && 123 >= sk ? -4 : -2), fid != cf.prevfid ? (cf.fidcnt = 0, cf.prevfid = fid) : cf.fidcnt = cf.fidcnt + 1;
  193.                 var isIgn = cf.isIgn(sk);
  194.                 if (0 == isIgn) {
  195.                     var new_kact = cf.ke_cnt + "," + eventtype + "," + ts + "," + sk + "," + dbg + "," + flags + "," + fid + ";";
  196.                     cf.kact = cf.kact + new_kact, cf.ke_vel = cf.ke_vel + cf.ke_cnt + eventtype + ts + sk + flags + fid, cf.ke_cnt++
  197.                 }
  198.             }!cf.js_post || 1 != eventtype || 13 != sk && 9 != sk || (cf.aj_type = 2, cf.bpd(), cf.pd(!0), cf.ce_js_post = 1)
  199.         },
  200.         cta: function(subEvent, eventtype) {
  201.             if (1 == eventtype && cf.tme_cnt < cf.tme_cnt_lmt || 1 != eventtype && cf.te_cnt < cf.te_cnt_lmt) {
  202.                 var mainEvent = subEvent ? subEvent : window.event;
  203.                 mainEvent.pageX ? (xcoord = Math.floor(mainEvent.pageX), ycoord = Math.floor(mainEvent.pageY)) : (xcoord = Math.floor(mainEvent.clientX), ycoord = Math.floor(mainEvent.clientY));
  204.                 var ts = cf.get_cf_date() - cf.start_ts,
  205.                     tot_te_cnt = cf.te_cnt + cf.tme_cnt,
  206.                     new_tact = tot_te_cnt + "," + eventtype + "," + ts + "," + xcoord + "," + ycoord + ";";
  207.                 cf.tact = cf.tact + new_tact, cf.te_vel = cf.te_vel + tot_te_cnt + eventtype + ts + xcoord + ycoord, 1 == eventtype ? cf.tme_cnt++ : cf.te_cnt++, window.addEventListener && window.addEventListener("deviceorientation", cf.cdoa, !0), cf.doa_throttle = 0, window.addEventListener && window.addEventListener("devicemotion", cf.cdma, !0), cf.dma_throttle = 0
  208.             }
  209.         },
  210.         cdoa: function(event) {
  211.             if (cf.doe_cnt < cf.doe_cnt_lmt && cf.doa_throttle < 2) {
  212.                 var ts = cf.get_cf_date() - cf.start_ts,
  213.                     alpha = parseFloat(cf.chknull(event.alpha)).toFixed(2),
  214.                     beta = parseFloat(cf.chknull(event.beta)).toFixed(2),
  215.                     gamma = parseFloat(cf.chknull(event.gamma)).toFixed(2),
  216.                     new_doact = cf.doe_cnt + "," + ts + "," + alpha + "," + beta + "," + gamma + ";";
  217.                 cf.doact = cf.doact + new_doact, cf.doe_vel = cf.doe_vel + cf.doe_cnt + ts, cf.doe_cnt++
  218.             }
  219.             cf.doa_throttle++
  220.         },
  221.         cdma: function(event) {
  222.             if (event.acceleration && event.accelerationIncludingGravity && event.rotationRate) {
  223.                 if (cf.dme_cnt < cf.dme_cnt_lmt && cf.dma_throttle < 2) {
  224.                     var ts = cf.get_cf_date() - cf.start_ts,
  225.                         xa = parseFloat(cf.chknull(event.acceleration.x)).toFixed(2),
  226.                         ya = parseFloat(cf.chknull(event.acceleration.y)).toFixed(2),
  227.                         za = parseFloat(cf.chknull(event.acceleration.z)).toFixed(2),
  228.                         xag = parseFloat(cf.chknull(event.accelerationIncludingGravity.x)).toFixed(2),
  229.                         yag = parseFloat(cf.chknull(event.accelerationIncludingGravity.y)).toFixed(2),
  230.                         zag = parseFloat(cf.chknull(event.accelerationIncludingGravity.z)).toFixed(2),
  231.                         ralpha = parseFloat(cf.chknull(event.rotationRate.alpha)).toFixed(2),
  232.                         rbeta = parseFloat(cf.chknull(event.rotationRate.beta)).toFixed(2),
  233.                         rgamma = parseFloat(cf.chknull(event.rotationRate.gamma)).toFixed(2),
  234.                         new_dmact = cf.dme_cnt + "," + ts + "," + xa + "," + ya + "," + za + "," + xag + "," + yag + "," + zag + "," + ralpha + "," + rbeta + "," + rgamma + ";";
  235.                     cf.dmact = cf.dmact + new_dmact, cf.dme_vel = cf.dme_vel + cf.dme_cnt + ts, cf.dme_cnt++
  236.                 }
  237.                 cf.dma_throttle++
  238.             }
  239.         },
  240.         get_type: function(type_str) {
  241.             return "text" == type_str || "search" == type_str || "url" == type_str || "email" == type_str || "tel" == type_str ? 0 : "password" == type_str ? 1 : 2
  242.         },
  243.         chknull: function(val) {
  244.             return null == val ? -1 : val
  245.         },
  246.         forminfo: function() {
  247.             var txt = "",
  248.                 ins = "",
  249.                 inputEl = document.getElementsByTagName("input"),
  250.                 ac = -1,
  251.                 i = 0;
  252.             for (i = 0; i < inputEl.length; i++) {
  253.                 var el = inputEl[i],
  254.                     el_name = cf.str2sum(el.getAttribute("name")),
  255.                     el_id = cf.str2sum(el.getAttribute("id")),
  256.                     req_str = el.getAttribute("required"),
  257.                     req_int = null == req_str ? 0 : 1,
  258.                     type_str = el.getAttribute("type"),
  259.                     type_int = null == type_str ? -1 : cf.get_type(type_str),
  260.                     ac_str = el.getAttribute("autocomplete");
  261.                 null == ac_str ? ac = -1 : (ac_str = ac_str.toLowerCase(), ac = "off" == ac_str ? 0 : "on" == ac_str ? 1 : 2);
  262.                 var defaultVal_str = el.defaultValue,
  263.                     val = el.value,
  264.                     newVal = 0;
  265.                 val && newVal ? 0 != val.length && val != defaultVal_str && (newVal = 1) : val && 0 != val.length && (newVal = 1), txt = txt + type_int + "," + ac + "," + newVal + "," + req_int + "," + el_id + "," + el_name + ";", ins = ins + newVal + ";"
  266.             }
  267.             return null == cf.ins && (cf.ins = ins), cf.cns = ins, txt
  268.         },
  269.         startdoa: function() {
  270.             window.addEventListener && window.addEventListener("deviceorientation", cf.cdoa, !0), cf.doa_throttle = 0
  271.         },
  272.         startdma: function() {
  273.             window.addEventListener && window.addEventListener("devicemotion", cf.cdma, !0), cf.dma_throttle = 0
  274.         },
  275.         updatet: function() {
  276.             return cf.get_cf_date() - cf.start_ts
  277.         },
  278.         htm: function(event) {
  279.             cf.cta(event, 1)
  280.         },
  281.         hts: function(event) {
  282.             cf.cta(event, 2)
  283.         },
  284.         hte: function(event) {
  285.             cf.cta(event, 3)
  286.         },
  287.         htc: function(event) {
  288.             cf.cta(event, 4)
  289.         },
  290.         hmm: function(event) {
  291.             cf.cma(event, 1)
  292.         },
  293.         hc: function(event) {
  294.             cf.cma(event, 2)
  295.         },
  296.         hmd: function(event) {
  297.             cf.cma(event, 3)
  298.         },
  299.         hmu: function(event) {
  300.             cf.cma(event, 4)
  301.         },
  302.         hkd: function(event) {
  303.             cf.cka(event, 1)
  304.         },
  305.         hku: function(event) {
  306.             cf.cka(event, 2)
  307.         },
  308.         hkp: function(event) {
  309.             cf.cka(event, 3)
  310.         },
  311.         cfsubmit: function() {
  312.             cf.js_post ? (cf.aj_type = 4, cf.bpd(), 0 == cf.ce_js_post && cf.cns != cf.ins && cf.pd(!0)) : cf.bpd()
  313.         },
  314.         getdurl: function() {
  315.             return cf.enReadDocUrl ? document.URL : ""
  316.         },
  317.         bpd: function() {
  318.             var deltat = cf.updatet(),
  319.                 tot_vel = cf.ke_vel + cf.me_vel + cf.doe_vel + cf.dme_vel + cf.te_vel,
  320.                 misc_stat = cf.ke_vel + "," + cf.me_vel + "," + cf.te_vel + "," + cf.doe_vel + "," + cf.dme_vel + "," + tot_vel + "," + deltat + "," + cf.init_time + "," + cf.start_ts,
  321.                 dinfo = cf.get_dinfo(),
  322.                 do_str = window.DeviceOrientationEvent ? "do_en" : "do_dis",
  323.                 dm_str = window.DeviceMotionEvent ? "dm_en" : "dm_dis",
  324.                 touch_str = window.TouchEvent ? "t_en" : "t_dis",
  325.                 event_en_mask = do_str + "," + dm_str + "," + touch_str,
  326.                 forminfo = cf.forminfo(),
  327.                 page_url = cf.getdurl(),
  328.                 aj_stat = cf.aj_type + "," + cf.aj_indx;
  329.             if (cf.sensor_data = "cfv," + cf.ver + ":dlm:d," + dinfo + ":dlm:e," + event_en_mask + ":dlm:if," + cf.informinfo + ":dlm:f," + forminfo + ":dlm:l," + cf.kact + ":dlm:n," + cf.mact + ":dlm:u," + cf.tact + ":dlm:doe," + cf.doact + ":dlm:dme," + cf.dmact + ":dlm:page_url," + page_url + ":dlm:misc," + misc_stat + ":dlm:aj," + aj_stat, !cf.fpcf.fpValCalculated && (0 == cf.js_post || cf.aj_indx > 0) && cf.fpcf.fpVal(), cf.sensor_data = cf.sensor_data + ":dlm:df," + cf.fpcf.fpValstr.replace(/\"/g, '\\"') + ":dlm:xx:dlm:yy:dlm:zz", 0 == cf.js_post)
  330.                 if (0 == cf.sdfn.length) document.getElementById("sensor_data").value = cf.sensor_data;
  331.                 else
  332.                     for (var x = 0; x < cf.sdfn.length; x++)
  333.                         if (document.getElementById(cf.sdfn[x])) document.getElementById(cf.sdfn[x]).value = cf.sensor_data
  334.         },
  335.         getLoc: function() {
  336.             var x;
  337.             ua = navigator.userAgent, x = ua.indexOf("MSIE") > -1 ? 0 : 1;
  338.             var en;
  339.             en = cf.pd_en(), en && window.XMLHttpRequest && (xmlhttp_loc = new XMLHttpRequest, x && (xmlhttp_loc.onreadystatechange = function() {
  340.                 if (4 == xmlhttp_loc.readyState)
  341.                     if (200 == xmlhttp_loc.status) {
  342.                         var json_resp = xmlhttp_loc.responseText;
  343.                         cf.loc = null == json_resp ? "err-json_null" : json_resp
  344.                     } else cf.loc = "err-" + xmlhttp_loc.status
  345.             }, xmlhttp_loc.open("GET", cf.cf_url + "api/v1/getloc", !0), xmlhttp_loc.send()))
  346.         },
  347.         startTracking: function() {
  348.             cf.enOnSubmitAdder && cf.addOnSubmitActions(), setInterval(function() {
  349.                 cf.startdma()
  350.             }, 3e3), setInterval(function() {
  351.                 cf.startdoa()
  352.             }, 3e3), document.addEventListener ? (document.addEventListener("touchmove", cf.htm, !0), document.addEventListener("touchstart", cf.hts, !0), document.addEventListener("touchend", cf.hte, !0), document.addEventListener("touchcancel", cf.htc, !0), document.addEventListener("mousemove", cf.hmm, !0), document.addEventListener("click", cf.hc, !0), document.addEventListener("mousedown", cf.hmd, !0), document.addEventListener("mouseup", cf.hmu, !0), document.addEventListener("keydown", cf.hkd, !0), document.addEventListener("keyup", cf.hku, !0), document.addEventListener("keypress", cf.hkp, !0)) : (document.attachEvent("touchmove", cf.htm), document.attachEvent("touchstart", cf.hts), document.attachEvent("touchend", cf.hte), document.attachEvent("touchcancel", cf.htc), document.attachEvent("onmousemove", cf.hmm), document.attachEvent("onclick", cf.hc), document.attachEvent("onmousedown", cf.hmd), document.attachEvent("onmouseup", cf.hmu), document.attachEvent("onkeydown", cf.hkd), document.attachEvent("onkeyup", cf.hku), document.attachEvent("onkeypress", cf.hkp)), cf.enGetLoc && cf.getLoc(), cf.informinfo = cf.forminfo(), cf.js_post ? (cf.aj_type = 0, cf.bpd(), cf.pd(!0)) : cf.insertFields()
  353.         },
  354.         addOnSubmitActions: function() {
  355.             for (forms = document.forms, i = 0; i < forms.length; i++) formobj = forms[i], formobj.addEventListener ? formobj.addEventListener("submit", cf.cfsubmit, !1) : formobj.attachEvent && formobj.attachEvent("onsubmit", cf.cfsubmit)
  356.         },
  357.         insertFields: function() {
  358.             var i;
  359.             for (forms = document.forms, i = 0; i < forms.length && 1 > i; i++) formobj = forms[i], cf.enAddHidden && cf.addHidden(formobj, "sensor_data", "default")
  360.         },
  361.         addHidden: function(theForm, key, value) {
  362.             var input = document.createElement("input");
  363.             input.type = "hidden", input.name = key, input.value = value, input.id = key, theForm.appendChild(input)
  364.         },
  365.         getbyte: function(s, i) {
  366.             var x = s.charCodeAt(i);
  367.             if (x > 255) throw base64.makeDOMException();
  368.             return x
  369.         },
  370.         encode: function(s) {
  371.             if (1 !== arguments.length) throw new SyntaxError("Not enough arguments");
  372.             var i, b10, padchar = "=",
  373.                 alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
  374.                 x = [];
  375.             s = "" + s;
  376.             var imax = s.length - s.length % 3;
  377.             if (0 === s.length) return s;
  378.             for (i = 0; imax > i; i += 3) b10 = cf.getbyte(s, i) << 16 | cf.getbyte(s, i + 1) << 8 | cf.getbyte(s, i + 2), x.push(alpha.charAt(b10 >> 18)), x.push(alpha.charAt(b10 >> 12 & 63)), x.push(alpha.charAt(b10 >> 6 & 63)), x.push(alpha.charAt(63 & b10));
  379.             switch (s.length - imax) {
  380.                 case 1:
  381.                     b10 = cf.getbyte(s, i) << 16, x.push(alpha.charAt(b10 >> 18) + alpha.charAt(b10 >> 12 & 63) + padchar + padchar);
  382.                     break;
  383.                 case 2:
  384.                     b10 = cf.getbyte(s, i) << 16 | cf.getbyte(s, i + 1) << 8, x.push(alpha.charAt(b10 >> 18) + alpha.charAt(b10 >> 12 & 63) + alpha.charAt(b10 >> 6 & 63) + padchar)
  385.             }
  386.             return x.join("")
  387.         },
  388.         loadXMLDoc_new: function(url, ptype) {
  389.             xmlhttp = window.XDomainRequest ? new XDomainRequest : window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP"), xmlhttp.open("POST", url, ptype);
  390.             var val = cf.encode(cf.api_public_key + ":");
  391.             cf.auth = ',"auth" : "' + val + '"', xmlhttp.setRequestHeader && (xmlhttp.setRequestHeader("Content-type", "application/json"), xmlhttp.setRequestHeader("Authorization", "Basic " + val), cf.auth = "");
  392.             var obj = '{"session_id" : "' + cf.session_id + '","sensor_data" : "' + cf.sensor_data + '"' + cf.auth + "}";
  393.             xmlhttp.send(obj)
  394.         },
  395.         pd_en: function() {
  396.             var x, url = cf.getdurl();
  397.             return 1;
  398.             return x = url.indexOf("home.html") > -1 ? 1 : 0, cf.start_ts % 10 != 0 ? 0 : cf.aj_indx > 3 ? 0 : x && cf.aj_indx > 0 ? 0 : 1
  399.         },
  400.         pd: function(ptype) {
  401.             var en;
  402.             en = cf.pd_en(), en && (cf.loadXMLDoc_new(cf.cf_url + "api/v1/attempt", ptype), cf.aj_indx = cf.aj_indx + 1)
  403.         },
  404.         listFunctions: {
  405.             _setJsPost: function(a) {
  406.                 cf.js_post = a
  407.             },
  408.             _setSessionId: function(a) {
  409.                 cf.session_id = a
  410.             },
  411.             _setJavaScriptKey: function(a) {
  412.                 cf.api_public_key = a
  413.             },
  414.             _setEnOnSubmitAdder: function(a) {
  415.                 cf.enOnSubmitAdder = a
  416.             },
  417.             _setEnAddHidden: function(a) {
  418.                 cf.enAddHidden = a
  419.             },
  420.             _setInitTime: function(a) {
  421.                 cf.init_time = a
  422.             },
  423.             _setApiUrl: function(a) {
  424.                 cf.cf_url = a
  425.             },
  426.             _setEnGetLoc: function(a) {
  427.                 cf.enGetLoc = a
  428.             },
  429.             _setEnReadDocUrl: function(a) {
  430.                 cf.enReadDocUrl = a
  431.             },
  432.             _setSDFieldNames: function() {
  433.                 var y;
  434.                 for (y = 0; y < arguments.length; y += 1) cf.sdfn.push(arguments[y])
  435.             }
  436.         },
  437.         applyFunc: function() {
  438.             var a, b, c;
  439.             for (a = 0; a < arguments.length; a += 1) c = arguments[a];
  440.             b = c.shift(), cf.listFunctions[b].apply(cf.listFunctions, c)
  441.         }
  442.     };
  443. for (i = 0; i < _cf.length; i++) cf.applyFunc(_cf[i]);
  444. _cf = {
  445.         push: cf.applyFunc
  446.     },
  447.     function(context) {
  448.         function crc32(array, previous) {
  449.             "function" == typeof CanvasPixelArray && array instanceof CanvasPixelArray || "function" != typeof Uint8Array || array instanceof Uint8Array || (array = new Uint8Array(array.buffer instanceof ArrayBuffer ? array.buffer : array));
  450.             for (var crc = -1 ^ ~~previous, n = 0; n < array.length; n++) crc = CRC_TABLE[255 & (crc ^ array[n])] ^ crc >>> 8;
  451.             return -1 ^ crc
  452.         }
  453.         var fpcf = {};
  454.         context.fpcf = fpcf, fpcf.filter = function(arr, fun) {
  455.             "use strict";
  456.             var t = arr,
  457.                 len = t.length >>> 0;
  458.             if ("function" != typeof fun) throw new TypeError;
  459.             for (var res = [], thisp = this, i = 0; len > i; i++)
  460.                 if (i in t) {
  461.                     var val = t[i];
  462.                     fun.call(thisp, val, i, t) && res.push(val)
  463.                 }
  464.             return res
  465.         }, fpcf.forEach = function(arr, fun) {
  466.             var len = arr.length >>> 0;
  467.             if ("function" != typeof fun) throw new TypeError;
  468.             for (var thisp = this, i = 0; len > i; i++) i in arr && fun.call(thisp, arr[i])
  469.         }, fpcf.fpValstr = "-1", fpcf.fpValCalculated = !1, fpcf.cache = {}, fpcf.clearCache = function() {
  470.             fpcf.cache = {}
  471.         }, fpcf.stringify = function(obj) {
  472.             if ("JSON" in window) return JSON.stringify(obj);
  473.             var t = typeof obj;
  474.             if ("object" != t || null === obj) return "string" == t && (obj = '"' + obj + '"'), String(obj);
  475.             var n, v, json = [],
  476.                 arr = obj && obj.constructor == Array;
  477.             for (n in obj) v = obj[n], t = typeof v, obj.hasOwnProperty(n) && ("string" == t ? v = '"' + v + '"' : "object" == t && null !== v && (v = fpcf.stringify(v)), json.push((arr ? "" : '"' + n + '":') + String(v)));
  478.             return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}")
  479.         }, fpcf.fpVal = function() {
  480.             fpcf.fpValCalculated = !0;
  481.             var data = fpcf.data();
  482.             fpcf.fpValstr = fpcf.stringify(data)
  483.         }, fpcf.timezoneOffsetKey = function() {
  484.             return (new Date).getTimezoneOffset()
  485.         }, fpcf.data = function() {
  486.             return {
  487.                 cfp: fpcf.canvas(),
  488.                 fonts: fpcf.fonts(),
  489.                 browser: fpcf.browser(),
  490.                 plugins: fpcf.pluginNames(),
  491.                 screen: fpcf.screen(),
  492.                 ss: fpcf.sessionStorageKey(),
  493.                 ls: fpcf.localStorageKey(),
  494.                 idb: fpcf.indexedDbKey(),
  495.                 tzo: fpcf.timezoneOffsetKey(),
  496.                 rtc: fpcf.webrtcKey()
  497.             }
  498.         }, fpcf.screen = function() {
  499.             return {
  500.                 colorDepth: screen.colorDepth,
  501.                 pixelDepth: screen.pixelDepth
  502.             }
  503.         }, fpcf.browser = function() {
  504.             return {
  505.                 cookies: navigator.cookieEnabled,
  506.                 java: navigator.javaEnabled(),
  507.                 dnt: navigator.doNotTrack
  508.             }
  509.         }, fpcf.PLUGINS = ["Google Talk Plugin Video Renderer", "Google Talk Plugin", "Java Applet Plug-in", "QuickTime Plug-in 7.7.3", "Default Browser Helper", "Shockwave Flash", "AdobeAAMDetect", "AdobeExManDetect", "iPhotoPhotocast", "SharePoint Browser Plug-in", "Google Earth Plug-in", "RealPlayer Plugin.plugin", "DivX Web Player", "Wacom Pressure Plug-In", "Microsoft Office Live Plug-in", "Widevine Content Decryption Module", "Chrome Remote Desktop Viewer", "Chrome PDF Viewer", "Native Client", "Google Talk Plugin Video Renderer", "Unity Player", "Default Browser Helper", "Silverlight Plug-In", "Wacom Tablet Plug-In", "WebKit-integrierte PDF"], fpcf.plugins = function() {
  510.             if (!navigator.plugins) return null;
  511.             var plugins = [];
  512.             return fpcf.forEach(fpcf.PLUGINS, function(plugin) {
  513.                 var p = navigator.plugins[plugin];
  514.                 void 0 !== p && (plugins[plugin] = p)
  515.             }), plugins.sort()
  516.         }, fpcf.pluginNames = function() {
  517.             return navigator.plugins ? fpcf.filter(fpcf.PLUGINS, function(plugin) {
  518.                 return void 0 !== navigator.plugins[plugin] ? !0 : !1
  519.             }) : null
  520.         }, fpcf.canvas = function() {
  521.             if (void 0 !== fpcf.cache.canvas) return fpcf.cache.canvas;
  522.             var canvas = document.createElement("canvas");
  523.             canvas.width = 280, canvas.height = 60, canvas.style.display = "none", canvas.id = "cfc";
  524.             var result = -1;
  525.             if ("function" == typeof canvas.getContext) {
  526.                 var c = canvas.getContext("2d"),
  527.                     text = "fpcf canvasing text";
  528.                 c.fillStyle = "rgb(178, 214, 232)", c.fillRect(10, 20, 60, 80), c.fillStyle = "#111", c.font = "16pt Arial", c.fillText(text, 2, 40), c.strokeStyle = "rgb(120, 186, 176)", c.arc(80, 10, 20, 0, Math.PI, !1), c.stroke();
  529.                 var imageData = c.getImageData(0, 0, 280, 60);
  530.                 result = crc32(imageData.data).toString(), fpcf.cache.canvas = result
  531.             }
  532.             return result
  533.         }, fpcf.fonts = function(customFonts) {
  534.             if (void 0 !== fpcf.cache.fonts) return fpcf.cache.fonts;
  535.             var fonts = ["Arial", "Times New Roman", "Helvetica", "Open Sans", "Source Sans Pro", "Comic Sans MS", "Century", "Century Gothic", "Monaco", "Lato", "Geneva", "Futura", "Fantasque Sans Mono", "Courier", "Courier New", "Corsiva Hebrew", "Comic Neue", "Cambria", "Calibri", "TI-Nspire", "Adobe Braille", "Adobe Hebrew", "Apple LiGothic", "Apple Farben-Emoji", "Avenir", "Avenir Next", "Batang", "Bell MT", "Birch Std", "Damascus", "Microsoft Sans Serif", "Minion Pro", "Times", "Roboto", "Oswald", "Droid Sans", "Droid Serif", "Roboto Condensed", "Ubuntu", "Raleway", "Lobster", "Ubuntu Condensed", "Helvetica Neue"];
  536.             "undefined" != typeof customFonts && (fonts = customFonts);
  537.             var STRING = "wwzrllTNMLllllliiimmqßmmmmiiill❗️🔻llplö😄©_~ñ",
  538.                 defaults = [{
  539.                     name: "serif"
  540.                 }, {
  541.                     name: "sans-serif"
  542.                 }, {
  543.                     name: "monospace"
  544.                 }],
  545.                 span = document.createElement("span");
  546.             span.innerHTML = STRING, span.style.fontSize = "86px", fpcf.forEach(defaults, function(font) {
  547.                 span.style.fontFamily = font.name, document.body.appendChild(span), font.width = span.offsetWidth, font.height = span.offsetHeight, document.body.removeChild(span)
  548.             });
  549.             var foundFonts = [];
  550.             fpcf.forEach(fonts, function(font) {
  551.                 for (var found = !1, len = defaults.length, i = 0; len > i && (defaultFont = defaults[i], span.style.fontFamily = font + "," + defaultFont.name, document.body.appendChild(span), (span.offsetWidth !== defaultFont.width || span.offsetHeight !== defaultFont.height) && (found = !0), document.body.removeChild(span), !found); i++);
  552.                 found && foundFonts.push(font)
  553.             });
  554.             var output = foundFonts.sort();
  555.             return fpcf.cache.fonts = output, output
  556.         }, fpcf.webrtcKey = function() {
  557.             return "function" == typeof window.RTCPeerConnection || "function" == typeof window.mozRTCPeerConnection || "function" == typeof window.webkitRTCPeerConnection
  558.         }, fpcf.indexedDbKey = function() {
  559.             return fpcf.hasIndexedDB() ? !0 : !1
  560.         }, fpcf.sessionStorageKey = function() {
  561.             return fpcf.hasSessionStorage() ? !0 : !1
  562.         }, fpcf.localStorageKey = function() {
  563.             return fpcf.hasLocalStorage() ? !0 : !1
  564.         }, fpcf.hasSessionStorage = function() {
  565.             try {
  566.                 return !!window.sessionStorage
  567.             } catch (e) {
  568.                 return !0
  569.             }
  570.         }, fpcf.hasLocalStorage = function() {
  571.             try {
  572.                 return !!window.localStorage
  573.             } catch (e) {
  574.                 return !0
  575.             }
  576.         }, fpcf.hasIndexedDB = function() {
  577.             return !!window.indexedDB
  578.         };
  579.         var CRC_TABLE = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117]
  580.     }(cf), cf.startTracking(), setTimeout(cf.fpcf.fpVal, 100);
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top