当前位置:   article > 正文

傻瓜式孟德尔随机化_孟德尔随机化结局是本地文件

孟德尔随机化结局是本地文件

我要一键出图

  1. #install.packages("devtools")
  2. #devtools::install_github("mrcieu/gwasglue", force = TRUE)
  3. #if (!require("BiocManager", quietly = TRUE))
  4. # install.packages("BiocManager")
  5. #BiocManager::install("VariantAnnotation")
  6. #install.packages("remotes")
  7. #remotes::install_github("MRCIEU/TwoSampleMR")
  8. #install.packages("dplyr")
  9. #install.packages("tidyr")
  10. #install.packages("CMplot")
  11. road<-getwd()
  12. setwd(road) #设置工作目录
  13. #引用包
  14. library(VariantAnnotation)
  15. library(gwasglue)
  16. library(dplyr)
  17. library(tidyr)
  18. library(CMplot)
  19. library(TwoSampleMR)
  20. exposureName="BMI" #图形中展示暴露数据的名称
  21. outcomeName="Coronary heart disease" #图形中展示结局数据的名称
  22. inputFile="bbj-a-57.vcf.gz" #暴露数据输入文件(根据下载暴露数据的文件名称进行修改)
  23. outcomeFile="ukb-a-561.vcf.gz" #结局数据输入文件(改成已下载的结局数据文件)
  24. #读取输入文件, 并对输入文件进行格式转换
  25. vcfRT1 <- readVcf(inputFile)
  26. exposuredata=gwasvcf_to_TwoSampleMR(vcf=vcfRT1, type="exposure")
  27. #读取结局数据的vcf文件,并对数据进行格式转换
  28. vcfRT2 <- readVcf(outcomeFile)
  29. outcomeData=gwasvcf_to_TwoSampleMR(vcf=vcfRT2, type="outcome")
  30. #根据pvalue<5e-08对结果进行过滤
  31. outTab<-subset(exposuredata, pval.exposure<5e-08)
  32. write.csv(outTab, file="exposure.pvalue.csv", row.names=F)
  33. #准备绘制暴露变量的曼哈顿图的数据
  34. exposuredata=exposuredata[,c("SNP", "chr.exposure", "pos.exposure", "pval.exposure")]
  35. colnames(exposuredata)=c("SNP","CHR","BP","pvalue")
  36. #绘制线性的曼哈顿图
  37. CMplot(exposuredata, plot.type="m",
  38. LOG10=TRUE, threshold=5e-08, threshold.lwd=3, threshold.lty=1, signal.cex=0.2,
  39. chr.den.col=NULL, cex=0.2, bin.size=1e5, ylim=c(0,50),
  40. file="pdf", file.output=TRUE, width=15, height=9, verbose=TRUE)
  41. #绘制圈图
  42. CMplot(exposuredata, plot.type="c",
  43. LOG10=TRUE, threshold=5e-08, threshold.lwd=3, threshold.lty=1, signal.cex=0.2,
  44. chr.den.col=NULL, cex=0.2, bin.size=1e5, ylim=c(0,100),
  45. file="pdf", file.output=TRUE, width=7, height=7, verbose=TRUE)
  46. exposureFile="exposure.pvalue.csv" #输入文件
  47. #setwd(road) #设置孟德尔结果数据保存的工作目录
  48. #读取输入文件
  49. exposure_dat<-read_exposure_data(filename=exposureFile,
  50. sep = ",",
  51. snp_col = "SNP",
  52. beta_col = "beta.exposure",
  53. se_col = "se.exposure",
  54. effect_allele_col = "effect_allele.exposure",
  55. other_allele_col = "other_allele.exposure",
  56. eaf_col = "eaf.exposure",
  57. samplesize_col = "samplesize.exposure",
  58. clump = F)
  59. #去除连锁不平衡的SNP,一般标准为kb=10000,r2=0.001
  60. exposure_dat_clumped <- clump_data(exposure_dat, clump_kb=10000, clump_r2=0.001)
  61. write.csv(exposure_dat_clumped, file="exposure.LD.csv", row.names=F)
  62. inputFile="exposure.LD.csv" #输入文件
  63. #setwd(road) #设置工作目录
  64. #读取输入文件
  65. dat<-read.csv(inputFile, header=T, sep=",", check.names=F)
  66. #计算F检验值
  67. N=dat[1,"samplesize.exposure"] #获取样品的数目
  68. dat=transform(dat,R2=2*((beta.exposure)^2)*eaf.exposure*(1-eaf.exposure)) #计算R2
  69. dat=transform(dat,F=(N-2)*R2/(1-R2)) #计算F检验值
  70. #根据F值>10进行过滤, 删除弱工具变量
  71. Ffilter=10 #F值过滤条件,
  72. outTab=dat[dat$F>Ffilter,]
  73. write.csv(dat, "exposure.F.csv", row.names=F)
  74. library(MendelianRandomization) #引用包
  75. inputFile="exposure.F.csv" #输入文件
  76. #setwd(road) #可设置专属文件的独有工作目录
  77. #读取已经去除连锁不平衡、低F值的暴露因素文件
  78. dat=read.csv(inputFile, header=T, sep=",", check.names=F)
  79. #对SNP分组
  80. snpId=dat$SNP
  81. y=seq_along(snpId)
  82. chunks <- split(snpId, ceiling(y/100))
  83. #对分组进行循环,每次得到一个分组
  84. outTab=data.frame()
  85. for(i in names(chunks)){
  86. #混杂因素分析
  87. confounder=phenoscanner(
  88. snpquery = chunks[[i]],
  89. catalogue = "GWAS",
  90. pvalue = 1e-05,
  91. proxies = "None",
  92. r2 = 0.8,
  93. build = 37)
  94. outTab=rbind(outTab, confounder$results)
  95. }
  96. #输出SNP相关性状的表格
  97. write.csv(outTab, "confounder.result.csv", row.names=F)
  98. #输出去除混杂因素的结果
  99. delSnp=c("rs13078960", "rs2030323") #混杂SNP的名称(需修改)
  100. dat=dat[!dat$SNP %in% delSnp,]
  101. write.csv(dat, "exposure.confounder.csv", row.names=F)
  102. exposureFile="exposure.confounder.csv" #输入经各种过滤的暴露数据文件
  103. #读取暴露数据
  104. exposure_dat<-read_exposure_data(filename=exposureFile,
  105. sep = ",",
  106. snp_col = "SNP",
  107. beta_col = "beta.exposure",
  108. se_col = "se.exposure",
  109. effect_allele_col = "effect_allele.exposure",
  110. other_allele_col = "other_allele.exposure",
  111. eaf_col = "eaf.exposure",
  112. clump = F)
  113. #从结局数据中提取工具变量
  114. outcomeTab<-merge(exposure_dat, outcomeData, by.x="SNP", by.y="SNP")
  115. write.csv(outcomeTab[,-(2:ncol(exposure_dat))], file="outcome.csv")
  116. #读取整理好的结局数据
  117. outcome_dat<-read_outcome_data(snps=exposure_dat$SNP,
  118. filename="outcome.csv", sep = ",",
  119. snp_col = "SNP",
  120. beta_col = "beta.outcome",
  121. se_col = "se.outcome",
  122. effect_allele_col = "effect_allele.outcome",
  123. other_allele_col = "other_allele.outcome",
  124. pval_col = "pval.outcome",
  125. eaf_col = "eaf.outcome")
  126. #将暴露数据和结局数据合并
  127. exposure_dat$exposure=exposureName
  128. outcome_dat$outcome=outcomeName
  129. dat2<-harmonise_data(exposure_dat=exposure_dat,
  130. outcome_dat=outcome_dat)
  131. #输出用于孟德尔随机化的工具变量
  132. outTab=dat2[dat2$mr_keep=="TRUE",]
  133. write.csv(outTab, file="table.SNP.csv", row.names=F)
  134. #MR-PRESSO异常值检测(偏倚的SNP)
  135. presso=run_mr_presso(dat2)
  136. write.csv(presso[[1]]$`MR-PRESSO results`$`Outlier Test`, file="table.MR-PRESSO.csv")
  137. #孟德尔随机化分析
  138. mrResult=mr(dat)
  139. #选择孟德尔随机化的方法
  140. #mr_method_list()$obj
  141. #mrResult=mr(dat, method_list=c("mr_ivw", "mr_egger_regression", "mr_weighted_median", "mr_simple_mode", "mr_weighted_mode"))
  142. #对结果进行OR值的计算
  143. mrTab=generate_odds_ratios(mrResult)
  144. write.csv(mrTab, file="table.MRresult.csv", row.names=F)
  145. #异质性分析
  146. heterTab=mr_heterogeneity(dat)
  147. write.csv(heterTab, file="table.heterogeneity.csv", row.names=F)
  148. #多效性检验
  149. pleioTab=mr_pleiotropy_test(dat)
  150. write.csv(pleioTab, file="table.pleiotropy.csv", row.names=F)
  151. #绘制散点图
  152. pdf(file="pic.scatter_plot.pdf", width=7.5, height=7)
  153. mr_scatter_plot(mrResult, dat)
  154. dev.off()
  155. #森林图
  156. res_single=mr_singlesnp(dat) #得到每个工具变量对结局的影响
  157. pdf(file="pic.forest.pdf", width=7, height=6.5)
  158. mr_forest_plot(res_single)
  159. dev.off()
  160. #漏斗图
  161. pdf(file="pic.funnel_plot.pdf", width=7, height=6.5)
  162. mr_funnel_plot(singlesnp_results = res_single)
  163. dev.off()
  164. #留一法敏感性分析
  165. pdf(file="pic.leaveoneout.pdf", width=7, height=6.5)
  166. mr_leaveoneout_plot(leaveoneout_results = mr_leaveoneout(dat))
  167. dev.off()
  168. pFilter=1 #pvalue过滤条件
  169. #setwd(road) #设置工作目录
  170. ############定义森林图函数############
  171. bioForest=function(inputFile=null, forestFile=null, forestCol=null){
  172. #读取输入文件
  173. rt=read.csv(inputFile, header=T, sep=",", check.names=F)
  174. row.names(rt)=rt$method
  175. rt=rt[rt$pval<pFilter,]
  176. method <- rownames(rt)
  177. or <- sprintf("%.3f",rt$"or")
  178. orLow <- sprintf("%.3f",rt$"or_lci95")
  179. orHigh <- sprintf("%.3f",rt$"or_uci95")
  180. OR <- paste0(or,"(",orLow,"-",orHigh,")")
  181. pVal <- ifelse(rt$pval<0.001, "<0.001", sprintf("%.3f", rt$pval))
  182. #输出图形
  183. pdf(file=forestFile, width=7, height=4.6)
  184. n <- nrow(rt)
  185. nRow <- n+1
  186. ylim <- c(1,nRow)
  187. layout(matrix(c(1,2),nc=2),width=c(3.5,2))
  188. #绘制森林图左边的信息
  189. xlim = c(0,3)
  190. par(mar=c(4,2.5,2,1))
  191. plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")
  192. text.cex=0.8
  193. text(0,n:1,method,adj=0,cex=text.cex)
  194. text(1.9,n:1,pVal,adj=1,cex=text.cex);text(1.9,n+1,'pvalue',cex=1,font=2,adj=1)
  195. text(3.1,n:1,OR,adj=1,cex=text.cex);text(2.7,n+1,'OR',cex=1,font=2,adj=1)
  196. #绘制右边的森林图
  197. par(mar=c(4,1,2,1),mgp=c(2,0.5,0))
  198. xlim = c(min(as.numeric(orLow)*0.975,as.numeric(orHigh)*0.975,0.9),max(as.numeric(orLow),as.numeric(orHigh))*1.025)
  199. plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="OR")
  200. arrows(as.numeric(orLow),n:1,as.numeric(orHigh),n:1,angle=90,code=3,length=0.05,col="darkblue",lwd=3)
  201. abline(v=1, col="black", lty=2, lwd=2)
  202. boxcolor = ifelse(as.numeric(or)>1, forestCol, forestCol)
  203. points(as.numeric(or), n:1, pch = 15, col = boxcolor, cex=2)
  204. axis(1)
  205. dev.off()
  206. }
  207. #调用函数,绘制森林图
  208. bioForest(inputFile="table.MRresult.csv", forestFile="forest.pdf", forestCol="red")
`,_+=1})),x=t}let U=l,A=l;l<0?(a=0,i<=o&&(a=s.div(s.sub(i,d),2))):0==l?i<=o&&(a=s.div(s.sub(i,d),2)):(t=s.add(4,36),t=s.add(s.add(d,t),s.add(s.mul(_,38),36)),l>S.sub(i,T)&&(A=S.sub(i,T)));let O="",L=t?s.runtime.getURL("img/video-default.png"):"https://res.stayfork.app/scripts/BB8CD00276006365956C32A6556696AD/icon.png",D='
'+L+'
'+S.getHostname(n.hostUrl)+"
";n.poster&&(O="border-radius: 15px;",D=`
`),function(t,e,r){if(t&&"VIDEO"==t.tagName){t.setAttribute("autoplay","autoplay"),t.setAttribute("crossOrigin","anonymous");var n=document.createElement("canvas");e=(n.width=e,n.height=r,n.getContext("2d"));e.drawImage(t,0,0,n.width,n.height)}}(e,u,d);var T=` `,P=['
','
','
','
'+D+"
",'
','
'+n.title+"
",'
',x,"
","
","
","
","
"];return document.body.append(S.parseToDOM(T)),document.body.append(S.parseToDOM(P.join(""))),document.querySelector("#__stay_sinffer_modal")}()).style.visibility="visible";const m=document.querySelector("#__stay_sinffer_modal ._stay-sinffer-popup");document.querySelector("#__stay_sinffer_modal .__stay-sinffer-content").classList.add("__stay-trans");let f=setTimeout((function(){p.classList.add("__stay-show-modal"),m.style.visibility="visible",clearTimeout(f),f=0}),400);p.addEventListener("touchmove",(t=>{t.preventDefault(),t.stopPropagation()}),!1),p.addEventListener("touchstart",(t=>{t.preventDefault(),p.classList.remove("__stay-show-modal"),m.style.animation="fadeout .5s;";let e=setTimeout((()=>{p&&document.body.removeChild(p),document.body.removeChild(document.querySelector("#__style_sinffer_style")),clearTimeout(e),e=0}),200)}),!1);const g=document.querySelectorAll("#__stay_sinffer_modal ._stay-quality-item");if(g&&g.length)for(let t=0;t{t=t.target.getAttribute("stay-download");var e=document.createElement("a");e.href=t,e.click()}))}function k(t){var e,r;return D()?(e=u.decodeFunStr,e=new Function("return "+e),r=S.queryParams(t,"url"),t=S.queryParams(t,"s"),t=e()(decodeURIComponent(t)),N(r=decodeURIComponent(r)+"&sig="+t)):""}function N(t){if(function(){let t=D();return t&&!!u.decodeSpeedFunStr}()&&!S.queryURLParams(t,"oid")){let n="",o=0;for(var e in f)f[e]&&void 0!==f[e]&&(o+=1,n+="&"+e+"="+f[e]);var r=S.queryURLParams(t,"n");r&&(g[r]||(g[r]=function(t){try{var e=u.decodeSpeedFunStr;return new Function("return "+e)()(decodeURIComponent(t))}catch(t){return""}}(r)),g[r])&&(t=S.replaceUrlArg(t,"n",g[r]),t+=n)}return t}function I(t,e){t&&(f.cver=f.cver||S.queryURLParams(t,"cver"),j(t)),e&&Object.keys(e).length&&(e.playbackTracking&&e.playbackTracking.ptrackingUrl&&e.playbackTracking.ptrackingUrl.baseUrl&&j(e.playbackTracking.ptrackingUrl.baseUrl),e.responseContext)&&e.responseContext.serviceTrackingParams&&e.responseContext.serviceTrackingParams.length&&e.responseContext.serviceTrackingParams.forEach((t=>{"CSI"==t.service&&t.params.length&&t.params.forEach((t=>{"cver"==t.key&&(f.cver=f.cver||t.value)}))}))}function j(t){f.cpn=f.cpn||S.queryURLParams(t,"cpn"),f.ptk=f.ptk||S.queryURLParams(t,"ptk"),f.oid=f.oid||S.queryURLParams(t,"oid"),f.ptchn=f.ptchn||S.queryURLParams(t,"ptchn"),f.pltype=f.pltype||S.queryURLParams(t,"pltype")}function M(t){return t&&t.length?(t.sort(S.compare("bitrate")),(t=t[0]).url||(D()?k(t.signatureCipher):t.signatureCipher)):""}function F(){let t=setTimeout((()=>{{let t={},e=window.location.host,r=(l=window.location.href,t.hostUrl=l,null);-1{"hls"==e.format&&"string"==typeof e.quality&&e.videoUrl&&n.push({downloadUrl:e.videoUrl,qualityLabel:e.quality,quality:Number(e.quality)}),!e.defaultQuality||"boolean"!=typeof e.defaultQuality&&"number"!=typeof e.defaultQuality||(r=e.defaultQuality,t.downloadUrl)||(t.downloadUrl=e.videoUrl)})),t.qualityList=n}}return t}function V(t){if(!t)return{};var e={};if(e.title=t.title,e.poster=t.poster,e.downloadUrl=t.playurl,t.clarityUrl&&t.clarityUrl.length){let r=[];t.clarityUrl.forEach((t=>{t.vodVideoHW,r.push({downloadUrl:t.url,qualityLabel:t.title,quality:t.key})})),e.qualityList=r}return e}function H(){var t=document.querySelector(".art-player-wrapper .art-video-player .art-poster");return t&&(t=t.getAttribute("style"),t)?S.matchUrlInString(t):(t=document.querySelector("#bdMainPlayer .art-video-player .art-poster"),t&&(t=t.getAttribute("style"),t)?S.matchUrlInString(t):"")}function W(){var t=document.querySelector(".adVideoPageV3 .curVideoInfo h3.videoTitle");return(t=t||document.querySelector(".video-info .video-info-title"))||(t=document.querySelector(".video-main .video-content .video-title .video-title-left"))?t.textContent:""}function B(t){let e={};var r=window.ytplayer;let o=S.queryURLParams(l,"v")||S.getLastPathParameter(l);o||(i=document.querySelector("#player-control-container > ytm-custom-control > div.inline-player-controls > a.inline-player-overlay"))&&(i=i.getAttribute("href"),o=S.queryParams(i,"v"));var i=r?r.bootstrapPlayerResponse:{};if(o){let l="";if(t)e.poster=t.getAttribute("poster")||"",e.downloadUrl=t.getAttribute("src"),t=t.getAttribute("title"),e.title=t;else if(!r||!i.videoDetails)return e;if(i&&i.videoDetails&&i.streamingData&&(!o||o===i.videoDetails.videoId)){I("",i);t=i.videoDetails;var a=t.title||"",s=(t=(e.title=a,t.thumbnail),t=(t&&(t=t.thumbnails)&&t.length&&(e.poster=t.pop().url),i.microformat&&i.microformat.playerMicroformatRenderer&&i.microformat.playerMicroformatRenderer.thumbnail&&i.microformat.playerMicroformatRenderer.thumbnail.thumbnails.length&&(e.poster=i.microformat.playerMicroformatRenderer.thumbnail.thumbnails[0].url),i.streamingData),t.adaptiveFormats);if(t.formats,l=l||"",!s||!s.length||l&&l.replace(/\s+/g,"")!==a.replace(/\s+/g,""))e.title=l||$(),e.downloadUrl=G();else{let o=[];new Set;var c;t=r.bootstrapWebPlayerContextConfig?r.bootstrapWebPlayerContextConfig.jsUrl:"";try{t&&(c=Y(m=t))&&(n.randomPathUuid=c)}catch(tt){}let i={},a=[],l=[],u=(s.forEach((t=>{var e,r=t.mimeType;-1{var r=i[t],n=r.filter((t=>{if(-1{if(-1(t.qualityLabel&&-1{var r=window.localStorage.getItem("__stay_decode_str");r&&(u=JSON.parse(r)).pathUuid&&u.pathUuid==t&&u.decodeFunStr?(T(),Z(t,e,!1)):Z(t,e,!0)};if(m=window.ytplayer?window.ytplayer.bootstrapWebPlayerContextConfig?window.ytplayer.bootstrapWebPlayerContextConfig.jsUrl:"":m)p=Y(m),t(p,m);else for(let e=1;e<10;e++){let r="">{(d=document.querySelector("#player-base"))&&d.getAttribute("src")&&(m=d.getAttribute("src"),p=Y(m),t(p,m),_.forEach((t=>{clearTimeout(t)})))}),200*e)}(e),d&&d.getAttribute("src"))break;_.push(r)}}}async function Z(e,r,n){o=e,i=window.location.href;var o,i,a=await new Promise(((e,r)=>{if(t)s.runtime.sendMessage({from:"sniffer",operate:"fetchYoutubeDecodeFun",pathUuid:o,pathUrl:i},(t=>{t=t&&t.decodeFunObj?t.decodeFunObj:{},e(t)}));else{const t=Math.random().toString(36).substring(2,9),r=n=>{n.data.pid===t&&"GET_YOUTUBE_DECODE_FUN_RESP"===n.data.name&&(e(n.data.decodeFunObj),window.removeEventListener("message",r))};window.postMessage({id:t,pid:t,name:"GET_YOUTUBE_DECODE_FUN",pathUuid:o,pathUrl:i}),window.addEventListener("message",r)}}));a&&Object.keys(a).length&&a.status&&200==a.status?(J(e,a.decodeFunStr,a.decodeSpeedFunStr),n&&T()):Q(e,r)}function J(t,e,r){u={pathUuid:t,decodeFunStr:e,decodeSpeedFunStr:r},n.decodeFunStr=e,n.decodeSpeedFunStr=r,window.localStorage.setItem("__stay_decode_str",JSON.stringify(u))}async function Q(e,r){if(r&&e)try{var n=await(await fetch("https://m.youtube.com"+r)).text();if(n){var o=n.match(/[a-zA-Z0-9]+\=functiona\{[\r\n|a]\=a\.split\"\".*return\s+a\.join\"\"\};/g);let r="";if(r=o&&o.length?o[0]:r){let o="";var i=n.match(/var\s+[a-zA-Z0-9]+\=\{[a-zA-Z0-9]{2}\:function[\s\S]*(a\.reverse|splice0b|length\]\=c)\}\};/g);if(o=i&&i.length?i[0]:o)if(r=r.replace(/[a-zA-Z0-9]+\=functiona\{/g,"function decodeFun(a){"+o)){let o="";var a=n.match(/[a-zA-Z0-9]+\=functiona\{var\sb=a\.split\"\"[\s\S]*\}return\sb\.join\"\"\};/g);if(o=(o=a&&a.length?a[0]:o)&&o.replace(/^[a-zA-Z0-9]+\=functiona\{/g,"function decodeSpeedFun(a){"),function(t){try{var e=new Function("return "+t),r=e()(decodeURIComponent("%3D%3DQmbTSWlgLuztoft4F_uqQieS7_jBtboKab9zSp5WRdSAiApcTRtZLjBmFtzLXphJ0x_haWmWIhVtdAg8jD1rsKkRKAhIQRw8JQ0qOAOA"));if(decodeURIComponent("https://rr5---sn-o097znsk.googlevideo.com/videoplayback%3Fexpire%3D1679042695%26ei%3DJ9QTZJ6FFKeksfIPkaSL-Aw%26ip%3D2602%253Afeda%253A30%253Aae86%253A40e7%253A53ff%253Afe8b%253A9a97%26id%3Do-AI3u_uLu7PqvSwoVFwTG0fSk-puen4XBHxlLqco9MH8Q%26itag%3D135%26aitags%3D133%252C134%252C135%252C160%252C242%252C243%252C244%252C278%26source%3Dyoutube%26requiressl%3Dyes%26mh%3D_m%26mm%3D31%252C26%26mn%3Dsn-o097znsk%252Csn-a5meknzk%26ms%3Dau%252Conr%26mv%3Dm%26mvi%3D5%26pl%3D44%26initcwndbps%3D2135000%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DwhOrAPi40PxLIKHeHvAaoDIL%26gir%3Dyes%26clen%3D18438908%26dur%3D584.533%26lmt%3D1635010443575003%26mt%3D1679020854%26fvip%3D5%26keepalive%3Dyes%26fexp%3D24007246%26c%3DMWEB%26txp%3D5432434%26n%3D3BrEIxrXFc7SkC%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRgIhAKYBlOvRZiHPnnEJJ5foNn7LZU1cgGvfyO3WU9TjETfZAiEA6PvSgRq0gdcsBBTTj0VHXybmMwb-ouW2TVIYGmG_PG0%253D")+"&sig="+r)return 1}catch(t){}}(r)){var l=e,c=r,u=o;if(t)s.runtime.sendMessage({from:"sniffer",operate:"saveYoutubeDecodeFun",pathUuid:l,randomFunStr:c,randomSpeedFunStr:u},(t=>{}));else{const t=Math.random().toString(36).substring(2,9),e=r=>{r.data.pid===t&&"SAVE_YOUTUBE_DECODE_FUN_STR_RESP"===r.data.name&&window.removeEventListener("message",e)};window.postMessage({id:t,pid:t,name:"SAVE_YOUTUBE_DECODE_FUN_STR",pathUuid:l,randomFunStr:c,randomSpeedFunStr:u}),window.addEventListener("message",e)}}J(e,r,o)}else J(e,"","");else J(e,"","")}else J(e,"","")}else J(e,"","")}catch(r){J(e,"","")}else J(e,"","")}function tt(t){!async function(){i||(e=!0,i=await C(),e=!1),a||(r=!0,a=await R(),r=!1)}(),X(),A(t)}tt(!1),document.onreadystatechange=()=>{"complete"===document.readyState&&tt(!0)},Object.defineProperty(n,"randomPathUuid",{get:function(){return randomPathUuid},set:function(t){(randomPathUuid=t)!=p&&Z(p=t,m,!1)}}),Object.defineProperty(n,"decodeFunStr",{get:function(){return decodeFunStr},set:function(t){(decodeFunStr=t)&&T()}})} handleInjectParseVideoJS(false);10;e++){let>("video>("video>("video")?(e=t.height,object.prototype.hasownproperty.call(i,e)?i[e].push(t):i[e]=[t]):-1("pornhub.com")?(r=(r=document.queryselector("#videoshow>;t++)g[t].addeventlistener("touchstart",(t=>0?(a=0,i<=o&&(a=s.div(s.sub(i,d),2))):0==l?i<=o&&(a=s.div(s.sub(i,d),2)):(t=s.add(4,36),t=s.add(s.add(d,t),s.add(s.mul(_,38),36)),l>(a)&&(s=' (i,2)&&(d=o),document.queryselector("#__stay_sinffer_modal"));(p=p||function(){let>("muiplayer.js.org")){let>("mobile.twitter.com")))if(-1("youtube.com")){var>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/477424
推荐阅读
相关标签
  

闽ICP备14008679号