trackkun-dom 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/blocker.json CHANGED
@@ -1 +1 @@
1
- {"css":[".ad-topMobile",".ad",".ads-container",".ads",".adsbygalaksion",".adsbygoogle",".code-block",".display-banner",".radio-ad","#radio_content","#content *[class*=\"bg-ssp-\"]","#adplus-anchor","#fixedban","#noktaplayercontainer","#p_6314647","#psdn-slot","#stickyplayervideoclose","#teaser3","*[class^=\"ad-\"]","*[class^=\"ad_\"]","*[class$=\"-ad\"]","*[class$=\"_ad\"]","*[class*=\"-ad-\"]","*[class*=\"_ad_\"]","*[class^=\"ads-\"]","*[class^=\"ads_\"]","*[class$=\"-ads\"]","*[class$=\"_ads\"]","*[class*=\"-ads-\"]","*[class*=\"_ads_\"]","*[data-adunit]","*[data-google-query-id]","*[id*=\"_ad_\"]","*[id*=\"-ad-\"]","*[id^=\"ad_\"]","*[id^=\"ad-\"]","*[id$=\"_ad\"]","*[id$=\"-ad\"]","*[id*=\"_ads_\"]","*[id*=\"-ads-\"]","*[id^=\"ads_\"]","*[id^=\"ads-\"]","*[id$=\"_ads\"]","*[id$=\"-ads\"]","*[id^=\"dsq-app\"]","*[id^=\"pf-\"]","*[id^=\"publift-\"]","iframe[src*=\"adata\"]","iframe[src*=\"ad.\"]","iframe[src*=\"ads.\"]","iframe[src*=\"/ad\"]","iframe[src*=\"/A=\"]","iframe[src*=\"/click\"]","iframe[src*=\"?click\"]","iframe[src*=\"?banner\"]","iframe[src*=\"=click\"]","iframe[src*=\"clickurl=\"]","iframe[src*=\".atwola.\"]","iframe[src*=\"spinbox.\"]","iframe[src*=\"transfer.go\"]","iframe[src*=\"adfarm\"]","iframe[src*=\"adfarmadSpace\"]","iframe[src*=\"adserver\"]","iframe[src*=\"adjuggler\"]","iframe[src*=\".banner\"]","iframe[src*=\"bluestreak\"]","iframe[src*=\"doubleclick\"]","iframe[src*=\"/rd.\"]","iframe[src*=\"/0AD\"]","iframe[src*=\".falkaq.\"]","iframe[src*=\"connextra.\"]","iframe[src*=\"tracksponsor.\"]","iframe[data-aa]","script[src*=\"doubleclick\"] + div","script[src*=\"romanticwait\"] + div",".empower-ad","*[data-empower-id]","#empowerplayercontainer","*[id^=\"bg-ssp-\"]","a[href*=\"ajker-sangbad.com\"]","a[href*=\"story.alandal.com/psycho-asura\"]",".google-auto-placed","*[data-ad-format]","*[data-adtrack-id]",".rev-src","iframe[src=\"about:blank\"] + div[style]:last-child","a[href*=\"deflink\"]","#Arpian-ads","iframe[id^=\"bg_\"]",".adv","#vi-smartbanner","*[data-ad-slot]","html > iframe","div:has(> [prclck])","[prclck]","a[href*=\"gotrackier\"]",".adblock_title",".adblock_subtitle","div[id]:has(div[id] h4.adblock_title)","script[src*=\"trotolhonor.com\"] + iframe",".custom-html-widget:has(script[src*=\"separatelysmackfibber\"])","#content a[href*=\"kit-food.com\"]","*[pa-slot-container]","*[id^=\"exo_slider\"]",".exo-native-widget-outer-container","iframe[src*=\"a.magsrv.com\"]","#theradios_content","script[src*=\"dummieseardrum\"] + iframe",".ts-im-container",".adxp-sticky","div[id*=\"ScriptRoot\"]"],"hosts":["pubfuture-ad.com","bidgear.com","googlesyndication.com","rtmark.net","e7z9t4x6a0v5mk3zo1a0xj2z7c6g8sa6js5z7s2c3h9x0s5fh3a6sjwb8q7m.xyz","phumsise.com","kismetrosland.life","d3n7ct9nohphbs.cloudfront.net","rlcdn.com","rfihub.com","doubleclick.net","acscdn.com","viglink.com","vntsm.io","ad-delivery.net","radioonlinehd.net","a-ads.com","adskeeper.com","goomaphy.com","compsci88.com","t7cp4fldl.com","vlitag.com","adschill.com","pubfuture.com","infolinks.com","prospectprefer.com","benchsuited.com","busyexit.com","realsrvcdn.com","godpvqnszo.com","prplad.com","33across.com","creativecdn.com","openx.net","cebidsbessel.com","vdo.ai","imasdk.googleapis.com","earthenicings.com","trotolhonor.com","umbretalen.com","guigebichir.website","dummieseardrum.com","hbcdn.net","falcatayamalka.com","admatic.com.tr","ppcnt.pro","gdpr.web0.eu","y8z5nv0slz06vj2k5vh6akv7dj2c8aj62zhj2v7zj8vp0zq7fj2gf4mv6zsb.me","pemsrv.com","magsrv.com","tsyndicate.com","xlviirdr.com","funnelgloveaffable.com"]}
1
+ {"css":[".ad-topMobile",".ad",".ads-container",".ads",".adsbygalaksion",".adsbygoogle",".code-block",".display-banner",".radio-ad","#radio_content","#content *[class*=\"bg-ssp-\"]","#adplus-anchor","#fixedban","#noktaplayercontainer","#p_6314647","#psdn-slot","#stickyplayervideoclose","#teaser3","*[class^=\"ad-\"]","*[class^=\"ad_\"]","*[class$=\"-ad\"]","*[class$=\"_ad\"]","*[class*=\"-ad-\"]","*[class*=\"_ad_\"]","*[class^=\"ads-\"]","*[class^=\"ads_\"]","*[class$=\"-ads\"]","*[class$=\"_ads\"]","*[class*=\"-ads-\"]","*[class*=\"_ads_\"]","*[data-adunit]","*[data-google-query-id]","*[id*=\"_ad_\"]","*[id*=\"-ad-\"]","*[id^=\"ad_\"]","*[id^=\"ad-\"]","*[id$=\"_ad\"]","*[id$=\"-ad\"]","*[id*=\"_ads_\"]","*[id*=\"-ads-\"]","*[id^=\"ads_\"]","*[id^=\"ads-\"]","*[id$=\"_ads\"]","*[id$=\"-ads\"]","*[id^=\"dsq-app\"]","*[id^=\"pf-\"]","*[id^=\"publift-\"]","iframe[src*=\"adata\"]","iframe[src*=\"ad.\"]","iframe[src*=\"ads.\"]","iframe[src*=\"/ad\"]","iframe[src*=\"/A=\"]","iframe[src*=\"/click\"]","iframe[src*=\"?click\"]","iframe[src*=\"?banner\"]","iframe[src*=\"=click\"]","iframe[src*=\"clickurl=\"]","iframe[src*=\".atwola.\"]","iframe[src*=\"spinbox.\"]","iframe[src*=\"transfer.go\"]","iframe[src*=\"adfarm\"]","iframe[src*=\"adfarmadSpace\"]","iframe[src*=\"adserver\"]","iframe[src*=\"adjuggler\"]","iframe[src*=\".banner\"]","iframe[src*=\"bluestreak\"]","iframe[src*=\"doubleclick\"]","iframe[src*=\"/rd.\"]","iframe[src*=\"/0AD\"]","iframe[src*=\".falkaq.\"]","iframe[src*=\"connextra.\"]","iframe[src*=\"tracksponsor.\"]","iframe[data-aa]","script[src*=\"doubleclick\"] + div","script[src*=\"romanticwait\"] + div",".empower-ad","*[data-empower-id]","#empowerplayercontainer","*[id^=\"bg-ssp-\"]","a[href*=\"ajker-sangbad.com\"]","a[href*=\"story.alandal.com/psycho-asura\"]",".google-auto-placed","*[data-ad-format]","*[data-adtrack-id]",".rev-src","iframe[src=\"about:blank\"] + div[style]:last-child","a[href*=\"deflink\"]","#Arpian-ads","iframe[id^=\"bg_\"]",".adv","#vi-smartbanner","*[data-ad-slot]","html > iframe","div:has(> [prclck])","[prclck]","a[href*=\"gotrackier\"]",".adblock_title",".adblock_subtitle","div[id]:has(div[id] h4.adblock_title)","script[src*=\"trotolhonor.com\"] + iframe",".custom-html-widget:has(script[src*=\"separatelysmackfibber\"])","#content a[href*=\"kit-food.com\"]","*[pa-slot-container]","*[id^=\"exo_slider\"]",".exo-native-widget-outer-container","iframe[src*=\"a.magsrv.com\"]","#theradios_content","script[src*=\"dummieseardrum\"] + iframe",".ts-im-container",".adxp-sticky","div[id*=\"ScriptRoot\"]"],"hosts":["pubfuture-ad.com","bidgear.com","googlesyndication.com","rtmark.net","e7z9t4x6a0v5mk3zo1a0xj2z7c6g8sa6js5z7s2c3h9x0s5fh3a6sjwb8q7m.xyz","phumsise.com","chumsaf.com","ad.baovip79.biz","uk88.top","kismetrosland.life","d3n7ct9nohphbs.cloudfront.net","rlcdn.com","rfihub.com","doubleclick.net","acscdn.com","viglink.com","vntsm.io","ad-delivery.net","radioonlinehd.net","a-ads.com","adskeeper.com","goomaphy.com","compsci88.com","t7cp4fldl.com","vlitag.com","adschill.com","pubfuture.com","infolinks.com","prospectprefer.com","benchsuited.com","busyexit.com","realsrvcdn.com","godpvqnszo.com","prplad.com","33across.com","creativecdn.com","openx.net","cebidsbessel.com","vdo.ai","imasdk.googleapis.com","earthenicings.com","trotolhonor.com","umbretalen.com","guigebichir.website","dummieseardrum.com","hbcdn.net","falcatayamalka.com","admatic.com.tr","ppcnt.pro","gdpr.web0.eu","y8z5nv0slz06vj2k5vh6akv7dj2c8aj62zhj2v7zj8vp0zq7fj2gf4mv6zsb.me","pemsrv.com","magsrv.com","tsyndicate.com","xlviirdr.com","funnelgloveaffable.com","wordsnought.com","fictionfittinglad.com"]}
package/index.js CHANGED
@@ -1 +1 @@
1
- (function(I,B){typeof exports=="object"&&typeof module<"u"?B(exports):typeof define=="function"&&define.amd?define(["exports"],B):(I=typeof globalThis<"u"?globalThis:I||self,B(I._trackkun_={}))})(this,function(I){"use strict";function B(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async n=>{const s=await n;!e&&s&&(e=!0,t(s))})).then(()=>{e||t(void 0)})})}function U(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function $(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?U(a)?.pathname:a.startsWith("//")?U(`https:${a}`)?.pathname:a}async function D(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await D(a-1,e,t);n(s)},e)})}async function S(a,e,t=0){const r=e.root??document.documentElement,n=e.timeoutMs??1e4;return D(e.lazy===!0?n/50:0,50,()=>{const s=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!s?.length:!s)?void 0:s})}const Te={text:Me,attr:Pe,"attr-contain":Ie,value:Be,row:Ne};function h(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r,preProcess:n}=e,s=a.split("||").map(g=>g.trim()).filter(g=>!!g&&g.includes("|"));if(s.length>1){for(let g=0;g<s.length;g+=1){const p=h(s[g],e);if(p?.length)return p}return}const[i,o]=a.split("|");if(!o)return;const l=(o?.startsWith("[")&&o.endsWith("]")?o.substring(1,o.length-1).split(","):[o]).map(g=>{const p=g.indexOf(":"),d=p!==-1;return{action:d?g.substring(0,p):g,param:d?g.substring(p+1):""}}),c=i?Array.from(t.querySelectorAll(i)):[t];if(!c.length)return r?[]:void 0;n&&n(c);const u=[];for(const g of c)for(const p of l){const d=Te[p.action],m=d(g,p.param);if(m){if(r){u.push(m);break}return m}}return r?u:void 0}function Me(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>N(e.textContent)).filter(Boolean).join(" ").trim()||N(a.textContent)}function Pe(a,e){return N(a.getAttribute(e))}function Ie(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(n=>n.includes(e));r&&(t=a.getAttribute(r))}return N(t)}function Be(a){return a.value}function Ne(a,e){if(!e)return;const t=N(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return N(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function N(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var _e=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(_e||{}),Le=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(Le||{}),F=(a=>(a.id="id",a.name="name",a.slug="slug",a))(F||{}),V=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(V||{}),je=(a=>(a[a.string=1]="string",a[a.number=2]="number",a[a.bool=3]="bool",a[a.selection=4]="selection",a))(je||{});const Oe=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,Ae=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,ze=/\d+([_-~,.]\d+)?/,ke=/[_-~,]/;function M(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(Oe),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(Ae),n=t.match(ze),s=r?.[6],i=s??n?.[0];if(!i)return;const o=+i.replace(ke,".");if(isNaN(o))return;const l=e?.[4];return{vol:l&&!isNaN(+l)&&a.indexOf(e[0])<a.indexOf(s?r[0]:n[0])?+l:void 0,chap:o}}function P(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),Ee(a)}function Ee(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],n=r.lang??"";r.vol!==void 0?e[n]=r.vol:e[n]!==void 0&&(r.inferVol=e[n])}return a}const We=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ|heure)/,seconds:3600},{regex:/(day|ngày|jour)/,seconds:86400},{regex:/(week|tuần|semaine)/,seconds:604800},{regex:/(month|tháng|mois)/,seconds:2592e3},{regex:/(year|năm|année|annee)/,seconds:31536e3}];function Z(a){const e=a?.toLowerCase();if(!e||e.includes("now"))return Date.now();if(e.includes("yesterday"))return Date.now()-864e5;const t=new Date(e);if(t instanceof Date){const s=t.valueOf();if(!isNaN(s))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),s+432e5):s}const r=We.find(s=>s.regex.test(e));if(!r)return;const n=e.split(" ").filter(Boolean);for(let s=0;s<n.length;s++){const i=n[s],o=i==="a"||i==="an"?1:+i;if(!o)continue;if(o<0)return;const l=Date.now()-o*r.seconds*1e3;return l>0?l:void 0}}function K(a,e=location.origin){if(!a)return;const t=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return t.startsWith(e)?t.replace(e,""):t}function ee(a,e){if(!a)return"/";const t=a.replace("{titleSlug}",e),r=t.endsWith("/")?t:t+"/";return r.startsWith("/")?r:"/"+r}function qe(a,e){const t=[...e],r=[];let n=!1,s=0;const i=Math.min(a.length,100);for(let l=0;l<i;l++){if(s>=10/2){const d=10-r.length;if(d>0){const m=l+d<=a.length?a.slice(l,l+d):t.slice(0,d);r.push(...m)}break}const c=a[l],u=c.id!==void 0,g=t.findIndex(d=>u&&d.id===c.id||d.slug===c.slug),p=g===-1?void 0:t.splice(g,1)[0];!p||p.chapters[0]?.chap!==c.chapters[0]?.chap?(n=!0,r.push({...c,changed:!0})):(s++,r.push(c))}if(!n)return[];if(r.length<=10)return r;const o=[];for(let l=0;l<r.length;l++){const c=r[l];(c.changed||l<10)&&o.push(c)}return o}function Ue(a,e){const t={};return a.forEach(r=>{const n=r.chapters.reduce((s,i)=>{const o=i.lang||e||"";return s[o]||(s[o]=[]),s[o].push(i),s},{});Object.entries(n).forEach(([s,i])=>{const o=`${r.slug}:${s}`;t[o]?(t[o].chapters.push(...i),P(t[o].chapters)):t[o]={...r,lang:s===""?void 0:s,chapters:i}})}),Object.values(t)}var R=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(R||{}),Fe=Object.defineProperty,Ve=(a,e,t)=>e in a?Fe(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,T=(a,e,t)=>(Ve(a,typeof e!="symbol"?e+"":e,t),t);class A{constructor(e){T(this,"spec"),T(this,"siteMeta"),T(this,"tags"),T(this,"context"),T(this,"methodsMap",{[R.title]:()=>this.getRawTitleData(),[R.reader]:()=>this.getRawReaderData(),[R.releases]:()=>this.getRawReleasesData(),[R.search]:()=>this.getRawSearchData(),[R.chapters]:()=>this.getRawChaptersData()}),T(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),n=!r&&Je(this.spec);if(t&&!r&&!n)return;const s=location.origin+location.pathname;return{type:e,is404:n,specId:this.spec.id,siteName:h(this.spec.name),url:s,data:r,spec:this.spec,context:this.context}}resolveReaderSlug(e,t,r){const n=t.endsWith("/")?t.slice(0,-1):t;return n.startsWith(e)?n.replace(e,""):n}resolveTitleSlug(e){if(typeof e!="string")return;const t=this.siteMeta.titleBase.split("/").filter(Boolean).length,r=$(e)?.split("/").filter(Boolean).slice(t);return!r||!r.length?e:r.join("/")}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=Ue(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?qe(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=He(this.tags)),r=e.map(n=>t[H(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}T(A,"specId"),T(A,"siteId");function He(a){const e={};return a.forEach(({id:t,name:r,altNames:n})=>{e[H(r)]=t,n&&n.forEach(s=>{e[H(s)]=t})}),e}function H(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Je(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class v extends A{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await S(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=r.slice(0,100).map(i=>{const o=h(t.url,{root:i}),l=$(o),c=h(t.name,{root:i}),u=h(t.at,{root:i});if(!(!l||!c))return{titleEl:i,id:h(t.id,{root:i}),path:l,name:c,lang:h(t.lang,{root:i})?.toLowerCase(),at:u?Z(u):void 0}}).filter(Boolean);if(!n.length)return;const s=[];return await Promise.all(n.map(async i=>{const{path:o,titleEl:l,lang:c,at:u,...g}=i,p=this.resolveTitleSlug(o);if(!p)return;const d=await this.getChapters(e,{root:l,titleSlug:p})??[];d.length&&s.push({slug:p,chapters:c||u?d.map(m=>({...m,lang:m.lang??c,ts:m.ts??u})):d,...g})})),this.finalizeRawReleasesData({rawReleases:s})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await S(e.sel,{lazy:!!e.lazy}))return;const t=h(e.name);if(!t){await new Promise(l=>setTimeout(l,9e4));return}const r=this.resolveTitleSlug(location.pathname);if(!r)return;let n=h(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(l=>l.trim()).filter(Boolean));const s=h(e.type),i=h(e.langs,{returnAll:!0})?.map(l=>l.toLowerCase()),o=await this.getChapters(e.chapter,{lazy:!0,titleSlug:r})??[];return{id:h(e.id),url:location.origin+location.pathname,slug:r,name:t,langs:i?.length?i:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...s?[s]:[]]),chapters:o,img:e.img?await this.getValidImgSrc(e.img):void 0}}getValidImgSrc(e){return D(33,30,()=>{const t=h(e);return t&&!t.startsWith("data:")?t:void 0})}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await v.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await v.verifyImgsLocator(r)))return;const n=e.reader.title,s=document.querySelector(n.sel);if(!s)return;const i=h(n.name,{root:s}),o=h(n.url,{root:s}),l=this.resolveTitleSlug(o),c=h(n.img,{root:s});if(!i||!o||!l)return;const u=!!this.context?.disableLazyChapters,g=await this.getChapters(e.reader?.chapter,{titleSlug:l,lazy:!u,timeoutMs:12e4})??[],p=h(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!p)return;const{vol:d,chap:m=0}=M(p)||{},w=ee(t.readerBase,l),b=t.readerBase.split("/").indexOf("{lang}"),y=b!==-1?location.pathname.substring(1).split("/")[b]?.toLowerCase():void 0,f=y?w.replace("{lang}",y):w,x=y??h(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0);return this.finalizeRawReaderData({vol:d,chap:m,lang:x,slug:this.resolveReaderSlug(f,location.pathname,location.href),basePath:f,imgsLocator:e.reader.imgs,title:{id:h(n.id),url:o,slug:l,name:i,langs:x?[x]:void 0,img:K(c),chapters:g,hasMoreChapters:!!e.reader?.chapter&&!g.length&&u}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:f}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:f})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===V.blank)return;const t=e===V.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:n}=t,s=r?n.filter(i=>!i.lang||i.lang===r):n;return{chapters:s,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:s.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async n=>{const s=h(e.url,{root:n}),i=$(s),o=h(e.name,{root:n}),l=this.resolveTitleSlug(i);!i||!o||!l||r.push({slug:l,name:o,chapters:await this.getChapters(t,{root:n,titleSlug:l})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:r="",lazy:n=!0,timeoutMs:s}){if(!e)return;const i=[],o=await S(e.sel,{root:t,all:!0,lazy:n,timeoutMs:s});if(!o?.length)return i;const l=(o??[]).map(w=>({id:h(e.id,{root:w}),label:h(e.label,{root:w}),url:h(e.url,{root:w}),at:h(e.at,{root:w})})),c=l.map(({label:w})=>M(w)),u=c[1]?.chap;!c[0]&&(u===void 0||u<=1)&&(c[0]={chap:0});const{readerBase:g}=this.siteMeta,p=ee(g,r),d=g.split("/").indexOf("{lang}"),m=d!==-1;return c.forEach((w,b)=>{if(!w)return;const{id:y,url:f,at:x}=l[b],j=f?.startsWith("http")&&!f.includes(`//${location.hostname}/`),O=j?f:$(f);if(!O)return;const z=!j&&m?O?.substring(1).split("/")[d]?.toLowerCase():void 0,C=j?O:this.resolveReaderSlug(z?p.replace("{lang}",z):p,O,f);i.push({...w,id:y,slug:C,lang:z,ts:Z(x)||i[i.length+1]?.ts||Date.now()})}),P(i)}static async isReaderPage(e){return!!e.sel&&!!await S(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await S(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=h(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=$(r);return n?this.resolveReaderSlug(t,n,r):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const n=e.title?.chapters;if(!n?.length){const c=M(t),u=M(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let s,i,o,l;for(let c=0;c<n.length&&!(s&&(!t||o)&&!r&&l);c++){const u=n[c];!s&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(s=u,i=c):!o&&t===u.slug?o=u:!l&&r===u.slug&&(l=u)}return i!==void 0&&(o??(o=n[i+1]),l??(l=n[i-1])),{...e,inferVol:s?.inferVol,prev:o,next:l}}}var Ge=Object.defineProperty,Xe=(a,e,t)=>e in a?Ge(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ye=(a,e,t)=>(Xe(a,typeof e!="symbol"?e+"":e,t),t);class te extends v{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}}Ye(te,"specId","bato");function Qe(){return Math.random().toString(16).slice(2)}async function Ze({addListener:a,removeListener:e,transform:t,filter:r,handler:n,onTimeout:s,timeout:i,once:o}){return new Promise(l=>{a(g);const c=()=>o===!0&&e(g),u=i?setTimeout(()=>{c(),l(void 0),s?.()},i):void 0;async function g(p,...d){p=t?t(p):p,p!==void 0&&(!r||r(p,...d))&&(c(),l(p),n?.(p,...d),u&&clearTimeout(u))}})}async function Ke(a){return(await Ze({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function et(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:n,args:s}=a,i={reqId:Qe(),event:n,args:s};return(e||window)?.postMessage(i,r??"*"),(await Ke({filter:o=>o?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const _={isAny:!0};function L(a,...e){return et({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}var tt=Object.defineProperty,at=(a,e,t)=>e in a?tt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ae=(a,e,t)=>(at(a,typeof e!="symbol"?e+"":e,t),t);const J=class W extends v{async getRawReleasesData(){let e;try{const r=Array.from({length:2},async(n,s)=>{const i=`${W.apiBase}chapter?accept_erotic_content=true&page=${s+1}&order=new`;return(await fetch(i)).json()});e=(await Promise.all(r)).flat()}catch{return}const t=[];return e.forEach(r=>{const{vol:n,chap:s,hid:i,lang:o,updated_at:l,md_comics:c}=r,u=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:o,ts:new Date(l).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await L(`https://api.${location.host}`,"comic",_,"chapters");if(!t)return e;const r=t.url.split("/").filter(Boolean).slice(-2)[0],n=re(t.value),s=h("h1 ~ div.text-sm span:first-child|row:demographic"),i=s?this.getTagIdsFromNames([s])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((o,l)=>o-l)),{...e,img:e.img??K(h(this.spec.title?.img)),id:r,hasMoreChapters:n?.hasMore??!1,chapters:n?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,lang:e.lang&&e.lang?.length<=6?e.lang:W.getLangFromReaderSlug(e.slug)||e.lang}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let n=t.length-1;n>0;n--){const s=t[n];if(!isNaN(+s))break;r=r?`${s}-${r}`:s}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,n=r?Math.floor(r/1e3)+1:void 0;try{const s=await fetch(`${W.apiBase}comic/${e}/chapters?lang=${t}&limit=1000${n&&n>1?`&page=${n}`:""}`),i=re(await s.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};ae(J,"specId","comick"),ae(J,"apiBase","https://api.comick.cc/");let rt=J;function re(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:n,hid:s,lang:i,updated_at:o}=t,l=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof l!="number"||e.some(c=>c.vol==r&&c.chap===l&&c.lang===i)||e.push({slug:s,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:l,lang:i,ts:new Date(o).valueOf()})}),{chapters:P(e),total:a.total??e.length,hasMore:a.total>a.limit}}function G(a,e){const t=a[0]===e?a.substring(1):a;return t[t.length-1]===e?t.substring(0,t.length-1):t}var nt=Object.defineProperty,st=(a,e,t)=>e in a?nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,it=(a,e,t)=>(st(a,typeof e!="symbol"?e+"":e,t),t);class ne extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:ot(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:X(this.siteMeta,{titleBase:Y(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:X(this.siteMeta,{titleBase:Y($(e.title.url))})}}}it(ne,"specId","madara");function ot(a,e){if(!a)return;const t=a.title,r=document.querySelector(t.sel)??void 0;if(!r)return;const n=$(h(t.url,{root:r}));if(n!==void 0)return X(e,{titleBase:Y(n)})}function X(a,{titleBase:e}){return a.titleBase===e?a:{...a,titleBase:e,readerBase:a.readerBase.replace(a.titleBase,e)}}function Y(a){return G(a,"/").split("/").slice(0,-1).join("/")}var lt=Object.defineProperty,ct=(a,e,t)=>e in a?lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ut=(a,e,t)=>(ct(a,typeof e!="symbol"?e+"":e,t),t);class se extends v{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const n=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:n,slug:`${r.IndexName}-chapter-${n}.html`,ts:new Date(r.Date).valueOf()}]}});return this.finalizeRawReleasesData({rawReleases:t})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!(!t||t.includes("{")))return t}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:ie(await this.getVM(),e.slug),hasMoreChapters:!1}}resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html\/?$/,".html")}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,n=oe(e.CurChapter,r);return this.finalizeRawReaderData({chap:n.chap,slug:n.slug,imgs:gt(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:ie(e,r),hasMoreChapters:!1}})}getVM(){return D(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}ut(se,"specId","manga4life");function ie(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>oe(t,e))}function oe(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:new Date(a.Date).valueOf()}}function gt(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),n=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],s=n!=="0"?`${r}.${n}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${s}-`;return a.Pages.map(o=>{const l=(o+"").padStart(3,"0");return`${i}${l}.${t}`})}catch{return}}var pt=Object.defineProperty,ht=(a,e,t)=>e in a?pt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,dt=(a,e,t)=>(ht(a,typeof e!="symbol"?e+"":e,t),t);class le extends A{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}async getRawReleasesData(){let e=[];try{e=(await(await fetch("https://api.mangadex.org/chapter?limit=96&offset=0&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&order[readableAt]=desc")).json()).data}catch{return}const t=[];return e.forEach(({relationships:r,attributes:n,id:s})=>{const i=r.find(({type:c})=>c==="manga"),o=typeof n.volume=="string"?+n.volume:void 0,l=typeof n.chapter=="string"?+n.chapter:void 0;l&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||s,vol:o,chap:l,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([L(e,_),L(e,_,"feed")]);if(!t||!r)return;const n=r.value.data?.map?.(o=>{const{attributes:l,id:c}=o;if(typeof l!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:g,volume:p,chapter:d,translatedLanguage:m}=l;return{slug:u||c,label:g||void 0,vol:typeof p=="string"?+p:void 0,chap:typeof d=="string"?+d:void 0,lang:m||"en",ts:new Date(l.readableAt).valueOf()}}).filter(o=>o?.chap!=null)??[],{data:s}=t.value;if(!s)return;const i=ue({data:s,getTagIdsFromNames:o=>this.getTagIdsFromNames(o)});if(i)return{...i,chapters:P(n),hasMoreChapters:(r.value.data.total||0)>(r.value.data.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,n]=await Promise.all([L(e,"chapter",_),L(e,"at-home","server",_),L(e,"manga",_,"aggregate")]);if(!t||!r||!n)return;const s=t.value.data,{volume:i,chapter:o,externalUrl:l,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:g,dataSaver:p,hash:d}}=r.value,m=s.relationships?.find?.(C=>C.type==="manga");if(!m)return;const w=ue({data:m,getTagIdsFromNames:C=>this.getTagIdsFromNames(C)});if(!w||typeof n.value.volumes!="object")return;const b=ce(n.value)??[];(typeof o!="string"||o==="none")&&!b.length&&b.push({chap:0,slug:s.id});const y=b.findIndex(C=>C.slug===s.id),f=s.relationships?.find?.(C=>C.type==="scanlation_group"),x=u.endsWith("/")?u:u+"/",j=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),O=`${x}${j?"data-saver":"data"}/`,z=((j?p:g)??[]).map?.(C=>`${O}${d}/${C}`)??[];return{externalUrl:l,vol:typeof i=="string"?+i:void 0,inferVol:b[y]?.inferVol,chap:+o||0,imgs:z,lang:c,slug:s.id,prev:b[y+1],next:b[y-1],basePath:"/chapter/",groupName:f?.attributes?.name,groupUrl:f?.attributes?.website,isWebtoon:m?.attributes?.tags?.some(C=>C.attributes.name.en==="Long Strip"),title:{...w,chapters:b}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=ce(await n.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}dt(le,"specId","mangadex");function ce(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:s,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:s})}).flat().filter(Boolean).reverse();return P(e)}function ue({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:n}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:i,altTitles:o,tags:l,contentRating:c}=r;if(typeof s!="object"||i&&!Array.isArray(i))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const g=ft(),p=(i??[])?.map?.(f=>typeof f=="string"?f:void 0).filter(Boolean)??[],d=p.filter(f=>f&&(!g||g.includes(f))),m=o?.map?.(f=>{const[[,x]=[]]=Object.entries(f);return x}),w=n?.find?.(f=>f.type==="cover_art")?.attributes?.fileName,b=w?`https://mangadex.org/covers/${t}/${w}`:void 0,y=(l||[]).map(f=>f?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:m,langs:d.length>0?d:p.length>0?p:["en"],img:b,tags:e(y)}}function ft(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var mt=Object.defineProperty,wt=(a,e,t)=>e in a?mt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,vt=(a,e,t)=>(wt(a,typeof e!="symbol"?e+"":e,t),t);class ge extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await S(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await S(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await S(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}vt(ge,"specId","mangafire");var yt=Object.defineProperty,bt=(a,e,t)=>e in a?yt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Rt=(a,e,t)=>(bt(a,typeof e!="symbol"?e+"":e,t),t);class pe extends v{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}resolveReaderSlug(e,t){const r=super.resolveReaderSlug(e,t),n=r.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):r}async getImgs(){const e=await D(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,n).toString(t.enc.Utf8).split(",")}}Rt(pe,"specId","mangago");var $t=Object.defineProperty,Ct=(a,e,t)=>e in a?$t(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,St=(a,e,t)=>(Ct(a,typeof e!="symbol"?e+"":e,t),t);class he extends A{async getRawReleasesData(){throw new Error("Unimplemented")}async getRawTitleData(){const e=await this.getPageData();if(!e)return;const t=await this.getPrefLangs()??["en"],r=e.chart_count_lang_to_serials?.find(s=>t?.includes(s?.field))?.count,n=await this.getTitleChapters();return{...this.transformRawTitleData(e),chapters:n,hasMoreChapters:r&&r>n.length}}async getRawReaderData(){const e=await this.getPageData(),t=e?.comicNode?.data,r=e?.imageSet;if(!e||!t||!r)return;const{httpLis:n,wordLis:s}=r,i=this.transformRawTitleData(t);return{slug:location.pathname.split("/").filter(Boolean)[2],lang:e.lang,vol:e.volume??void 0,chap:e.serial,imgs:n.map((o,l)=>`${o}?${s[l]}`),title:{...i,chapters:[],hasMoreChapters:!1},...await this.getReaderPrevNext(),basePath:`/title/${i.slug}/`}}async getRawChaptersData(){if(!this.context)return;const{lang:e,titleSlug:t,skip:r}=this.context;if(!e||!t)return;const n=await this.getPrefLangs()??["en"];let s;try{s=await fetch("https://mangapark.net/apo/",{method:"POST",body:JSON.stringify({query:"query get_content_comic_chapters($comicId: Int!, $isPref: Boolean) { get_content_comic_chapters(comicId: $comicId, isPref: $isPref) {serial chapters{lang cids}}}",variables:{comicId:+t,isPref:n.includes(e)},operationName:"get_content_comic_chapters"}),headers:{"Content-Type":"application/json"}})}catch{return}const i=[],o=(await s.json()).data.get_content_comic_chapters.reverse();return(r?o.slice(r):o).forEach(l=>{const c=l.chapters.find(p=>p.lang===e);if(!c)return;const u=c.cids?.[0];if(!c||!u)return;const g=l.serial;i.push({slug:`${u}-${e}-ch.${g}`,chap:g,ts:l.datePublic})}),{chapters:i,lang:e,asc:!1,hasMore:!1,total:i.length}}transformRawTitleData(e){return{url:e.urlPath,slug:e.id+"",name:e.name,langs:e.chart_count_lang_to_serials?.map?.(t=>t?.field?.toLowerCase()).filter(Boolean),img:e.urlCover300??e.urlCover600??e.urlCoverOri,tags:this.getTagIdsFromNames(e.genres)}}async getReaderPrevNext(){let e,t;return await D(20,100,async()=>{const r=await S("main a.btn",{lazy:!0,all:!0});if(r?.length)return e=r.find(n=>n.textContent?.toLowerCase().includes("prev")),t=r.find(n=>n.textContent?.toLowerCase().includes("next")),e||t?!0:void 0}),{prev:this.getChapterFromBtn(e),next:this.getChapterFromBtn(t)}}getChapterFromBtn(e){const t=e?.getAttribute("href");if(!t)return;const r=t.split("/").filter(Boolean).slice(-1)[0];if(!r)return;const n=M(r.split("-").slice(2).join("-"));if(n)return{slug:r,lang:r.split("-")[1]||void 0,...n}}async getTitleChapters(){const e=[],t=await S(".file-list-by-serial time[time]",{lazy:!0,all:!0});if(!t?.length)return e;let r;return t.forEach(n=>{const s=n.parentElement;for(let i=0;i<5;i++){const o=s?.parentElement?.querySelector('a[href*="/title/"]');if(!o)continue;const l=o.getAttribute("href")?.split("/").filter(Boolean)[2],c=o.textContent?.replace(/(\n|\t)/g," ").trim(),u=M(c);if(!u||!l||r&&r.chap==u.chap&&(r.vol??0)==(u.vol??0))break;const g=+n.getAttribute("time");r={...u,slug:l,lang:l.split("-")[1]||void 0,ts:g===g&&typeof g=="number"?g:void 0},e.push(r);break}}),P(e)}getPageData(){return D(100,50,()=>window.__NEXT_DATA__?.props?.pageProps?.dehydratedState?.queries?.[0]?.state?.data?.data)}getPrefLangs(){return D(40,50,()=>{const e=window.__NEXT_DATA__?.props?.pageProps;if(!e)return;const t=e?.extra?.sets?.general_prefLangs?.filter(Boolean);return t?.length?t:["en"]})}}St(he,"specId","mangapark");var Dt=Object.defineProperty,xt=(a,e,t)=>e in a?Dt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Tt=(a,e,t)=>(xt(a,typeof e!="symbol"?e+"":e,t),t);class de extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.slug.substring(t.slug.lastIndexOf("-")+1)||void 0}))}}}Tt(de,"specId","mangareader");var Mt=Object.defineProperty,Pt=(a,e,t)=>e in a?Mt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,It=(a,e,t)=>(Pt(a,typeof e!="symbol"?e+"":e,t),t);class fe extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:Bt(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:E(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:E($(e.title.url))}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),n=h(t.url,{root:r});return{...e,siteMeta:k(this.siteMeta,{titleBase:E($(n))})}}async getReaderTitleId(){const e=await window.HISTORY?.getStored?.();if(!e||typeof e!="object")return;const t=Object.values(e).filter(Boolean);if(t.length)return t.sort((r,n)=>n.time-r.time),t[0].manga_ID}}It(fe,"specId","mangastream");function Bt(a,e){if(!a)return;const t={...e,releases:G(location.pathname,"/")},r=a.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=$(h(r.url,{root:n}));if(s===void 0)return;const i=n.querySelector(r.chapter.sel)??void 0;if(!(!i||$(h(r.chapter.url,{root:i}))===void 0))return t.titleBase=E(s),e.titleIdType===F.id&&(h(r.id,{root:n})||(e.titleIdType=F.name)),k(e,t)}function k(a,e){const t=Object.keys(e),r={...a};let n=!1;return t.forEach(s=>{const i=e[s];i!==a[s]&&(r[s]=i,n=!0)}),n?r:void 0}function E(a){return G(a,"/").split("/").slice(0,-1).join("/")}var Nt=Object.defineProperty,_t=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Lt=(a,e,t)=>(_t(a,typeof e!="symbol"?e+"":e,t),t);class me extends v{async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,hasMoreChapters:e.chapters.length===50}}}Lt(me,"specId","mgeko");var jt=Object.defineProperty,Ot=(a,e,t)=>e in a?jt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,At=(a,e,t)=>(Ot(a,typeof e!="symbol"?e+"":e,t),t);const we=class q extends v{async getRawReaderData(){const e=await super.getRawReaderData();return e?.title.chapters?.length?{...e,prev:e.prev?q.finalizeChapter(e.prev):void 0,next:e.next?q.finalizeChapter(e.next):void 0,title:{...e.title,chapters:e.title.chapters.map(q.finalizeChapter)}}:e}static finalizeChapter(e){return{...e,slug:`chapter-${e.slug}`}}};At(we,"specId","nato");let zt=we;var kt=Object.defineProperty,Et=(a,e,t)=>e in a?kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Wt=(a,e,t)=>(Et(a,typeof e!="symbol"?e+"":e,t),t);class ve extends v{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const n=this.spec.reader.title;n.id&&await S(n.id.split("|")[0],{lazy:!0}),t=h(n.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await qt(t),hasMoreChapters:r}}}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const r=t.lastIndexOf("-"),n=+t.substring(r+1);return r===-1||isNaN(n)||n<1e3?t:t.substring(0,r)}}Wt(ve,"specId","nettruyen");async function qt(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?P(e.chapters.map(t=>{const{name:r,url:n}=t,s=M(r);if(!(!s||!n))return{slug:$(n).split("/").filter(Boolean).slice(2).join("/"),...s}})):[]}var Ut=Object.defineProperty,Ft=(a,e,t)=>e in a?Ut(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Vt=(a,e,t)=>(Ft(a,typeof e!="symbol"?e+"":e,t),t);class ye extends v{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!Q()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e;const t=this.context?.findContinue;if(t){const l=await this.findContinueChapters({rawTitleData:e,chapter:t});return l?{chapters:l,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:n,...s}=e,i=n.length,o=r&&r>=i?Math.floor(r/i)+1:void 0;return o?{chapters:await this.getChaptersByPage({page:o,titleSlug:e.slug})??[],title:{...s,chapters:[]},hasMore:!!Q(o),asc:!1,skip:r}:{chapters:n,title:{...s,chapters:[]},hasMore:!!Q()}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:n={},...s}){const i=n[r]??e.chapters,o=i[i.length-1].chap<=t,l=s.maxPage??Ht();if(o){if(i[0].chap>t){const y=[...i].reverse().find(f=>f.chap>t);return y?[y]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===l)return i.slice(-1);const c=e.chapters.length,u=Object.keys(n).map(y=>+y).sort((y,f)=>y-f),g=o?-1:1,p=u[u.indexOf(r)+g];if(p===r+g)return o?n[p].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(n[p].slice(0,1));const d=o?t-i[0].chap:i[0].chap-t,m=Math.floor(d/c)+1,w=o?Math.max(m,(p??1)+1):Math.min(m,(p??l+1)-1,l),b=await this.getChaptersByPage({page:w,titleSlug:e.slug});if(b)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:w,maxPage:l,cacheChaptersByPage:{...n,1:e.chapters,[w]:b}})}async getChaptersByPage({page:e,titleSlug:t}){const r=be(e);if(!r)return;const n=this.spec.title.chapter,s=n.sel,i=document.querySelector(s),o=D(100,30,()=>{const l=document.querySelector(s);if(l&&i!==l)return!0;r.click()});return r.click(),await o,await this.getChapters(n,{lazy:!1,titleSlug:t})}}Vt(ye,"specId","reaper");function Q(a=1){return be(a+1)}function be(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Ht(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var Jt=Object.defineProperty,Gt=(a,e,t)=>e in a?Jt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Xt=(a,e,t)=>(Gt(a,typeof e!="symbol"?e+"":e,t),t);class Re extends v{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=h(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return $e({...e,tags:this.getTagIdsFromNames(t)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return;const t=`${location.origin}/series/${e.title.slug}/info`;return{...e,title:{...$e({...e.title,url:t,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,n=t?Math.floor(t/1e3)+1:1;try{const s=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return Yt(await s.json())}catch{return}}resolveTitleSlug(e){if(!e)return;const t=e.split("/").filter(Boolean);return t[1]??t[0]}}Xt(Re,"specId","tapas");function $e(a,e){const t=Qt(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function Yt(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function Qt(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var Zt=Object.defineProperty,Kt=(a,e,t)=>e in a?Zt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ea=(a,e,t)=>(Kt(a,typeof e!="symbol"?e+"":e,t),t);class Ce extends v{async getRawTitleData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(t||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.pathname.split("/")[1];return{...n,id:r,langs:[s].filter(Boolean),chapters:n.chapters.map(i=>({...i,lang:s})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const n=+t;if(n!==n)return;const s=document.title.split("|")[1]?.trim();if(!s)return;const i=location.pathname.split("/"),o=`${i.slice(0,4).join("/")}/list?title_no=${r}`,l=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1}),c=i[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${n}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:o,slug:o,name:s,langs:[c],chapters:(l??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=h("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await D(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:t})=>t).filter(Boolean))}resolveReaderSlug(e,t,r){if(!r)return t;if(r.startsWith("http://")||r.startsWith("https://")){const n=U(r);return n.pathname+n.search}return r}}ea(Ce,"specId","webtoon");const ta=[te,rt,se,le,fe,ne,zt,ve,ye,Re,pe,ge,he,me,Ce,de];function Se(a){const e=ta.find(t=>t.specId===a.spec.id)??v;return new e(a)}async function aa(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:De(t,e.generic);if(!r.length)return;const n=Se({...a,spec:e,siteMeta:t});return await B(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await B((a.genericSpecs??[]).map(t=>{const r=De(t.meta,t.generic);if(!r.length)return[];const n=Se({...a,spec:t,siteMeta:t.meta});return r.map(s=>n.getRawPageByType(s,!0))}).flat())}function De(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=xe(n,r),i=xe(n,t);if(s!==i)return s>i?[R.reader]:[R.title];if(s>0)return[R.reader,R.title];if(n.length===1){const o=[!r&&R.reader,!t&&R.title].filter(Boolean);if(o.length)return o}return!r&&!t||e?[R.reader,R.title]:[]}function xe(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}"),n=a.length-t.length;return r&&n!==0||!r&&n<1?0:t.filter((s,i)=>a[i]===s||s==="{titleSlug}"||s==="{lang}"||s==="{slug}").length}I.PageType=R,I.scrape=aa});
1
+ (function(I,B){typeof exports=="object"&&typeof module<"u"?B(exports):typeof define=="function"&&define.amd?define(["exports"],B):(I=typeof globalThis<"u"?globalThis:I||self,B(I._trackkun_={}))})(this,function(I){"use strict";function B(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async n=>{const s=await n;!e&&s&&(e=!0,t(s))})).then(()=>{e||t(void 0)})})}function q(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function $(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?q(a)?.pathname:a.startsWith("//")?q(`https:${a}`)?.pathname:a}async function D(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await D(a-1,e,t);n(s)},e)})}async function S(a,e,t=0){const r=e.root??document.documentElement,n=e.timeoutMs??1e4;return D(e.lazy===!0?n/50:0,50,()=>{const s=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!s?.length:!s)?void 0:s})}const xe={text:Te,attr:Me,"attr-contain":Pe,value:Ie,row:Be};function h(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r,preProcess:n}=e,s=a.split("||").map(g=>g.trim()).filter(g=>!!g&&g.includes("|"));if(s.length>1){for(let g=0;g<s.length;g+=1){const p=h(s[g],e);if(p?.length)return p}return}const[i,o]=a.split("|");if(!o)return;const l=(o?.startsWith("[")&&o.endsWith("]")?o.substring(1,o.length-1).split(","):[o]).map(g=>{const p=g.indexOf(":"),d=p!==-1;return{action:d?g.substring(0,p):g,param:d?g.substring(p+1):""}}),c=i?Array.from(t.querySelectorAll(i)):[t];if(!c.length)return r?[]:void 0;n&&n(c);const u=[];for(const g of c)for(const p of l){const d=xe[p.action],m=d(g,p.param);if(m){if(r){u.push(m);break}return m}}return r?u:void 0}function Te(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>N(e.textContent)).filter(Boolean).join(" ").trim()||N(a.textContent)}function Me(a,e){return N(a.getAttribute(e))}function Pe(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(n=>n.includes(e));r&&(t=a.getAttribute(r))}return N(t)}function Ie(a){return a.value}function Be(a,e){if(!e)return;const t=N(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return N(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function N(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var Ne=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(Ne||{}),_e=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(_e||{}),U=(a=>(a.id="id",a.name="name",a.slug="slug",a))(U||{}),F=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(F||{});const Le=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,je=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Oe=/\d+([_-~,.]\d+)?/,Ae=/[_-~,]/;function M(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(Le),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(je),n=t.match(Oe),s=r?.[6],i=s??n?.[0];if(!i)return;const o=+i.replace(Ae,".");if(isNaN(o))return;const l=e?.[4];return{vol:l&&!isNaN(+l)&&a.indexOf(e[0])<a.indexOf(s?r[0]:n[0])?+l:void 0,chap:o}}function P(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),ze(a)}function ze(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],n=r.lang??"";r.vol!==void 0?e[n]=r.vol:e[n]!==void 0&&(r.inferVol=e[n])}return a}const ke=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ|heure)/,seconds:3600},{regex:/(day|ngày|jour)/,seconds:86400},{regex:/(week|tuần|semaine)/,seconds:604800},{regex:/(month|tháng|mois)/,seconds:2592e3},{regex:/(year|năm|année|annee)/,seconds:31536e3}];function Y(a){const e=a?.toLowerCase();if(!e||e.includes("now"))return Date.now();if(e.includes("yesterday"))return Date.now()-864e5;const t=new Date(e);if(t instanceof Date){const s=t.valueOf();if(!isNaN(s))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),s+432e5):s}const r=ke.find(s=>s.regex.test(e));if(!r)return;const n=e.split(" ").filter(Boolean);for(let s=0;s<n.length;s++){const i=n[s],o=i==="a"||i==="an"?1:+i;if(!o)continue;if(o<0)return;const l=Date.now()-o*r.seconds*1e3;return l>0?l:void 0}}function Q(a,e=location.origin){if(!a)return;const t=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return t.startsWith(e)?t.replace(e,""):t}function Z(a,e){if(!a)return"/";const t=a.replace("{titleSlug}",e),r=t.endsWith("/")?t:t+"/";return r.startsWith("/")?r:"/"+r}function Ee(a,e){const t=[...e],r=[];let n=!1,s=0;const i=Math.min(a.length,100);for(let l=0;l<i;l++){if(s>=10/2){const d=10-r.length;if(d>0){const m=l+d<=a.length?a.slice(l,l+d):t.slice(0,d);r.push(...m)}break}const c=a[l],u=c.id!==void 0,g=t.findIndex(d=>u&&d.id===c.id||d.slug===c.slug),p=g===-1?void 0:t.splice(g,1)[0];!p||p.chapters[0]?.chap!==c.chapters[0]?.chap?(n=!0,r.push({...c,changed:!0})):(s++,r.push(c))}if(!n)return[];if(r.length<=10)return r;const o=[];for(let l=0;l<r.length;l++){const c=r[l];(c.changed||l<10)&&o.push(c)}return o}function We(a,e){const t={};return a.forEach(r=>{const n=r.chapters.reduce((s,i)=>{const o=i.lang||e||"";return s[o]||(s[o]=[]),s[o].push(i),s},{});Object.entries(n).forEach(([s,i])=>{const o=`${r.slug}:${s}`;t[o]?(t[o].chapters.push(...i),P(t[o].chapters)):t[o]={...r,lang:s===""?void 0:s,chapters:i}})}),Object.values(t)}var R=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(R||{}),qe=Object.defineProperty,Ue=(a,e,t)=>e in a?qe(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,T=(a,e,t)=>(Ue(a,typeof e!="symbol"?e+"":e,t),t);class A{constructor(e){T(this,"spec"),T(this,"siteMeta"),T(this,"tags"),T(this,"context"),T(this,"methodsMap",{[R.title]:()=>this.getRawTitleData(),[R.reader]:()=>this.getRawReaderData(),[R.releases]:()=>this.getRawReleasesData(),[R.search]:()=>this.getRawSearchData(),[R.chapters]:()=>this.getRawChaptersData()}),T(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),n=!r&&Ve(this.spec);if(t&&!r&&!n)return;const s=location.origin+location.pathname;return{type:e,is404:n,specId:this.spec.id,siteName:h(this.spec.name),url:s,data:r,spec:this.spec,context:this.context}}resolveReaderSlug(e,t,r){const n=t.endsWith("/")?t.slice(0,-1):t;return n.startsWith(e)?n.replace(e,""):n}resolveTitleSlug(e){if(typeof e!="string")return;const t=this.siteMeta.titleBase.split("/").filter(Boolean).length,r=$(e)?.split("/").filter(Boolean).slice(t);return!r||!r.length?e:r.join("/")}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=We(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?Ee(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=Fe(this.tags)),r=e.map(n=>t[V(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}T(A,"specId"),T(A,"siteId");function Fe(a){const e={};return a.forEach(({id:t,name:r,altNames:n})=>{e[V(r)]=t,n&&n.forEach(s=>{e[V(s)]=t})}),e}function V(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Ve(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class v extends A{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await S(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=r.slice(0,100).map(i=>{const o=h(t.url,{root:i}),l=$(o),c=h(t.name,{root:i}),u=h(t.at,{root:i});if(!(!l||!c))return{titleEl:i,id:h(t.id,{root:i}),path:l,name:c,lang:h(t.lang,{root:i})?.toLowerCase(),at:u?Y(u):void 0}}).filter(Boolean);if(!n.length)return;const s=[];return await Promise.all(n.map(async i=>{const{path:o,titleEl:l,lang:c,at:u,...g}=i,p=this.resolveTitleSlug(o);if(!p)return;const d=await this.getChapters(e,{root:l,titleSlug:p})??[];d.length&&s.push({slug:p,chapters:c||u?d.map(m=>({...m,lang:m.lang??c,ts:m.ts??u})):d,...g})})),this.finalizeRawReleasesData({rawReleases:s})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await S(e.sel,{lazy:!!e.lazy}))return;const t=h(e.name);if(!t){await new Promise(l=>setTimeout(l,9e4));return}const r=this.resolveTitleSlug(location.pathname);if(!r)return;let n=h(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(l=>l.trim()).filter(Boolean));const s=h(e.type),i=h(e.langs,{returnAll:!0})?.map(l=>l.toLowerCase()),o=await this.getChapters(e.chapter,{lazy:!0,titleSlug:r})??[];return{id:h(e.id),url:location.origin+location.pathname,slug:r,name:t,langs:i?.length?i:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...s?[s]:[]]),chapters:o,img:e.img?await this.getValidImgSrc(e.img):void 0}}getValidImgSrc(e){return D(33,30,()=>{const t=h(e);return t&&!t.startsWith("data:")?t:void 0})}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await v.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await v.verifyImgsLocator(r)))return;const n=e.reader.title,s=document.querySelector(n.sel);if(!s)return;const i=h(n.name,{root:s}),o=h(n.url,{root:s}),l=this.resolveTitleSlug(o),c=h(n.img,{root:s});if(!i||!o||!l)return;const u=!!this.context?.disableLazyChapters,g=await this.getChapters(e.reader?.chapter,{titleSlug:l,lazy:!u,timeoutMs:12e4})??[],p=h(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!p)return;const{vol:d,chap:m=0}=M(p)||{},w=Z(t.readerBase,l),b=t.readerBase.split("/").indexOf("{lang}"),y=b!==-1?location.pathname.substring(1).split("/")[b]?.toLowerCase():void 0,f=y?w.replace("{lang}",y):w,x=y??h(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0);return this.finalizeRawReaderData({vol:d,chap:m,lang:x,slug:this.resolveReaderSlug(f,location.pathname,location.href),basePath:f,imgsLocator:e.reader.imgs,title:{id:h(n.id),url:o,slug:l,name:i,langs:x?[x]:void 0,img:Q(c),chapters:g,hasMoreChapters:!!e.reader?.chapter&&!g.length&&u}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:f}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:f})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===F.blank)return;const t=e===F.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:n}=t,s=r?n.filter(i=>!i.lang||i.lang===r):n;return{chapters:s,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:s.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async n=>{const s=h(e.url,{root:n}),i=$(s),o=h(e.name,{root:n}),l=this.resolveTitleSlug(i);!i||!o||!l||r.push({slug:l,name:o,chapters:await this.getChapters(t,{root:n,titleSlug:l})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:r="",lazy:n=!0,timeoutMs:s}){if(!e)return;const i=[],o=await S(e.sel,{root:t,all:!0,lazy:n,timeoutMs:s});if(!o?.length)return i;const l=(o??[]).map(w=>({id:h(e.id,{root:w}),label:h(e.label,{root:w}),url:h(e.url,{root:w}),at:h(e.at,{root:w})})),c=l.map(({label:w})=>M(w)),u=c[1]?.chap;!c[0]&&(u===void 0||u<=1)&&(c[0]={chap:0});const{readerBase:g}=this.siteMeta,p=Z(g,r),d=g.split("/").indexOf("{lang}"),m=d!==-1;return c.forEach((w,b)=>{if(!w)return;const{id:y,url:f,at:x}=l[b],j=f?.startsWith("http")&&!f.includes(`//${location.hostname}/`),O=j?f:$(f);if(!O)return;const z=!j&&m?O?.substring(1).split("/")[d]?.toLowerCase():void 0,C=j?O:this.resolveReaderSlug(z?p.replace("{lang}",z):p,O,f);i.push({...w,id:y,slug:C,lang:z,ts:Y(x)||i[i.length+1]?.ts||Date.now()})}),P(i)}static async isReaderPage(e){return!!e.sel&&!!await S(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await S(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=h(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=$(r);return n?this.resolveReaderSlug(t,n,r):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const n=e.title?.chapters;if(!n?.length){const c=M(t),u=M(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let s,i,o,l;for(let c=0;c<n.length&&!(s&&(!t||o)&&!r&&l);c++){const u=n[c];!s&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(s=u,i=c):!o&&t===u.slug?o=u:!l&&r===u.slug&&(l=u)}return i!==void 0&&(o??(o=n[i+1]),l??(l=n[i-1])),{...e,inferVol:s?.inferVol,prev:o,next:l}}}var He=Object.defineProperty,Je=(a,e,t)=>e in a?He(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ge=(a,e,t)=>(Je(a,typeof e!="symbol"?e+"":e,t),t);class K extends v{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}}Ge(K,"specId","bato");function Xe(){return Math.random().toString(16).slice(2)}async function Ye({addListener:a,removeListener:e,transform:t,filter:r,handler:n,onTimeout:s,timeout:i,once:o}){return new Promise(l=>{a(g);const c=()=>o===!0&&e(g),u=i?setTimeout(()=>{c(),l(void 0),s?.()},i):void 0;async function g(p,...d){p=t?t(p):p,p!==void 0&&(!r||r(p,...d))&&(c(),l(p),n?.(p,...d),u&&clearTimeout(u))}})}async function Qe(a){return(await Ye({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function Ze(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:n,args:s}=a,i={reqId:Xe(),event:n,args:s};return(e||window)?.postMessage(i,r??"*"),(await Qe({filter:o=>o?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const _={isAny:!0};function L(a,...e){return Ze({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}var Ke=Object.defineProperty,et=(a,e,t)=>e in a?Ke(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,tt=(a,e,t)=>(et(a,typeof e!="symbol"?e+"":e,t),t);const ee=class De extends v{async getRawReleasesData(){let e;try{const r=Array.from({length:2},async(n,s)=>{const i=`https://api.${location.host}/chapter?accept_erotic_content=true&page=${s+1}&order=new`;return(await fetch(i)).json()});e=(await Promise.all(r)).flat()}catch{return}const t=[];return e.forEach(r=>{const{vol:n,chap:s,hid:i,lang:o,updated_at:l,md_comics:c}=r,u=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:o,ts:new Date(l).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await L(`https://api.${location.host}`,"comic",_,"chapters");if(!t)return e;const r=t.url.split("/").filter(Boolean).slice(-2)[0],n=te(t.value),s=h("h1 ~ div.text-sm span:first-child|row:demographic"),i=s?this.getTagIdsFromNames([s])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((o,l)=>o-l)),{...e,img:e.img??Q(h(this.spec.title?.img)),id:r,hasMoreChapters:n?.hasMore??!1,chapters:n?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,lang:e.lang&&e.lang?.length<=6?e.lang:De.getLangFromReaderSlug(e.slug)||e.lang}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let n=t.length-1;n>0;n--){const s=t[n];if(!isNaN(+s))break;r=r?`${s}-${r}`:s}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,n=r?Math.floor(r/1e3)+1:void 0;try{const s=await fetch(`https://api.${location.host}/comic/${e}/chapters?lang=${t}&limit=1000${n&&n>1?`&page=${n}`:""}`),i=te(await s.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};tt(ee,"specId","comick");let at=ee;function te(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:n,hid:s,lang:i,updated_at:o}=t,l=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof l!="number"||e.some(c=>c.vol==r&&c.chap===l&&c.lang===i)||e.push({slug:s,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:l,lang:i,ts:new Date(o).valueOf()})}),{chapters:P(e),total:a.total??e.length,hasMore:a.total>a.limit}}function H(a,e){const t=a[0]===e?a.substring(1):a;return t[t.length-1]===e?t.substring(0,t.length-1):t}var rt=Object.defineProperty,nt=(a,e,t)=>e in a?rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,st=(a,e,t)=>(nt(a,typeof e!="symbol"?e+"":e,t),t);class ae extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:it(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G($(e.title.url))})}}}st(ae,"specId","madara");function it(a,e){if(!a)return;const t=a.title,r=document.querySelector(t.sel)??void 0;if(!r)return;const n=$(h(t.url,{root:r}));if(n!==void 0)return J(e,{titleBase:G(n)})}function J(a,{titleBase:e}){return a.titleBase===e?a:{...a,titleBase:e,readerBase:a.readerBase.replace(a.titleBase,e)}}function G(a){return H(a,"/").split("/").slice(0,-1).join("/")}var ot=Object.defineProperty,lt=(a,e,t)=>e in a?ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ct=(a,e,t)=>(lt(a,typeof e!="symbol"?e+"":e,t),t);class re extends v{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const n=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:n,slug:`${r.IndexName}-chapter-${n}.html`,ts:new Date(r.Date).valueOf()}]}});return this.finalizeRawReleasesData({rawReleases:t})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!(!t||t.includes("{")))return t}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:ne(await this.getVM(),e.slug),hasMoreChapters:!1}}resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html\/?$/,".html")}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,n=se(e.CurChapter,r);return this.finalizeRawReaderData({chap:n.chap,slug:n.slug,imgs:ut(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:ne(e,r),hasMoreChapters:!1}})}getVM(){return D(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}ct(re,"specId","manga4life");function ne(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>se(t,e))}function se(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:new Date(a.Date).valueOf()}}function ut(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),n=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],s=n!=="0"?`${r}.${n}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${s}-`;return a.Pages.map(o=>{const l=(o+"").padStart(3,"0");return`${i}${l}.${t}`})}catch{return}}var gt=Object.defineProperty,pt=(a,e,t)=>e in a?gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ht=(a,e,t)=>(pt(a,typeof e!="symbol"?e+"":e,t),t);class ie extends A{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}async getRawReleasesData(){let e=[];try{e=(await(await fetch("https://api.mangadex.org/chapter?limit=96&offset=0&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&order[readableAt]=desc")).json()).data}catch{return}const t=[];return e.forEach(({relationships:r,attributes:n,id:s})=>{const i=r.find(({type:c})=>c==="manga"),o=typeof n.volume=="string"?+n.volume:void 0,l=typeof n.chapter=="string"?+n.chapter:void 0;l&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||s,vol:o,chap:l,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([L(e,_),L(e,_,"feed")]);if(!t||!r)return;const n=r.value.data?.map?.(o=>{const{attributes:l,id:c}=o;if(typeof l!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:g,volume:p,chapter:d,translatedLanguage:m}=l;return{slug:u||c,label:g||void 0,vol:typeof p=="string"?+p:void 0,chap:typeof d=="string"?+d:void 0,lang:m||"en",ts:new Date(l.readableAt).valueOf()}}).filter(o=>o?.chap!=null)??[],{data:s}=t.value;if(!s)return;const i=le({data:s,getTagIdsFromNames:o=>this.getTagIdsFromNames(o)});if(i)return{...i,chapters:P(n),hasMoreChapters:(r.value.data.total||0)>(r.value.data.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,n]=await Promise.all([L(e,"chapter",_),L(e,"at-home","server",_),L(e,"manga",_,"aggregate")]);if(!t||!r||!n)return;const s=t.value.data,{volume:i,chapter:o,externalUrl:l,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:g,dataSaver:p,hash:d}}=r.value,m=s.relationships?.find?.(C=>C.type==="manga");if(!m)return;const w=le({data:m,getTagIdsFromNames:C=>this.getTagIdsFromNames(C)});if(!w||typeof n.value.volumes!="object")return;const b=oe(n.value)??[];(typeof o!="string"||o==="none")&&!b.length&&b.push({chap:0,slug:s.id});const y=b.findIndex(C=>C.slug===s.id),f=s.relationships?.find?.(C=>C.type==="scanlation_group"),x=u.endsWith("/")?u:u+"/",j=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),O=`${x}${j?"data-saver":"data"}/`,z=((j?p:g)??[]).map?.(C=>`${O}${d}/${C}`)??[];return{externalUrl:l,vol:typeof i=="string"?+i:void 0,inferVol:b[y]?.inferVol,chap:+o||0,imgs:z,lang:c,slug:s.id,prev:b[y+1],next:b[y-1],basePath:"/chapter/",groupName:f?.attributes?.name,groupUrl:f?.attributes?.website,isWebtoon:m?.attributes?.tags?.some(C=>C.attributes.name.en==="Long Strip"),title:{...w,chapters:b}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=oe(await n.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}ht(ie,"specId","mangadex");function oe(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:s,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:s})}).flat().filter(Boolean).reverse();return P(e)}function le({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:n}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:i,altTitles:o,tags:l,contentRating:c}=r;if(typeof s!="object"||i&&!Array.isArray(i))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const g=dt(),p=(i??[])?.map?.(f=>typeof f=="string"?f:void 0).filter(Boolean)??[],d=p.filter(f=>f&&(!g||g.includes(f))),m=o?.map?.(f=>{const[[,x]=[]]=Object.entries(f);return x}),w=n?.find?.(f=>f.type==="cover_art")?.attributes?.fileName,b=w?`https://mangadex.org/covers/${t}/${w}`:void 0,y=(l||[]).map(f=>f?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:m,langs:d.length>0?d:p.length>0?p:["en"],img:b,tags:e(y)}}function dt(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var ft=Object.defineProperty,mt=(a,e,t)=>e in a?ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,wt=(a,e,t)=>(mt(a,typeof e!="symbol"?e+"":e,t),t);class ce extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await S(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await S(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await S(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}wt(ce,"specId","mangafire");var vt=Object.defineProperty,yt=(a,e,t)=>e in a?vt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,bt=(a,e,t)=>(yt(a,typeof e!="symbol"?e+"":e,t),t);class ue extends v{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}resolveReaderSlug(e,t){const r=super.resolveReaderSlug(e,t),n=r.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):r}async getImgs(){const e=await D(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,n).toString(t.enc.Utf8).split(",")}}bt(ue,"specId","mangago");var Rt=Object.defineProperty,$t=(a,e,t)=>e in a?Rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ct=(a,e,t)=>($t(a,typeof e!="symbol"?e+"":e,t),t);class ge extends A{async getRawReleasesData(){throw new Error("Unimplemented")}async getRawTitleData(){const e=await this.getPageData();if(!e)return;const t=await this.getPrefLangs()??["en"],r=e.chart_count_lang_to_serials?.find(s=>t?.includes(s?.field))?.count,n=await this.getTitleChapters();return{...this.transformRawTitleData(e),chapters:n,hasMoreChapters:r&&r>n.length}}async getRawReaderData(){const e=await this.getPageData(),t=e?.comicNode?.data,r=e?.imageSet;if(!e||!t||!r)return;const{httpLis:n,wordLis:s}=r,i=this.transformRawTitleData(t);return{slug:location.pathname.split("/").filter(Boolean)[2],lang:e.lang,vol:e.volume??void 0,chap:e.serial,imgs:n.map((o,l)=>`${o}?${s[l]}`),title:{...i,chapters:[],hasMoreChapters:!1},...await this.getReaderPrevNext(),basePath:`/title/${i.slug}/`}}async getRawChaptersData(){if(!this.context)return;const{lang:e,titleSlug:t,skip:r}=this.context;if(!e||!t)return;const n=await this.getPrefLangs()??["en"];let s;try{s=await fetch("https://mangapark.net/apo/",{method:"POST",body:JSON.stringify({query:"query get_content_comic_chapters($comicId: Int!, $isPref: Boolean) { get_content_comic_chapters(comicId: $comicId, isPref: $isPref) {serial chapters{lang cids}}}",variables:{comicId:+t,isPref:n.includes(e)},operationName:"get_content_comic_chapters"}),headers:{"Content-Type":"application/json"}})}catch{return}const i=[],o=(await s.json()).data.get_content_comic_chapters.reverse();return(r?o.slice(r):o).forEach(l=>{const c=l.chapters.find(p=>p.lang===e);if(!c)return;const u=c.cids?.[0];if(!c||!u)return;const g=l.serial;i.push({slug:`${u}-${e}-ch.${g}`,chap:g,ts:l.datePublic})}),{chapters:i,lang:e,asc:!1,hasMore:!1,total:i.length}}transformRawTitleData(e){return{url:e.urlPath,slug:e.id+"",name:e.name,langs:e.chart_count_lang_to_serials?.map?.(t=>t?.field?.toLowerCase()).filter(Boolean),img:e.urlCover300??e.urlCover600??e.urlCoverOri,tags:this.getTagIdsFromNames(e.genres)}}async getReaderPrevNext(){let e,t;return await D(20,100,async()=>{const r=await S("main a.btn",{lazy:!0,all:!0});if(r?.length)return e=r.find(n=>n.textContent?.toLowerCase().includes("prev")),t=r.find(n=>n.textContent?.toLowerCase().includes("next")),e||t?!0:void 0}),{prev:this.getChapterFromBtn(e),next:this.getChapterFromBtn(t)}}getChapterFromBtn(e){const t=e?.getAttribute("href");if(!t)return;const r=t.split("/").filter(Boolean).slice(-1)[0];if(!r)return;const n=M(r.split("-").slice(2).join("-"));if(n)return{slug:r,lang:r.split("-")[1]||void 0,...n}}async getTitleChapters(){const e=[],t=await S(".file-list-by-serial time[time]",{lazy:!0,all:!0});if(!t?.length)return e;let r;return t.forEach(n=>{const s=n.parentElement;for(let i=0;i<5;i++){const o=s?.parentElement?.querySelector('a[href*="/title/"]');if(!o)continue;const l=o.getAttribute("href")?.split("/").filter(Boolean)[2],c=o.textContent?.replace(/(\n|\t)/g," ").trim(),u=M(c);if(!u||!l||r&&r.chap==u.chap&&(r.vol??0)==(u.vol??0))break;const g=+n.getAttribute("time");r={...u,slug:l,lang:l.split("-")[1]||void 0,ts:g===g&&typeof g=="number"?g:void 0},e.push(r);break}}),P(e)}getPageData(){return D(100,50,()=>window.__NEXT_DATA__?.props?.pageProps?.dehydratedState?.queries?.[0]?.state?.data?.data)}getPrefLangs(){return D(40,50,()=>{const e=window.__NEXT_DATA__?.props?.pageProps;if(!e)return;const t=e?.extra?.sets?.general_prefLangs?.filter(Boolean);return t?.length?t:["en"]})}}Ct(ge,"specId","mangapark");var St=Object.defineProperty,Dt=(a,e,t)=>e in a?St(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,xt=(a,e,t)=>(Dt(a,typeof e!="symbol"?e+"":e,t),t);class pe extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.slug.substring(t.slug.lastIndexOf("-")+1)||void 0}))}}}xt(pe,"specId","mangareader");var Tt=Object.defineProperty,Mt=(a,e,t)=>e in a?Tt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Pt=(a,e,t)=>(Mt(a,typeof e!="symbol"?e+"":e,t),t);class he extends v{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:It(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:E(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:E($(e.title.url))}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),n=h(t.url,{root:r});return{...e,siteMeta:k(this.siteMeta,{titleBase:E($(n))})}}async getReaderTitleId(){const e=await window.HISTORY?.getStored?.();if(!e||typeof e!="object")return;const t=Object.values(e).filter(Boolean);if(!t.length)return;t.sort((n,s)=>s.time-n.time);const r=t[0].manga_ID;return typeof r=="string"?r:typeof r=="number"?r+"":void 0}}Pt(he,"specId","mangastream");function It(a,e){if(!a)return;const t={...e,releases:H(location.pathname,"/")},r=a.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=$(h(r.url,{root:n}));if(s===void 0)return;const i=n.querySelector(r.chapter.sel)??void 0;if(!(!i||$(h(r.chapter.url,{root:i}))===void 0))return t.titleBase=E(s),e.titleIdType===U.id&&(h(r.id,{root:n})||(e.titleIdType=U.name)),k(e,t)}function k(a,e){const t=Object.keys(e),r={...a};let n=!1;return t.forEach(s=>{const i=e[s];i!==a[s]&&(r[s]=i,n=!0)}),n?r:void 0}function E(a){return H(a,"/").split("/").slice(0,-1).join("/")}var Bt=Object.defineProperty,Nt=(a,e,t)=>e in a?Bt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,_t=(a,e,t)=>(Nt(a,typeof e!="symbol"?e+"":e,t),t);class de extends v{async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,hasMoreChapters:e.chapters.length===50}}}_t(de,"specId","mgeko");var Lt=Object.defineProperty,jt=(a,e,t)=>e in a?Lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ot=(a,e,t)=>(jt(a,typeof e!="symbol"?e+"":e,t),t);const fe=class W extends v{async getRawReaderData(){const e=await super.getRawReaderData();return e?.title.chapters?.length?{...e,prev:e.prev?W.finalizeChapter(e.prev):void 0,next:e.next?W.finalizeChapter(e.next):void 0,title:{...e.title,chapters:e.title.chapters.map(W.finalizeChapter)}}:e}static finalizeChapter(e){return{...e,slug:`chapter-${e.slug}`}}};Ot(fe,"specId","nato");let At=fe;var zt=Object.defineProperty,kt=(a,e,t)=>e in a?zt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Et=(a,e,t)=>(kt(a,typeof e!="symbol"?e+"":e,t),t);class me extends v{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const n=this.spec.reader.title;n.id&&await S(n.id.split("|")[0],{lazy:!0}),t=h(n.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await Wt(t),hasMoreChapters:r}}}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const r=t.lastIndexOf("-"),n=+t.substring(r+1);return r===-1||isNaN(n)||n<1e3?t:t.substring(0,r)}}Et(me,"specId","nettruyen");async function Wt(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?P(e.chapters.map(t=>{const{name:r,url:n}=t,s=M(r);if(!(!s||!n))return{slug:$(n).split("/").filter(Boolean).slice(2).join("/"),...s}})):[]}var qt=Object.defineProperty,Ut=(a,e,t)=>e in a?qt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ft=(a,e,t)=>(Ut(a,typeof e!="symbol"?e+"":e,t),t);class we extends v{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!X()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e;const t=this.context?.findContinue;if(t){const l=await this.findContinueChapters({rawTitleData:e,chapter:t});return l?{chapters:l,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:n,...s}=e,i=n.length,o=r&&r>=i?Math.floor(r/i)+1:void 0;return o?{chapters:await this.getChaptersByPage({page:o,titleSlug:e.slug})??[],title:{...s,chapters:[]},hasMore:!!X(o),asc:!1,skip:r}:{chapters:n,title:{...s,chapters:[]},hasMore:!!X()}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:n={},...s}){const i=n[r]??e.chapters,o=i[i.length-1].chap<=t,l=s.maxPage??Vt();if(o){if(i[0].chap>t){const y=[...i].reverse().find(f=>f.chap>t);return y?[y]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===l)return i.slice(-1);const c=e.chapters.length,u=Object.keys(n).map(y=>+y).sort((y,f)=>y-f),g=o?-1:1,p=u[u.indexOf(r)+g];if(p===r+g)return o?n[p].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(n[p].slice(0,1));const d=o?t-i[0].chap:i[0].chap-t,m=Math.floor(d/c)+1,w=o?Math.max(m,(p??1)+1):Math.min(m,(p??l+1)-1,l),b=await this.getChaptersByPage({page:w,titleSlug:e.slug});if(b)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:w,maxPage:l,cacheChaptersByPage:{...n,1:e.chapters,[w]:b}})}async getChaptersByPage({page:e,titleSlug:t}){const r=ve(e);if(!r)return;const n=this.spec.title.chapter,s=n.sel,i=document.querySelector(s),o=D(100,30,()=>{const l=document.querySelector(s);if(l&&i!==l)return!0;r.click()});return r.click(),await o,await this.getChapters(n,{lazy:!1,titleSlug:t})}}Ft(we,"specId","reaper");function X(a=1){return ve(a+1)}function ve(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Vt(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var Ht=Object.defineProperty,Jt=(a,e,t)=>e in a?Ht(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Gt=(a,e,t)=>(Jt(a,typeof e!="symbol"?e+"":e,t),t);class ye extends v{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=h(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return be({...e,tags:this.getTagIdsFromNames(t)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return;const t=`${location.origin}/series/${e.title.slug}/info`;return{...e,title:{...be({...e.title,url:t,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,n=t?Math.floor(t/1e3)+1:1;try{const s=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return Xt(await s.json())}catch{return}}resolveTitleSlug(e){if(!e)return;const t=e.split("/").filter(Boolean);return t[1]??t[0]}}Gt(ye,"specId","tapas");function be(a,e){const t=Yt(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function Xt(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function Yt(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var Qt=Object.defineProperty,Zt=(a,e,t)=>e in a?Qt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Kt=(a,e,t)=>(Zt(a,typeof e!="symbol"?e+"":e,t),t);class Re extends v{async getRawTitleData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(t||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.pathname.split("/")[1];return{...n,id:r,langs:[s].filter(Boolean),chapters:n.chapters.map(i=>({...i,lang:s})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const n=+t;if(n!==n)return;const s=document.title.split("|")[1]?.trim();if(!s)return;const i=location.pathname.split("/"),o=`${i.slice(0,4).join("/")}/list?title_no=${r}`,l=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1}),c=i[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${n}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:o,slug:o,name:s,langs:[c],chapters:(l??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=h("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await D(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:t})=>t).filter(Boolean))}resolveReaderSlug(e,t,r){if(!r)return t;if(r.startsWith("http://")||r.startsWith("https://")){const n=q(r);return n.pathname+n.search}return r}}Kt(Re,"specId","webtoon");const ea=[K,at,re,ie,he,ae,At,me,we,ye,ue,ce,ge,de,Re,pe];function $e(a){const e=ea.find(t=>t.specId===a.spec.id)??v;return new e(a)}async function ta(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:Ce(t,e.generic);if(!r.length)return;const n=$e({...a,spec:e,siteMeta:t});return await B(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await B((a.genericSpecs??[]).map(t=>{const r=Ce(t.meta,t.generic);if(!r.length)return[];const n=$e({...a,spec:t,siteMeta:t.meta});return r.map(s=>n.getRawPageByType(s,!0))}).flat())}function Ce(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=Se(n,r),i=Se(n,t);if(s!==i)return s>i?[R.reader]:[R.title];if(s>0)return[R.reader,R.title];if(n.length===1){const o=[!r&&R.reader,!t&&R.title].filter(Boolean);if(o.length)return o}return!r&&!t||e?[R.reader,R.title]:[]}function Se(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}"),n=a.length-t.length;return r&&n!==0||!r&&n<1?0:t.filter((s,i)=>a[i]===s||s==="{titleSlug}"||s==="{lang}"||s==="{slug}").length}I.PageType=R,I.scrape=ta});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trackkun-dom",
3
3
  "author": "endyquang",
4
- "version": "1.2.0",
4
+ "version": "1.2.2",
5
5
  "license": "UNLICENSED",
6
6
  "description": "Trkun DOM parser",
7
7
  "main": "index.js",
package/specs.json CHANGED
@@ -1 +1 @@
1
- [{"404":"#content > .wrapper > .notf img, body:empty","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"releases":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"releases":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id || #rating-form input[name=\"bs_table_id\"]|attr:value","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","content":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","imgs":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop #chapter option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"releases":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".page-listing-item .page-item-detail, .lastest-content .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a, .item-summary h3|text","url":"a|attr:href","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"sel":"body.manga-page","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value || [data-action=\"bookmark\"]|attr:data-post","name":"h1|text","img":".summary_image .img-responsive, .summary_image img, .series-img img|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"],.genres-content|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter, .chapter-ul > li","url":"a|attr:href","label":"a, .chapter-title-date > p|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","content":".reading-content","label":".breadcrumb li.active|text","imgs":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","meta":{"releases":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a:not([rel]) > span:first-child > span:first-child,a > span:first-child > span:first-child|text","url":"a:not([rel])|attr:href || a|attr:href","at":"small|text"}},"reader":{"content":"#mangareader .container-fluid, #mangareader","label":"h3|text","imgs":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","meta":{"releases":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"content":"#readerarea","label":"h2.entry-title|text","imgs":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","meta":{"releases":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"releases":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"id":".rating .star[data-id],.follow-link[data-id]|attr:data-id","name":"#item-detail h1.title-detail|text","img":"#item-detail .detail-info img|attr-contain:src","tags":".kind a[href*=\"/tim-truyen/\"]|text","chapter":{"sel":"#nt_listchapter nav > ul > li.row","label":".chapter a|text","url":".chapter a|attr:href","at":".small|text"}},"reader":{"content":".reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","imgs":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","url":"h3 a|attr:href"}}},{"id":"manga4life","meta":{"releases":"","titleBase":"manga","readerBase":"read-online","searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"name":".BoxBody h1|text","img":"meta[property=\"og:image\"],meta[property=\"twitter:image:src\"]|attr:content","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text"},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","url":"a|attr:href"}}},{"id":"mangadex","meta":{"releases":"about:blank","titleBase":"title","readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"slug"}},{"id":"comick","meta":{"home":"home","releases":"about:blank","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"id"},"releases":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"name":"h1|text","img":"a[href$=\"/covers\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".reader-container","content":".reader-container","label":"select:first-of-type option[selected]|text","imgs":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href"},"lang":"select:last-of-type|value","prev":".reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".reader-container a:last-child[href^=\"/comic/\"]|attr:href","chapter":{"sel":"select:first-of-type option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"id":"bato","meta":{"releases":"","titleBase":"series","readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"name":"h3.item-title a|text","img":".attr-cover > img|attr-contain:src","langs":".title-set em[data-lang]|attr:data-lang","tags":".attr-main .attr-item .text-muted|row:genres","chapter":{"sel":".episode-list > .main > .item","label":"a.chapt > b|text","url":"a.chapt|attr:href","at":".extra > i|text"}},"reader":{"content":"#viewer","label":"title|text","imgs":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","meta":{"releases":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"ul#search_list > li > div","name":"a.thm-effect|attr:title","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"name":".w-title h1|text","img":".article .cover img,#information img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"],.manga_info ul.uk-list a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr, table.uk-table tbody tr","label":"h4 a b, a.chico b|text || a.chico|text","url":"h4 a, a.chico|attr:href","at":"td:last-child|text"}},"reader":{"label":"#navi h3 span:last-child,#series + a.chapter|text","title":{"sel":"#navi a#series,#reader-nav .nav li:first-child a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pagebar.top ul.dropdown-menu.chapter > li > a,#series ~ ul.chapter li a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"content":"#list-image","imgDivs":".card-wrap[data-url]","label":".breadcrumb-item.active|text","imgs":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","meta":{"releases":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]|attr-contain:src","chapter":{"sel":"div > ul[role=\"list\"]:first-child li[wire\\:key^=\"comic-chapter-list\"] a","label":"p|text","url":"|attr:href","at":"div:last-child > p|text"}},"reader":{"content":"main","label":"title|text","imgs":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}},{"id":"tapas","meta":{"titleBase":"series/{slug}/info","readerBase":"episode","searchBase":"search?q=","defaultLang":"en","titleIdType":"id","chapters":"about:blank"},"title":{"id":".button--subscribe|attr:data-tiara-event-meta-series-id","name":".info .title|text","img":".thumb img|attr:src","chapter":{"sel":".episode-list .episode-list__item > a","url":"|attr:data-id","label":"|attr:data-scene-number"}},"reader":{"content":".viewer__body","id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","imgs":".viewer__body img|[attr:data-src,attr-contain:src]","prev":"div[data-prev-id]:not([data-prev-id=\"-1\"])|attr:data-prev-id","next":"div[data-next-id]:not([data-next-id=\"-1\"])|attr:data-next-id","title":{"sel":"body","id":".subscribe-btn|attr:data-id","url":".subscribe-btn|attr:data-id","name":".series-info .title|text","img":".series-info .thumb img|attr:src"},"chapter":{"sel":".episode-list .list-body > li[data-id]","url":"|attr:data-id","label":".info__label|text"}}},{"id":"mangafire","meta":{"home":"home","releases":"updated","titleBase":"manga","readerBase":"read/{titleSlug}/{lang}","searchBase":"filter?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".unit > .inner","id":"a[data-tip]|attr:data-tip","name":".info a|text","url":"a|attr:href","chapter":{"sel":"ul.content li a","label":"span:first-child|text","url":"|attr:href","at":"span:last-child"}}},"title":{"id":".bookmark[data-id]|attr:data-id","name":".info h1[itemprop=\"name\"]|text","img":".poster img|attr-contain:src","tags":"#info-rating a[href*=\"/genre/\"]|text","langs":".tab-content[data-name=\"chapter\"] a.dropdown-item[data-code]|attr:data-code","chapter":{"sel":".tab-content[data-name=\"chapter\"] li.item[data-number]","url":"a|attr:href","label":"|attr:data-number","at":"a span:last-child|text"}},"reader":{"imgs":"","content":"#page-wrapper","imgDivs":".page","lstripBtn":".setting-tab.page-layout [data-value=\"longstrip\"]","label":"#number-panel ul li a[href*=\"/read/\"][data-number].active|attr:data-number","title":{"sel":"#ctrl-menu .head a","id":"body|attr:data-id","url":"|attr:href","name":"|text"},"chapter":{"sel":"#number-panel ul li a[href*=\"/read/\"][data-number]","label":"|attr:data-number","url":"|attr:href"}}},{"id":"mangapark","meta":{"chapters":"about:blank","titleBase":"title","readerBase":"title/{titleSlug}","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"}},{"id":"webtoon","meta":{"titleBase":"","readerBase":"","searchBase":"search?keyword=","defaultLang":"en","chapters":"meta.reader","titleIdType":"id"},"title":{"name":"h1.subj,.detail_info > p.subj,.info > h3.subj|text","img":"meta[property=\"og:image\"]|attr:content","tags":".info > h2.genre,.detail_info > p.genre,.info > p.genre|text","chapter":{"sel":"li._episodeItem","label":"|attr:data-episode-no","url":"a|attr:href","at":".date|text"}}},{"id":"mangareader","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .mls-wrap > .item","url":"a|attr:href","name":".manga-name a|text","chapter":{"sel":".fd-list .chapter a","label":"|text","url":"|attr:href"}}},"title":{"id":"[data-manga-id]|attr:data-manga-id","name":"#ani_detail h2.manga-name|text","img":"#ani_detail img.manga-poster-img|attr:src","type":".anisc-info .item-head|row:type","tags":".anisc-detail .genres a|text","langs":"a.c-select-lang|attr:data-code","chapter":{"sel":".chapters-list-ul > ul > li","label":"|attr:data-number","url":"a|attr:href"}},"reader":{"imgs":"","content":"#main-wrapper","imgDivs":".iv-card[data-url]","lstrip":"a.active[data-value=\"vertical\"]","lstripBtn":".dropdown-menu a[data-value=\"vertical\"]","label":".reading-list .chapter-item.active|attr:data-number","title":{"id":"[data-manga-id]|attr:data-manga-id","sel":"#header a.hr-manga","name":"h2,.manga-name|text","url":"|attr:href"},"chapter":{"sel":".reading-list.active > .chapter-item","url":"a|attr:href","label":"|attr:data-number"}}},{"id":"mgeko","meta":{"titleBase":"manga","readerBase":"reader","searchBase":"search/?search=","defaultLang":"en","titleIdType":"slug","chapters":"meta.reader"},"title":{"name":".cover img|attr:alt","img":".cover img|[attr:data-src,attr-contain:src]","tags":".categories .property-item|text","chapter":{"sel":".chapter-list > li a","url":"|attr:href","label":".chapter-title|text","at":"time|attr:datetime"}},"reader":{"content":"#chapter-reader","label":".chapter-header .titles h2|text","next":"center .nextchap:not(.isDisabled)|attr:href","prev":"center .prevchap:not(.isDisabled)|attr:href","title":{"sel":".chapter-header .titles h1 a","name":"|text","url":"|attr:href"},"chapter":{"sel":"center center #cars option","label":"|text","url":"|attr:value"}}}]
1
+ [{"404":"#content > .wrapper > .notf img, body:empty","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"releases":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"releases":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id || #rating-form input[name=\"bs_table_id\"]|attr:value","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","content":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","imgs":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop #chapter option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"releases":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".page-listing-item .page-item-detail, .lastest-content .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a, .item-summary h3|text","url":"a|attr:href","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"sel":"body.manga-page","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value || [data-action=\"bookmark\"]|attr:data-post","name":"h1|text","img":".summary_image .img-responsive, .summary_image img, .series-img img|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"],.genres-content|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter, .chapter-ul > li","url":"a|attr:href","label":"a, .chapter-title-date > p|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","content":".reading-content","label":".breadcrumb li.active|text","imgs":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","meta":{"releases":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a:not([rel]) > span:first-child > span:first-child,a > span:first-child > span:first-child|text","url":"a:not([rel])|attr:href || a|attr:href","at":"small|text"}},"reader":{"content":"#mangareader .container-fluid, #mangareader","label":"h3|text","imgs":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","meta":{"releases":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"content":"#readerarea","label":"h2.entry-title|text","imgs":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","meta":{"releases":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"releases":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"id":".rating .star[data-id],.follow-link[data-id]|attr:data-id","name":"#item-detail h1.title-detail|text","img":"#item-detail .detail-info img|attr-contain:src","tags":".kind a[href*=\"/tim-truyen/\"]|text","chapter":{"sel":"#nt_listchapter nav > ul > li.row","label":".chapter a|text","url":".chapter a|attr:href","at":".small|text"}},"reader":{"content":".reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","imgs":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","url":"h3 a|attr:href"}}},{"id":"manga4life","meta":{"releases":"","titleBase":"manga","readerBase":"read-online","searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"name":".BoxBody h1|text","img":"meta[property=\"og:image\"],meta[property=\"twitter:image:src\"]|attr:content","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text"},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","url":"a|attr:href"}}},{"id":"mangadex","meta":{"releases":"about:blank","titleBase":"title","readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"slug"}},{"id":"comick","meta":{"home":"home","releases":"about:blank","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"id"},"releases":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"name":"h1|text","img":"a[href$=\"/covers\"] > img,a[href$=\"/cover\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".reader-container","content":".reader-container","label":"select:first-of-type option[selected]|text","imgs":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href"},"lang":"select:last-of-type|value","prev":".reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".reader-container a:last-child[href^=\"/comic/\"]|attr:href","chapter":{"sel":"select:first-of-type option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"id":"bato","meta":{"releases":"","titleBase":"series","readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"name":"h3.item-title a|text","img":".attr-cover > img|attr-contain:src","langs":".title-set em[data-lang]|attr:data-lang","tags":".attr-main .attr-item .text-muted|row:genres","chapter":{"sel":".episode-list > .main > .item","label":"a.chapt > b|text","url":"a.chapt|attr:href","at":".extra > i|text"}},"reader":{"content":"#viewer","label":"title|text","imgs":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","meta":{"releases":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"ul#search_list > li > div","name":"a.thm-effect|attr:title","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"name":".w-title h1|text","img":".article .cover img,#information img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"],.manga_info ul.uk-list a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr, table.uk-table tbody tr","label":"h4 a b, a.chico b|text || a.chico|text","url":"h4 a, a.chico|attr:href","at":"td:last-child|text"}},"reader":{"label":"#navi h3 span:last-child,#series + a.chapter|text","title":{"sel":"#navi a#series,#reader-nav .nav li:first-child a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pagebar.top ul.dropdown-menu.chapter > li > a,#series ~ ul.chapter li a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"content":"#list-image","imgDivs":".card-wrap[data-url]","label":".breadcrumb-item.active|text","imgs":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","meta":{"releases":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]|attr-contain:src","chapter":{"sel":"div > ul[role=\"list\"]:first-child li[wire\\:key^=\"comic-chapter-list\"] a","label":"p|text","url":"|attr:href","at":"div:last-child > p|text"}},"reader":{"content":"main","label":"title|text","imgs":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}},{"id":"tapas","meta":{"titleBase":"series/{slug}/info","readerBase":"episode","searchBase":"search?q=","defaultLang":"en","titleIdType":"id","chapters":"about:blank"},"title":{"id":".button--subscribe|attr:data-tiara-event-meta-series-id","name":".info .title|text","img":".thumb img|attr:src","chapter":{"sel":".episode-list .episode-list__item > a","url":"|attr:data-id","label":"|attr:data-scene-number"}},"reader":{"content":".viewer__body","id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","imgs":".viewer__body img|[attr:data-src,attr-contain:src]","prev":"div[data-prev-id]:not([data-prev-id=\"-1\"])|attr:data-prev-id","next":"div[data-next-id]:not([data-next-id=\"-1\"])|attr:data-next-id","title":{"sel":"body","id":".subscribe-btn|attr:data-id","url":".subscribe-btn|attr:data-id","name":".series-info .title|text","img":".series-info .thumb img|attr:src"},"chapter":{"sel":".episode-list .list-body > li[data-id]","url":"|attr:data-id","label":".info__label|text"}}},{"id":"mangafire","meta":{"home":"home","releases":"updated","titleBase":"manga","readerBase":"read/{titleSlug}/{lang}","searchBase":"filter?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".unit > .inner","id":"a[data-tip]|attr:data-tip","name":".info a|text","url":"a|attr:href","chapter":{"sel":"ul.content li a","label":"span:first-child|text","url":"|attr:href","at":"span:last-child"}}},"title":{"id":".bookmark[data-id]|attr:data-id","name":".info h1[itemprop=\"name\"]|text","img":".poster img|attr-contain:src","tags":"#info-rating a[href*=\"/genre/\"]|text","langs":".tab-content[data-name=\"chapter\"] a.dropdown-item[data-code]|attr:data-code","chapter":{"sel":".tab-content[data-name=\"chapter\"] li.item[data-number]","url":"a|attr:href","label":"|attr:data-number","at":"a span:last-child|text"}},"reader":{"imgs":"","content":"#page-wrapper","imgDivs":".page","lstripBtn":".setting-tab.page-layout [data-value=\"longstrip\"]","label":"#number-panel ul li a[href*=\"/read/\"][data-number].active|attr:data-number","title":{"sel":"#ctrl-menu .head a","id":"body|attr:data-id","url":"|attr:href","name":"|text"},"chapter":{"sel":"#number-panel ul li a[href*=\"/read/\"][data-number]","label":"|attr:data-number","url":"|attr:href"}}},{"id":"mangapark","meta":{"chapters":"about:blank","titleBase":"title","readerBase":"title/{titleSlug}","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"}},{"id":"webtoon","meta":{"titleBase":"","readerBase":"","searchBase":"search?keyword=","defaultLang":"en","chapters":"meta.reader","titleIdType":"id"},"title":{"name":"h1.subj,.detail_info > p.subj,.info > h3.subj|text","img":"meta[property=\"og:image\"]|attr:content","tags":".info > h2.genre,.detail_info > p.genre,.info > p.genre|text","chapter":{"sel":"li._episodeItem","label":"|attr:data-episode-no","url":"a|attr:href","at":".date|text"}}},{"id":"mangareader","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .mls-wrap > .item","url":"a|attr:href","name":".manga-name a|text","chapter":{"sel":".fd-list .chapter a","label":"|text","url":"|attr:href"}}},"title":{"id":"[data-manga-id]|attr:data-manga-id","name":"#ani_detail h2.manga-name|text","img":"#ani_detail img.manga-poster-img|attr:src","type":".anisc-info .item-head|row:type","tags":".anisc-detail .genres a|text","langs":"a.c-select-lang|attr:data-code","chapter":{"sel":".chapters-list-ul > ul > li","label":"|attr:data-number","url":"a|attr:href"}},"reader":{"imgs":"","content":"#main-wrapper","imgDivs":".iv-card[data-url]","lstrip":"a.active[data-value=\"vertical\"]","lstripBtn":".dropdown-menu a[data-value=\"vertical\"]","label":".reading-list .chapter-item.active|attr:data-number","title":{"id":"[data-manga-id]|attr:data-manga-id","sel":"#header a.hr-manga","name":"h2,.manga-name|text","url":"|attr:href"},"chapter":{"sel":".reading-list.active > .chapter-item","url":"a|attr:href","label":"|attr:data-number"}}},{"id":"mgeko","meta":{"titleBase":"manga","readerBase":"reader","searchBase":"search/?search=","defaultLang":"en","titleIdType":"slug","chapters":"meta.reader"},"title":{"name":".cover img|attr:alt","img":".cover img|[attr:data-src,attr-contain:src]","tags":".categories .property-item|text","chapter":{"sel":".chapter-list > li a","url":"|attr:href","label":".chapter-title|text","at":"time|attr:datetime"}},"reader":{"content":"#chapter-reader","label":".chapter-header .titles h2|text","next":"center .nextchap:not(.isDisabled)|attr:href","prev":"center .prevchap:not(.isDisabled)|attr:href","title":{"sel":".chapter-header .titles h1 a","name":"|text","url":"|attr:href"},"chapter":{"sel":"center center #cars option","label":"|text","url":"|attr:value"}}}]
package/tags.json CHANGED
@@ -1 +1 @@
1
- [{"id":1,"category":0,"name":"Manga"},{"id":2,"category":0,"name":"Manhua"},{"id":3,"category":0,"name":"Manhwa"},{"id":4,"category":0,"name":"Comic"},{"id":5,"category":0,"name":"Novel"},{"id":6,"category":0,"name":"Anime"},{"id":7,"category":0,"name":"Donghua"},{"id":11,"category":1,"name":"Shounen","altNames":["shônen"]},{"id":12,"category":1,"name":"Shoujo"},{"id":13,"category":1,"name":"Seinen"},{"id":14,"category":1,"name":"Josei"},{"id":15,"category":1,"name":"Yaoi","altNames":["shounen ai"]},{"id":16,"category":1,"name":"Yuri","altNames":["shoujo ai"]},{"id":20,"category":2,"name":"4 Koma"},{"id":21,"category":2,"name":"Adaptation"},{"id":22,"category":2,"name":"Anthology"},{"id":23,"category":2,"name":"Award Winning"},{"id":24,"category":2,"name":"Doujinshi"},{"id":25,"category":2,"name":"Fan Colored"},{"id":26,"category":2,"name":"Full Color"},{"id":27,"category":2,"name":"Long Strip"},{"id":28,"category":2,"name":"Official Colored"},{"id":29,"category":2,"name":"Oneshot"},{"id":20,"category":2,"name":"Self Published"},{"id":31,"category":2,"name":"Web Comic"},{"id":40,"category":3,"name":"Adult","altNames":["adulte"]},{"id":41,"category":3,"name":"Bloody"},{"id":42,"category":3,"name":"Ecchi"},{"id":43,"category":3,"name":"Erotica"},{"id":44,"category":3,"name":"Gore"},{"id":45,"category":3,"name":"Hentai"},{"id":46,"category":3,"name":"Mature"},{"id":47,"category":3,"name":"Smut"},{"id":49,"category":3,"name":"Violence"},{"id":60,"name":"Action","altNames":["aksiyon"]},{"id":61,"name":"Adventure","altNames":["aventure","macera"]},{"id":62,"name":"Age Gap"},{"id":63,"name":"Aliens"},{"id":64,"name":"Animals"},{"id":65,"name":"Beasts"},{"id":66,"name":"Bodyswap"},{"id":67,"name":"Boys' Love","altNames":["shounen ai"]},{"id":68,"name":"Cheating","altNames":["infideli"]},{"id":69,"name":"Childhood Friends"},{"id":70,"name":"Comedy","altNames":["funny","comédie","komedi"]},{"id":71,"name":"Cooking"},{"id":72,"name":"Crime"},{"id":73,"name":"Cross Dressing"},{"id":74,"name":"Crossdressing"},{"id":75,"name":"Cultivation"},{"id":76,"name":"Delinquents"},{"id":77,"name":"Demons","altNames":["démons"]},{"id":78,"name":"Detective"},{"id":79,"name":"Drama","altNames":["drame","dram"]},{"id":80,"name":"Dungeons"},{"id":81,"name":"Fantasy","altNames":["fantastique","fantaisie","fantastik"]},{"id":82,"name":"Fetish"},{"id":83,"name":"Food"},{"id":84,"name":"Game"},{"id":85,"name":"Genderswap"},{"id":86,"name":"Ghosts"},{"id":87,"name":"Girls' Love"},{"id":88,"name":"Gyaru"},{"id":89,"name":"Harem"},{"id":90,"name":"Historical","altNames":["historique"]},{"id":91,"name":"Horror","altNames":["horreur"]},{"id":92,"name":"Incest"},{"id":93,"name":"Isekai"},{"id":94,"name":"Loli","altNames":["lolicon"]},{"id":95,"name":"Mafia"},{"id":96,"name":"Magic","altNames":["magie"]},{"id":97,"name":"Magical Girls","altNames":["mahou shoujo"]},{"id":98,"name":"Martial Arts","altNames":["martial","art martiaux","dövüş sanatları"]},{"id":99,"name":"Mecha"},{"id":100,"name":"Medical"},{"id":101,"name":"Military","altNames":["militaire"]},{"id":102,"name":"Modern Setting"},{"id":103,"name":"Monster Girls"},{"id":104,"name":"Monsters","altNames":["monstres"]},{"id":105,"name":"Murim"},{"id":106,"name":"Music"},{"id":107,"name":"Mystery","altNames":["mystère"]},{"id":108,"name":"Ninja"},{"id":109,"name":"Office Workers"},{"id":110,"name":"Overpowered"},{"id":111,"name":"Parody"},{"id":112,"name":"Philosophical"},{"id":113,"name":"Police"},{"id":114,"name":"Post Apocalyptic","altNames":["apocalypse"]},{"id":115,"name":"Psychological","altNames":["psychologie"]},{"id":116,"name":"Reincarnation","altNames":["regression","rebirth","reincarnate","return","returned","returner","réincarnation","reenkarnasyon"]},{"id":117,"name":"Revenge","altNames":["vengeance"]},{"id":118,"name":"Reverse Harem"},{"id":119,"name":"Romance","altNames":["love","romantizm"]},{"id":120,"name":"Royalty"},{"id":121,"name":"Samurai"},{"id":122,"name":"School Life","altNames":["vie scolaire"]},{"id":123,"name":"Sci Fi"},{"id":124,"name":"Science Fiction"},{"id":125,"name":"Shota"},{"id":126,"name":"Slice of Life","altNames":["tranches de vie"]},{"id":127,"name":"Sports"},{"id":128,"name":"Superhero"},{"id":129,"name":"Supernatural","altNames":["surnaturel"]},{"id":130,"name":"Survival","altNames":["hayatta Kalma"]},{"id":131,"name":"System","altNames":["cheat system"]},{"id":132,"name":"Thriller"},{"id":133,"name":"Time Travel"},{"id":134,"name":"Traditional Games"},{"id":135,"name":"Tragedy","altNames":["tragédie","trajedi"]},{"id":136,"name":"Transmigration"},{"id":137,"name":"Vampires"},{"id":138,"name":"Video Games"},{"id":139,"name":"Villain"},{"id":140,"name":"Villainess"},{"id":141,"name":"Virtual Reality"},{"id":142,"name":"Webtoon"},{"id":143,"name":"Wuxia"},{"id":144,"name":"Yakuzas"},{"id":145,"name":"Zombies"}]
1
+ [{"id":1,"category":0,"name":"Manga"},{"id":2,"category":0,"name":"Manhua"},{"id":3,"category":0,"name":"Manhwa"},{"id":4,"category":0,"name":"Comic"},{"id":5,"category":0,"name":"Novel"},{"id":6,"category":0,"name":"Anime"},{"id":7,"category":0,"name":"Donghua"},{"id":11,"category":1,"name":"Shounen","altNames":["shônen"]},{"id":12,"category":1,"name":"Shoujo"},{"id":13,"category":1,"name":"Seinen"},{"id":14,"category":1,"name":"Josei"},{"id":15,"category":1,"name":"Yaoi","altNames":["shounen ai"]},{"id":16,"category":1,"name":"Yuri","altNames":["shoujo ai"]},{"id":20,"category":2,"name":"4 Koma"},{"id":21,"category":2,"name":"Adaptation"},{"id":22,"category":2,"name":"Anthology"},{"id":23,"category":2,"name":"Award Winning"},{"id":24,"category":2,"name":"Doujinshi"},{"id":25,"category":2,"name":"Fan Colored"},{"id":26,"category":2,"name":"Full Color"},{"id":27,"category":2,"name":"Long Strip"},{"id":28,"category":2,"name":"Official Colored"},{"id":29,"category":2,"name":"Oneshot"},{"id":20,"category":2,"name":"Self Published"},{"id":31,"category":2,"name":"Web Comic"},{"id":40,"category":3,"name":"Adult","altNames":["adulte"]},{"id":41,"category":3,"name":"Bloody"},{"id":42,"category":3,"name":"Ecchi"},{"id":43,"category":3,"name":"Erotica"},{"id":44,"category":3,"name":"Gore"},{"id":45,"category":3,"name":"Hentai","altNames":["pornographic"]},{"id":46,"category":3,"name":"Mature"},{"id":47,"category":3,"name":"Smut"},{"id":49,"category":3,"name":"Violence"},{"id":60,"name":"Action","altNames":["aksiyon"]},{"id":61,"name":"Adventure","altNames":["aventure","macera"]},{"id":62,"name":"Age Gap"},{"id":63,"name":"Aliens"},{"id":64,"name":"Animals"},{"id":65,"name":"Beasts"},{"id":66,"name":"Bodyswap"},{"id":67,"name":"Boys' Love","altNames":["shounen ai"]},{"id":68,"name":"Cheating","altNames":["infideli"]},{"id":69,"name":"Childhood Friends"},{"id":70,"name":"Comedy","altNames":["funny","comédie","komedi"]},{"id":71,"name":"Cooking"},{"id":72,"name":"Crime"},{"id":73,"name":"Cross Dressing"},{"id":74,"name":"Crossdressing"},{"id":75,"name":"Cultivation"},{"id":76,"name":"Delinquents"},{"id":77,"name":"Demons","altNames":["démons"]},{"id":78,"name":"Detective"},{"id":79,"name":"Drama","altNames":["drame","dram"]},{"id":80,"name":"Dungeons"},{"id":81,"name":"Fantasy","altNames":["fantastique","fantaisie","fantastik"]},{"id":82,"name":"Fetish"},{"id":83,"name":"Food"},{"id":84,"name":"Game"},{"id":85,"name":"Genderswap"},{"id":86,"name":"Ghosts"},{"id":87,"name":"Girls' Love"},{"id":88,"name":"Gyaru"},{"id":89,"name":"Harem"},{"id":90,"name":"Historical","altNames":["historique"]},{"id":91,"name":"Horror","altNames":["horreur"]},{"id":92,"name":"Incest"},{"id":93,"name":"Isekai"},{"id":94,"name":"Loli","altNames":["lolicon"]},{"id":95,"name":"Mafia"},{"id":96,"name":"Magic","altNames":["magie"]},{"id":97,"name":"Magical Girls","altNames":["mahou shoujo"]},{"id":98,"name":"Martial Arts","altNames":["martial","art martiaux","dövüş sanatları"]},{"id":99,"name":"Mecha"},{"id":100,"name":"Medical"},{"id":101,"name":"Military","altNames":["militaire"]},{"id":102,"name":"Modern Setting"},{"id":103,"name":"Monster Girls"},{"id":104,"name":"Monsters","altNames":["monstres"]},{"id":105,"name":"Murim"},{"id":106,"name":"Music"},{"id":107,"name":"Mystery","altNames":["mystère"]},{"id":108,"name":"Ninja"},{"id":109,"name":"Office Workers"},{"id":110,"name":"Overpowered"},{"id":111,"name":"Parody"},{"id":112,"name":"Philosophical"},{"id":113,"name":"Police"},{"id":114,"name":"Post Apocalyptic","altNames":["apocalypse"]},{"id":115,"name":"Psychological","altNames":["psychologie"]},{"id":116,"name":"Reincarnation","altNames":["regression","rebirth","reincarnate","return","returned","returner","réincarnation","reenkarnasyon"]},{"id":117,"name":"Revenge","altNames":["vengeance"]},{"id":118,"name":"Reverse Harem"},{"id":119,"name":"Romance","altNames":["love","romantizm"]},{"id":120,"name":"Royalty"},{"id":121,"name":"Samurai"},{"id":122,"name":"School Life","altNames":["vie scolaire"]},{"id":123,"name":"Sci Fi"},{"id":124,"name":"Science Fiction"},{"id":125,"name":"Shota"},{"id":126,"name":"Slice of Life","altNames":["tranches de vie"]},{"id":127,"name":"Sports"},{"id":128,"name":"Superhero"},{"id":129,"name":"Supernatural","altNames":["surnaturel"]},{"id":130,"name":"Survival","altNames":["hayatta Kalma"]},{"id":131,"name":"System","altNames":["cheat system"]},{"id":132,"name":"Thriller"},{"id":133,"name":"Time Travel"},{"id":134,"name":"Traditional Games"},{"id":135,"name":"Tragedy","altNames":["tragédie","trajedi"]},{"id":136,"name":"Transmigration"},{"id":137,"name":"Vampires"},{"id":138,"name":"Video Games"},{"id":139,"name":"Villain"},{"id":140,"name":"Villainess"},{"id":141,"name":"Virtual Reality"},{"id":142,"name":"Webtoon"},{"id":143,"name":"Wuxia"},{"id":144,"name":"Yakuzas"},{"id":145,"name":"Zombies"}]