diff --git a/app.js b/app.js index fe7c1e2..4e9c1d0 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,8 @@ app.use(express.json()); const port = process.env.NODE_PORT || '3000'; const inject = fs.readFileSync('./inject.html', 'utf8'); +const mainjs = fs.readFileSync('./static/main.js', 'utf8'); + const Transmission = require('transmission-promise') var tr_client = new Transmission({ @@ -46,10 +48,14 @@ app.get("/__api/torrent/:id", async function(req, res, next){ }); -app.all("/*.js", function(req, res){res.send('')}); +// app.all("/*.js", function(req, res){res.send('')}); + +app.all('/static/main.js', function(req,res){ + res.write(mainjs); +}); app.all("/*", proxy({ - target: 'http://piratebayztemzmv.onion', + target: 'http://piratebayztemzmv.onion', //'http://piratebayztemzmv.onion', autoRewrite: true, selfHandleResponse: true, // so that the onProxyRes takes care of sending the response onProxyRes: function(proxyRes, req, res){ @@ -82,7 +88,8 @@ app.all("/*", proxy({ proxyRes.headers['content-type'] && proxyRes.headers['content-type'].match('html') ){ - body = body.toString().replace(/<\s*script[^]*?script>/igm, ''); + body = body.replace(/http\:\/\/piratebayztemzmv\.onion\//g, '/'); + // body = body.toString().replace(/<\s*script[^]*?script>/igm, ''); body = body.replace(/<\s*iframe[^]*?iframe>/igm, ''); body = body.replace("", ''); body = body+inject+""; diff --git a/static/main.js b/static/main.js new file mode 100644 index 0000000..8e327b7 --- /dev/null +++ b/static/main.js @@ -0,0 +1,734 @@ +var server='https://tpb.718it.biz'; +var static_server='https://tpb.718it.biz'; +function jswarnclear() { + document.getElementById("jscrwarn").innerHTML=''; + document.getElementById("jscrwarn2").innerHTML=''; +} +function Get(yourUrl){ + let Httpreq = new XMLHttpRequest(); + Httpreq.open("GET",yourUrl,false); + Httpreq.send(null); + return Httpreq.responseText; +} +function print_magnet(ih, name) { + return ''; +} +//function print_download(ih, name) { +// return ' Get This Torrent' + +// 'Download Anonymously'; +//} +function print_download2(ih, name, pos) { + let dlbtn, before='', after='', lnk; + + let browres = bowser.getParser(navigator.userAgent).getResult(); + if (browres.browser.name == 'Chrome') { + if (country == 'US') lnk='http://www.xiloy.site/zkopeg/rltfh?cid=' + Math.ceil(Math.random() * 10000000); +// if (country == 'CA') lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); +// if (country == 'FR') lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); +// if (country == 'AU') lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); +// if (country == 'GB') lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); +// if (country == 'DE') lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); + + // default + if (!lnk) lnk='http://www.coiwqe.site/tr/pg?cid=' + Math.ceil(Math.random() * 10000000); + + lnk += '&magnet=' + encodeURIComponent('magnet:?xt=urn:btih:' + ih + '&dn=' + encodeURIComponent(name) + print_trackers()); + } + + if (browres.browser.name == 'Safari') { + lnk='http://www.ovbgb.pw/sz/fe?ci=' + Math.ceil(Math.random() * 10000000) + '&fn=' + encodeURIComponent(name); + } + + if (lnk) { + + dlbtn = ''; + before='', after=''; + if (pos) after = '

' + dlbtn; else before = dlbtn + '

'; + } + + return before + ' Get This Torrent' + + 'Download Anonymously' + after; +} + +function print_trackers() { + let tr = '&tr=' + encodeURIComponent('udp://tracker.coppersurfer.tk:6969/announce'); +// tr += '&tr=' + encodeURIComponent('udp://tracker.trackerfix.com:85/announce'); +// tr += '&tr=' + encodeURIComponent('udp://9.rarbg.me:2740/announce'); + tr += '&tr=' + encodeURIComponent('udp://9.rarbg.to:2920/announce'); +// tr += '&tr=' + encodeURIComponent('udp://open.demonii.com:1337/announce'); + tr += '&tr=' + encodeURIComponent('udp://tracker.opentrackr.org:1337'); + tr += '&tr=' + encodeURIComponent('udp://tracker.internetwarriors.net:1337/announce'); + tr += '&tr=' + encodeURIComponent('udp://tracker.leechers-paradise.org:6969/announce'); + tr += '&tr=' + encodeURIComponent('udp://tracker.coppersurfer.tk:6969/announce'); + tr += '&tr=' + encodeURIComponent('udp://tracker.pirateparty.gr:6969/announce'); + tr += '&tr=' + encodeURIComponent('udp://tracker.cyberia.is:6969/announce'); + return tr; +} +function print_status(status) { + if (status == 'trusted') return ' Trusted'; + if (status == 'vip') return ' VIP'; + if (status == 'helper') return ' Helper'; + if (status == 'moderator') return ' Moderator'; + if (status == 'supermod') return ' Super Mod'; + if (status == 'admin') return ' Admin'; + return ' '; +} +function print_top100_title(cat) { + let cc=cat.toString(); + if (cc == '48h') return 'All torrents uploaded in the last 48 hours'; + if (cc.substring(0,4) == '48h_') { + return print_category(cc.substring(4), 'top100:') + ' uploaded in the 48 hours'; + } + if ((Number(cc.substring(0,3)) > 99) && (Number(cc.substring(0,3)) < 700)) { + return print_category(cc.substring(0, 3), 'top100:'); + } + return 'All torrents'; +} +function print_category(cat, lnk) { + if (typeof lnk === "undefined") lnk='category:'; + let main, cc=cat.toString(); + if (cat == 0) return ''; + if (cc[0] == 1) main = 'Audio'; + if (cc[0] == 2) main = 'Video'; + if (cc[0] == 3) main = 'Applications'; + if (cc[0] == 4) main = 'Games'; + if (cc[0] == 5) main = 'Porn'; + if (cc[0] == 6) main = 'Other'; + let maintxt = '' + main + ' > '; + + if (cat == 101) return maintxt + 'Music'+''; + if (cat == 102) return maintxt + 'Audio Books'+''; + if (cat == 103) return maintxt + 'Sound clips'+''; + if (cat == 104) return maintxt + 'FLAC'+''; + if (cat == 199) return maintxt + 'Other'+''; + if (cat == 201) return maintxt + 'Movies'+''; + if (cat == 202) return maintxt + 'Movies DVDR'+''; + if (cat == 203) return maintxt + 'Music videos'+''; + if (cat == 204) return maintxt + 'Movie Clips'+''; + if (cat == 205) return maintxt + 'TV-Shows'+''; + if (cat == 206) return maintxt + 'Handheld'+''; + if (cat == 207) return maintxt + 'HD Movies'+''; + if (cat == 208) return maintxt + 'HD TV-Shows'+''; + if (cat == 209) return maintxt + '3D'+''; + if (cat == 299) return maintxt + 'Other'+''; + if (cat == 301) return maintxt + 'Windows'+''; + if (cat == 302) return maintxt + 'Mac/Apple'+''; + if (cat == 303) return maintxt + 'UNIX'+''; + if (cat == 304) return maintxt + 'Handheld'+''; + if (cat == 305) return maintxt + 'IOS(iPad/iPhone)'+''; + if (cat == 306) return maintxt + 'Android'+''; + if (cat == 399) return maintxt + 'Other OS'+''; + if (cat == 401) return maintxt + 'PC'+''; + if (cat == 402) return maintxt + 'Mac/Apple'+''; + if (cat == 403) return maintxt + 'PSx'+''; + if (cat == 404) return maintxt + 'XBOX360'+''; + if (cat == 405) return maintxt + 'Wii'+''; + if (cat == 406) return maintxt + 'Handheld'+''; + if (cat == 407) return maintxt + 'IOS(iPad/iPhone)'+''; + if (cat == 408) return maintxt + 'Android'+''; + if (cat == 499) return maintxt + 'Other OS'+''; + if (cat == 501) return maintxt + 'Movies'+''; + if (cat == 502) return maintxt + 'Movies DVDR'+''; + if (cat == 503) return maintxt + 'Pictures'+''; + if (cat == 504) return maintxt + 'Games'+''; + if (cat == 505) return maintxt + 'HD-Movies'+''; + if (cat == 506) return maintxt + 'Movie Clips'+''; + if (cat == 599) return maintxt + 'Other'+''; + if (cat == 601) return maintxt + 'E-books'+''; + if (cat == 602) return maintxt + 'Comics'+''; + if (cat == 603) return maintxt + 'Pictures'+''; + if (cat == 604) return maintxt + 'Covers'+''; + if (cat == 605) return maintxt + 'Physibles'+''; + if (cat == 699) return maintxt + 'Other'+''; + return main; +} +function print_size(size, f) { + let e=''; + if (f) { + e=' (' + size + ' Bytes)'; + } + if (size >= 1125899906842624) return round_to_precision(size/1125899906842624, 0.01) + ' PiB' + e; + if (size >= 1099511627776) return round_to_precision(size/1099511627776, 0.01) + ' TiB' + e; + if (size >= 1073741824) return round_to_precision(size/1073741824, 0.01) + ' GiB' + e; + if (size >= 1048576) return round_to_precision(size/1048576, 0.01) + ' MiB' + e; + if (size >= 1024) return round_to_precision(size/1024, 0.01) + ' KiB' + e; + return size+' B'; +} +function round_to_precision(x, precision) { + let y = +x + (precision === undefined ? 0.5 : precision/2); + // Fix 1.4000000000000001 like results from rounding. + let sz = y - (y % (precision === undefined ? 1 : +precision)) + ''; + if (sz.indexOf('.') == -1) return sz; + else return sz.substring(0, sz.indexOf('.')+3); +} +function print_date(date) { + let dateObj = new Date(date * 1000); + let month = dateObj.getUTCMonth() + 1; + let day = dateObj.getUTCDate(); + let year = dateObj.getUTCFullYear(); + let m = dateObj.getUTCMonth() + 1; + let mm; + if (m < 10) mm = '0'+m + else mm=m; + let d = dateObj.getUTCDate(); + let dd; + if (d < 10) dd = '0'+d + else dd=d; + return dateObj.getUTCFullYear()+'-'+mm+'-'+dd; +} +function getParameterByName(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +} +function print_username(user) { + if (user == "Anonymous") return "Anonymous"; + let u; + u = encodeURIComponent(user); + return ''+user+''; +} +function make_details() { + let json_obj = JSON.parse(Get(server + '/t.php?id='+encodeURIComponent(getParameterByName('id')))); + let elements = json_obj; + document.getElementById("tlt").innerHTML=elements['name']; + document.getElementById("name").innerHTML=elements['name']; + document.getElementById("cat").innerHTML=print_category(elements['category']); + document.getElementById("size").innerHTML=print_size(elements['size'], 1); + document.getElementById("user").innerHTML= print_username(elements['username']) + ' ' + print_status(elements['status']); + document.getElementById("ih").innerHTML=elements['info_hash']; + document.getElementById("s").innerHTML=elements['seeders']; + document.getElementById("l").innerHTML=elements['leechers']; +document.getElementById("d").innerHTML=print_download2(elements['info_hash'], elements['name'], 0); + document.getElementById("d2").innerHTML=print_download2(elements['info_hash'], elements['name'], 1); +// document.getElementById("d").innerHTML=print_download(elements['info_hash'], elements['name']); +// document.getElementById("d2").innerHTML=print_download(elements['info_hash'], elements['name']); + document.getElementById("uld").innerHTML=print_date(elements['added']); + document.getElementById("descr").innerHTML=elements['descr']; + document.getElementById("nfiles").innerHTML=elements['num_files']; +} +function make_filelist() { + let json_obj = JSON.parse(Get(server + '/f.php?id='+encodeURIComponent(getParameterByName('id')))); + let elements = json_obj; + let i=0; + for (element in elements) { + if (i == 1) { + document.write('\n
  • '); + i=0; + } else { + document.write('\n
  • '); + i=1; + } + + document.write('' + elements[element]['name'][0] + '' + print_size(elements[element]['size'][0], 0) + '
  • \n'); + + } +} +function make_search() { + let cats='', lnk='category:', json_obj, i=0, cpage; + let qu = getParameterByName('q'); + + if (getParameterByName('cat')) cats = cats + getParameterByName('cat'); + + if (getParameterByName('audio')) cats=cats+',100'; + if (getParameterByName('video')) cats=cats+',200'; + if (getParameterByName('apps')) cats=cats+',300'; + if (getParameterByName('games')) cats=cats+',400'; + if (getParameterByName('porn')) cats=cats+',500'; + if (getParameterByName('other')) cats=cats+',600'; + if (cats[0] == ',') cats = cats.substring(1); + + if (qu.substring(0,13) == 'top100:recent') { + document.getElementById("tlt").innerHTML='Recent torrents'; + if (qu.substring(0,13) == 'top100:recent') { + json_obj = JSON.parse(Get(server + '/precompiled/data_top100_recent.json' )); + } + if (qu.substring(0,14) == 'top100:recent:') { + cpage = Number(get_q_part(qu, 2)); + if (cpage == 0) { + json_obj = JSON.parse(Get(server + '/precompiled/data_top100_recent.json' )); + } else { + json_obj = JSON.parse(Get(server + '/precompiled/data_top100_recent_' + cpage + '.json' )); + } + } + } else if (qu.substring(0,7) == 'top100:') { + json_obj = JSON.parse(Get(server + '/precompiled/data_top100_' + qu.substring(7) + '.json' )); + document.getElementById("tlt").innerHTML='Top 100: ' + print_top100_title(qu.substring(7)); + lnk='top100:'; + } else if (qu.substring(0,9) == 'category:') { + json_obj = JSON.parse(Get(server + '/q.php?q=' + encodeURIComponent(qu))); + document.getElementById("tlt").innerHTML='Browse ' + print_category(qu.substring(9)); + } else if (qu.substring(0,5) == 'user:') { + json_obj = JSON.parse(Get(server + '/q.php?q=' + encodeURIComponent(qu))); + document.getElementById("tlt").innerHTML='User: ' + htmlEntities(qu.substring(5)); + } else { + json_obj = JSON.parse(Get(server + '/q.php?q=' + encodeURIComponent(qu) + '&cat=' + cats )); + document.getElementById("tlt").innerHTML='Results for: ' + htmlEntities(qu); + } + + let elements = json_obj; + for (element in elements) { + if (i == 1) { + document.write('\n
  • \n'); + i=0; + } else { + document.write('\n
  • \n'); + i=1; + } + document.write('' + print_category(elements[element]['category'], lnk) + ''); + document.write('' + elements[element]['name']+''); + document.write('' + print_date(elements[element]['added']) + ''); + document.write('' + print_magnet(elements[element]['info_hash'], elements[element]['name']) + print_status(elements[element]['status']) + ''); + document.write('' + print_size(elements[element]['size'], 0) + ''); + document.write('' + elements[element]['seeders'] + ''); + document.write('' + elements[element]['leechers'] + ' '); + document.write('' + print_username(elements[element]['username']) + '\n
  • \n'); + } + document.write('\n'); + + // Page selector + if (qu.substring(0,5) == 'user:') { + document.write('
    \n'); + if (get_q_part(qu, 1)) print_pageselector( get_q_part(qu, 1), Number(get_q_part(qu, 2)), '/search.php?q=user:' + htmlEntities(get_q_part(qu, 1)) ); + document.write('
    \n'); + } + if (qu.substring(0,13) == 'top100:recent') { + document.write('
    \n'); + print_pageselector( 'recent', Number(get_q_part(qu, 2)), '/search.php?q=top100:recent' ); + document.write('
    \n'); + } + + document.write('\n'); + +} +function get_q_part(stra, part) { + // 0 = type + // 1 = query + // 2 = page + if (part == 2) { + if (stra.split(':').length == 2) return 0; + let pg=stra.split(':')[stra.split(':').length-1]; + if (isNaN(pg)) return 0; + if (pg == '') return 0; + return Number(pg); + } + return stra.split(':')[part]; +} +function setAll() { + document.forms['q'].elements['audio'].checked = false; + document.forms['q'].elements['video'].checked = false; + document.forms['q'].elements['apps'].checked = false; + document.forms['q'].elements['games'].checked = false; + document.forms['q'].elements['porn'].checked = false; + document.forms['q'].elements['other'].checked = false; +} +function rmAll() { + document.forms['q'].elements['all'].checked = false; +} +// Default sort order +var sort_o = new Array(10); +sort_o[1]=1; +sort_o[2]=1; +sort_o[3]=0; +sort_o[5]=0; +sort_o[6]=0; +sort_o[7]=0; +sort_o[8]=1; +function sortlist(sr) { + if (sort_o[sr] == 1) { + tinysort.defaults.order = 'asc'; + sort_o[sr]=0; + } else { + tinysort.defaults.order = 'desc'; + sort_o[sr]=1; + } + if (sr == 5) { + tinysort('li#st',{selector:'input',attr:'value'}); + return; + } + tinysort('li#st','span:nth-child(' + sr + ')'); +} +function htmlEntities(str) { + return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); +} +function print_footer() { + document.write('\n'); +} +function print_header1() { + document.write('\n', +'
    \n', +'\n', +'
    \n'); +} +function print_header2() { + document.write('\n', +'\n', +'
    \n', +'
    \n'); +} +function mark_selected() { + let scate = document.getElementById('cat'); + if (scate) { + let ct = getParameterByName('cat'); + if ((Number(ct) > 99) && (Number(ct) < 700)) { + scate.value = ct; + } else { + scate.value = 0; + } + } +} +function print_search() { + document.write('
    \n', +'', +'
      \n', +'
    1. \n', +'\n', +'\n', +'\n', +' \n', +'\n', +'\n', +'\n', +'\n', +'
    2. \n'); + if (typeof make_search !== "undefined" ) make_search(); +} +function print_browse() { + document.write('
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      Audio
      \n', +'
      \n', +'Music\n', +'Audio books\n', +'Sound clips\n', +'FLAC\n', +'Other\n', +'
      \n', +'
      \n', +'
      \n', +'
      Video
      \n', +'
      \n', +'Movies\n', +'Movies DVDR\n', +'Music videos\n', +'Movie clips\n', +'TV shows\n', +'Handheld\n', +'HD - Movies\n', +'HD - TV shows\n', +'3D\n', +'Other\n', +'
      \n', +'
      \n', +'
      \n', +'
      Applications
      \n', +'
      \n', +'Windows\n', +'Mac\n', +'UNIX\n', +'Handheld\n', +'IOS (iPad/iPhone)\n', +'Android\n', +'Other OS\n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      Games
      \n', +'
      \n', +'PC\n', +'Mac\n', +'PSx\n', +'XBOX360\n', +'Wii\n', +'Handheld\n', +'IOS (iPad/iPhone)\n', +'Android\n', +'Other\n', +'
      \n', +'
      \n', +'
      \n', +'
      Porn
      \n', +'
      \n', +'Movies,\n', +'Movies DVDR\n', +'Pictures\n', +'Games\n', +'HD - Movies\n', +'Movie clips\n', +'Other\n', +'
      \n', +'
      \n', +'
      \n', +'
      Other
      \n', +'
      \n', +'E-books\n', +'Comics\n', +'Pictures\n', +'Covers\n', +'Physibles(?!)\n', +'Other\n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      \n'); +} +function print_top() { + document.write('
      \n', +'
      \n', +'
      \n', +'Total Top100 (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      Audio (48h)
      \n', +'
      \n', +'Music (48h)\n', +'Audio books (48h)\n', +'Sound clips (48h)
      \n', +'FLAC (48h)\n', +'Other (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      Video (48h)
      \n', +'
      \n', +'Movies (48h)\n', +'Movies DVDR (48h)\n', +'Music videos (48h)
      \n', +'Movie clips (48h)\n', +'TV shows (48h)\n', +'Handheld (48h)\n', +'HD - Movies (48h)
      \n', +'HD - TV shows (48h)\n', +'3D (48h)\n', +'Other (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      Applications (48h)
      \n', +'
      \n', +'Windows (48h)\n', +'Mac (48h)\n', +'UNIX (48h)\n', +'Handheld (48h)
      \n', +'IOS (iPad/iPhone) (48h)\n', +'Android (48h)\n', +'Other OS (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      Games (48h)
      \n', +'
      \n', +'PC (48h)\n', +'Mac (48h)\n', +'PSx (48h)\n', +'XBOX360 (48h)\n', +'Wii (48h)
      \n', +'Handheld (48h)\n', +'IOS (iPad/iPhone) (48h)\n', +'Android (48h)\n', +'Other (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      Porn (48h)
      \n', +'
      \n', +'Movies (48h)\n', +'Movies DVDR (48h)\n', +'Pictures (48h)\n', +'Games (48h)\n', +'HD - Movies (48h)\n', +'Movie clips (48h)\n', +'Other (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      Other (48h)
      \n', +'
      \n', +'E-books (48h)\n', +'Comics (48h)\n', +'Pictures (48h)
      \n', +'Covers (48h)\n', +'Physibles (48h)\n', +'Other (48h)\n', +'
      \n', +'
      \n', +'
      \n', +'
      \n', +'
      \n'); +} +function do_pop_porn() {} +function do_pop() {} +function thepop(adConfig) {} +function print_selector_number(i, curpage, linkto) { + let before, after; + if (i == curpage) { + before = ''; + after = ''; + } else { + before = ''; + after = ''; + } + document.write(before, i+1, after, ' \n'); +} +function print_pageselector(username, curpage, linkto) { + let json_obj = JSON.parse(Get(server + '/q.php?q=pcnt:' + username )); + let elements = json_obj; + let pages = Number(elements)-1; + let before, after, o, i, strt, stp; + + if (pages < 2) return ''; + + if (pages < 30) { + for (i=0; i < pages; i++) { + print_selector_number(i, curpage, linkto); + } + } else { + if (curpage-10 > 5) { + strt=curpage-10; + if (strt > pages-25) strt=pages-25; + + print_selector_number(0, curpage, linkto); + print_selector_number(1, curpage, linkto); + print_selector_number(2, curpage, linkto); + document.write('... '); + } else { + strt=0; + } + if (pages-curpage-10 > 5) { + stp=curpage+11; + if (stp < 27) stp=26; + if (stp > pages) stp=pages; + } else { + if (strt == 0) { + stp=16; + } else { + stp=pages; + } + } + for (i=strt; i < stp; i++) { + print_selector_number(i, curpage, linkto); + + } + if (pages-curpage-10 > 5) { + document.write('... '); + print_selector_number(pages-2, curpage, linkto); + print_selector_number(pages-1, curpage, linkto); + print_selector_number(pages, curpage, linkto); + } + + } + document.write('
      \n'); +} +function filter_list() { + let input, filter, ul, li, a, i, txtValue; + input = document.getElementById('flist'); + filter = input.value.toUpperCase(); + li = document.getElementsByClassName('list-entry'); + + for (i = 0; i < li.length; i++) { + a = li[i].getElementsByTagName('span')[1]; + txtValue = a.textContent || a.innerText; + if (txtValue.toUpperCase().indexOf(filter) > -1) { + li[i].style.display = ''; + } else { + li[i].style.display = 'none'; + } + } +} +function do_interstitial_porn() {} +function do_interstitial() {}