Full_Picture_Load_RuleDataB

Full_Picture_Load 規則B 需要依賴AllUtils、fn、 hr、 q、getTitle、jsonHooker

Acest script nu ar trebui instalat direct. Aceasta este o bibliotecă pentru alte scripturi care este inclusă prin directiva meta a // @require https://update.greasyfork.org/scripts/586083/1908029/Full_Picture_Load_RuleDataB.js

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Full_Picture_Load_RuleDataB
// @namespace    https://greasyfork.org/users/20361
// @version      2026.8.21
// @description  Full_Picture_Load 規則B 需要依賴AllUtils、fn、 hr、 q、getTitle、jsonHooker
// @author       德克斯DEX
// ==/UserScript==

const ruleDataB = (AllUtils, fn, hr, q, getTitle, jsonHooker) => {
	const debug = (str, obj = "", title = "debug") => console.log(`%c[Full Picture Load] ${title}:`, "color: #000;background-color: #C9FFC9;", str, obj);
	const delay = (time) => new Promise(resolve => setTimeout(resolve, time));

	const typeOf = (object) => Object.prototype.toString.call(object).replace("[object ", "").replace("]", "");
	const isString = (str) => typeOf(str) === "String";
	const isNumber = (num) => typeOf(num) === "Number" && !isArray(num) && String(Number(num)) !== "NaN" && num !== "" && num !== null && num !== undefined;
	const isArray = (arr) => typeOf(arr) === "Array";
	const isObject = (obj) => typeOf(obj) === "Object";
	const isArrayBuffer = b => typeOf(b) === "ArrayBuffer";
	const isFn = fn => typeOf(fn).endsWith("Function");
	const isEle = (e) => typeOf(e).endsWith("Element") || typeOf(e) === "DocumentFragment";

	const {
		Code,
		NextJS,
		island
	} = AllUtils;

	return [{
		name: "BEAUTYLEG 腿模",
		link: "http://www.beautyleg.com/photo/show.php?no=1",
		url: {
			h: "beautyleg.com",
			p: "/photo/show",
			s: "no="
		},
		box: [".table_all", 2, 1054],
		imgs: "a[href*='/album/']",
		thumbs: "a[href*='/album/'] img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".table_all"),
		next: () => `?no=${Number(fn.getUSP("no")) + 1}`,
		prev: () => `?no=${Number(fn.getUSP("no")) - 1}`,
		customTitle: () => {
			let [no, date] = q("tr span").texts;
			no = no.padStart(3, "0");
			date = date.replace(/\d+$/, "").trim();
			return `BEAUTYLEG 腿模(免費下載) No.${no} ${date}`;
		},
		category: "photo"
	}, {
		name: "KAI-YOU(カイユウ)",
		url: {
			h: "kai-you.net",
			p: "/article/",
			e: ".m-article-eyecatch-content-link,.m-article-images-main"
		},
		imgs: () => fn.clp("/images/") ? q(".m-article-images-main-swiper-slide-img") : hr.getImgA(".m-article-images-main-swiper-slide-img", [q(".m-article-eyecatch-content-link").url]),
		capture: true,
		videos: () => q("div.youtube[data-video]").map(e => e.dataset.video),
		customTitle: ".m-article-header-title,.m-article-image-title",
		category: "photo"
	}, {
		name: "cureco beta",
		url: {
			h: ["cureco.jp"],
			p: "/view/"
		},
		imgs: () => hr.getNP(".article_tweet:has(.triangle-border)", "#pager_box .next a", null, "#pager_box").then(() => q(".attach_image")),
		capture: true,
		customTitle: ".article_title",
		category: "photo"
	}, {
		name: "百度 NewsPage",
		reg: [
			/^https?:\/\/baijiahao\.baidu\.com\/s\?id=\d+$/,
			/^https?:\/\/mbd\.baidu\.com\/newspage\/data\/landingsuper\?context=/
		],
		init: () => fn.waitEle(["div[data-testid=article] img", "#header div"]),
		imgs: "div[data-testid=article] img",
		customTitle: "#header div",
		category: "photo"
	}, {
		name: "雅拉伊", //免VIP僅支援PC版和圖片命名是簡單數字遞增的。
		url: {
			h: ["www.yalayi.com"],
			p: "/gallery/"
		},
		imgs: async () => {
			await fn.waitEle(".bigimg>img");
			let [max] = q(".tishiwenzi-box").text.match(/\d+/);
			let img = q(".bigimg>img").one;
			let dir = fn.dir(img.dataset.original);
			let testArr = [dir + "1.jpg", dir + "01.jpg", dir + "001.jpg", dir + "0001.jpg"];
			let ok = false;
			let pad = 1;
			for (let [i, test] of testArr.entries()) {
				let obj = await fn.checkImgStatus(test);
				console.log(`確認圖片[${i}]`, obj);
				if (obj.ok) {
					ok = true;
					pad = i + 1;
					break;
				}
			}
			return ok ? [img.src, ...fn.arr(max, (v, i) => dir + String(i + 1).padStart(pad, "0") + ".jpg")] : [];
		},
		button: [4, 4],
		insertImg: [".bigimg", 2],
		customTitle: () => fn.title(" - ", 3),
		category: "nsfw1"
	}, {
		name: "24FA",
		host: ["www.24fa.com"],
		link: "https://www.24fa.com/c49.aspx",
		url: {
			t: "24FA",
			p: ".aspx",
			e: ["#content img", ".pager"]
		},
		init: "document.onkeydown=null",
		imgs: () => hr.getImgA("#content img", ".pager a:not([title])"),
		button: [4],
		insertImg: ["#content", 2],
		autoDownload: [0],
		next: ".prevNews>a",
		prev: ".nextNews>a",
		customTitle: "h1",
		hide: "body>ins,body>div:has(div[style]):has(div>a[target]):not([class])",
		category: "nsfw2"
	}, {
		name: "凸凹吧",
		host: ["www.tuao.cc", "www.tuaow.top", "www.24ao.cc", "www.nnao.cc"],
		url: {
			e: {
				s: ".top-nav>a",
				t: "凸凹吧"
			},
			p: "/Articles/Content/",
			e: "#imgData"
		},
		imgs: () => q("#imgData").one.value.split("|").map(atob),
		button: [4],
		insertImg: ["#pageContainer", 2],
		insertImgAF: () => fn.remove("#pagination"),
		customTitle: ".content-title",
		hide: "body>div:has(>div[style]>a>img),ins",
		headers: () => ({
			accept: "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"
		}),
		referer: "url",
		category: "nsfw2"
	}, {
		name: "美之图",
		host: ["kkmzt.com"],
		url: {
			t: "美之图",
			p: ["/photo/", "/beauty/"]
		},
		box: [".uk-article", 2],
		imgs: () => jsonHooker((text, parse, resolve) => {
			if ([".jpg", ".png", ".webp", ".avif", ".gif"].some(t => text.includes(t))) {
				resolve(parse(text));
			}
		}).then(arr => {
			let src = fn.src(".uk-inline>img");
			let dir = fn.dir(src);
			return arr.map(e => dir + e);
		}),
		button: [4],
		insertImg: ["box", 2],
		next: ".uk-text-bottom>a[rel=next]",
		prev: ".uk-text-bottom>a[rel=prev]",
		customTitle: "article>h1",
		category: "nsfw"
	}, {
		name: "Depvailon格式",
		url: {
			h: ["www.depvailon.com", "nungvl.net", "www.kaizty.com", "lootiu.com", "redseats.org", /dongojyousan\.com$/, "thismore.fun", "m.phimvuspot.com", "www.hunghang.com"],
			p: ["/gallery", "/articles/", "/photos/", "/view/", ".html", ".cfg"]
		},
		clearEvent: true,
		init: async () => {
			await fn.waitVar("jQuery");
			fn.run("jQuery(document).off() && jQuery('body').off()");
			fn.remove(".mobiletop,.ooo-icon-container");
		},
		box: [".contentme,.contentme2,.video-description", 2],
		imgs: async (s = ".contentme img,.contentme2 img,.video-description img") => {
			let srcs = fn.srcs(s);
			let pages = document.title.includes("| Page");
			if (pages) {
				let max = document.title.match(/\d+/g).at(-1);
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page=${i + 1}`);
				srcs = await hr.getImgA(s, links);
			}
			return fn.lh == "thismore.fun" ? srcs : fn.removeImageCDN(srcs);
		},
		button: [4],
		insertImg: [
			["box", 0, ".video-description,.contentme,.contentme2"], 2
		],
		customTitle: () => fn.dt({
			d: [
				/^[a-z-\s\.]+:/i,
				/\s\|\sPage[\s\/\d]+/,
				"NứngVL.net:",
				/Nude Chinese Model Uncensored Gallery[\s\d–]+/,
				" – Chinese Beauties",
				" – DVL",
				"| E-CUP"
			]
		}),
		fetch: 0,
		category: "nsfw2"
	}, {
		name: "Kutekorean.Com",
		url: {
			h: "nv.kutekorean.com",
			p: ".html",
			e: ["article.type-post", ".entry-content img", ".entry-title"]
		},
		imgs: async (s = ".entry-content img") => {
			let srcs = fn.srcs(s);
			let pages = document.title.includes("| Page");
			if (pages) {
				let max = document.title.match(/\d+/g).at(-1);
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page=${i + 1}`);
				return hr.getImgA(s, links).then(srcs => fn.removeImageCDN(srcs));
			}
			return srcs;
		},
		button: [4],
		insertImg: [".entry-content ", 2],
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: [
				/[\s\|]+Page[\s\d\/]+/,
				"E-CUP"
			]
		}),
		fetch: 0,
		category: "nsfw2"
	}, {
		name: "Hit-x-Hot",
		url: {
			h: "www.hitxhot.org",
			p: "/gallerys/"
		},
		clearEvent: true,
		imgs: () => {
			let links = [fn.lp, ...q("div[id^=post] a").urls];
			let pages = document.title.includes("| Page");
			if (pages) {
				let max = document.title.match(/\d+/g).at(-1);
				links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page=${i + 1}`);
			}
			if (!links.length) return [];
			return hr.getImgA(".VKSUBTSWA img", links).then(srcs => fn.removeImageCDN(srcs));
		},
		button: [4],
		insertImg: [".VKSUBTSWA", 2],
		insertImgAF: () => fn.remove(".pagination,h3+.HCRIN"),
		customTitle: () => fn.dt({
			t: fn.title(/^[a-z-\s\.I]+:/i).split("|")[0].trim(),
			d: " - 1.jpg"
		}),
		fetch: 0,
		category: "nsfw2"
	}, {
		name: "我为人人",
		host: ["2048.info", "2048.cc"],
		url: {
			t: "人人",
			p: "/read.php",
			s: "tid=",
			e: "#read_tpc img"
		},
		imgs: () => q("#read_tpc img"),
		capture: true,
		box: ["div:not([id]):has(>form[name=delatc]),form[name=delatc]", 1],
		button: [4],
		insertImg: ["box", 2],
		next: ".pages .fn",
		prev: ".pages a:not(.fn)",
		customTitle: "#subject_tpc",
		hide: ".recs-wrapper,.nav-container",
		category: "nsfw2"
	}, {
		name: "4096社区/色花堂",
		host: ["www.4096bbs.com", "4096bbs.com", "sehuatang.org"],
		url: (e = "img[zoomfile],img[id^='aimg'],.message img") => fn.checkUrl({
			t: ["4096", "98堂", "色花堂"],
			p: "/thread",
			e
		}) || fn.checkUrl({
			t: ["4096", "98堂", "色花堂"],
			s: "viewthread",
			e
		}),
		imgs: () => q("img[zoomfile],img[id^='aimg'],.message img"),
		capture: true,
		box: ["#postlist,.viewthread,div[id^=post],.n5_bbsnrbt+.plc", 1],
		button: [4],
		insertImg: ["box", 2],
		customTitle: "#thread_subject,.view_tit,.n5_bbsnrbt",
		category: "nsfw2"
	}, {
		name: "秀人网",
		url: {
			e: [{
				s: [".index_bottom_text", ".piclist_bottom_container"],
				t: ["xiuren.info", "xrw.info"]
			}, "img[alt=图片][title=图片]+span", "img[src*='cover.jpg']", "#content img", "#NoLogin"],
			p: "piclist",
			s: "id="
		},
		imgs: () => {
			let max = Number(q("img[alt=图片][title=图片]+span").text);
			let src = fn.src("#content img:not(#cover)");
			let dir = fn.dir(src);
			let id = dir.split("/").at(-2);
			let srcs = [dir + "cover.jpg"];
			if (max > 99) {
				max = 99;
			}
			for (let i = 1; i <= max; i++) {
				src = dir + id + String(i).padStart(2, "0") + ".jpg";
				srcs.push(src);
			}
			return srcs;
		},
		capture: true,
		customTitle: ".Ptitle,.piclist_box",
		category: "nsfw1"
	}, {
		name: "美图乐",
		host: ["www.meitule.com", "www.meitule.net", "www.meitulu.cc", "www.meitu123.org"],
		url: {
			t: "美图乐",
			p: "/photo/",
			e: ".content img"
		},
		imgs: () => hr.getImgO(".content img", ".page-link", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: "h1.h5",
		hide: "#dtag>center,#divpsg,.tujia,.list-album>li:nth-child(n+1):nth-child(-n+2)",
		category: "nsfw1"
	}, {
		name: "尤美图库/M5MM",
		host: ["www.umeitu.com", "www.m5mm.com"],
		url: {
			h: /umeitu\.com$|m5mm\.com$/,
			p: ["/img/", "/photo/"]
		},
		imgs: () => hr.getImg(".vipimglist img", ".stitle>h1>span", 9),
		button: [4],
		insertImg: [".vipimglist", 2],
		customTitle: () => fn.dt({
			d: [
				" - 尤美图库",
				" - M5MM"
			]
		}),
		css: ".vipimglist img{min-height:unset!important;}",
		hide: "union[id],.sb.list2>li:nth-child(n+2):nth-child(-n+3)",
		category: "nsfw1"
	}, {
		name: "秀窝/RMM吧/赞MM格式",
		url: {
			e: ["#showimg img", "//p[contains(text(),'图片数量') or contains(text(),'圖片數量')]"],
			p: ".html"
		},
		init: () => fn.clearAllTimer(),
		imgs: () => hr.getImgO("#showimg img", q("//p[contains(text(),'图片数量') or contains(text(),'圖片數量')]").text.match(/\d+/)[0], 9),
		button: [4],
		insertImg: ["#showimg", 2],
		customTitle: ".weizhi h1",
		referer: "",
		mcss: ".content img{max-width:100%!important}",
		category: "nsfw1"
	}, {
		name: "魅影图库",
		host: ["www.xxtu.org", "xxtu.org"],
		url: {
			t: "魅影图库",
			s: "p="
		},
		imgs: ".entry-content img",
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: ".article-nav-prev a",
		prev: ".article-nav-next a",
		customTitle: ".entry-title",
		hide: ".ripro_gg_wrap",
		category: "nsfw2"
	}, {
		name: "MOMO图库",
		host: ["mo8.org"],
		url: {
			t: "MOMO图库"
		},
		srcset: ".entry-content img[srcset],.entry-content .wp-block-image img",
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: ".nav-previous a",
		prev: ".nav-next a",
		customTitle: ".entry-title",
		hide: "a.show,a.show~*:not([id^=Full],[class^=fancybox],.viewer-container)",
		category: "nsfw1"
	}, {
		name: "写真门",
		host: ["xzm3096.com"],
		url: {
			t: "写真门",
			e: [".logo a[title$=写真门]", ".article-content img[src*='/cover.'],.article-content img[src*='/0001.']"]
		},
		imgs: async () => {
			let title = q("h1.article-title").text;
			let t_num = title.match(/\[(\d+)P\]/)?.at(1);
			let g_num
			if (!t_num) {
				g_num = prompt("请输入图片总数", 100);
			}
			let src = fn.src(".article-content img");
			let dir = fn.dir(src);
			let ex = src.split(".").at(-1);
			let srcs = src.includes("/cover.") ? [src] : [];
			for (let i = 1, n = Number(t_num || g_num); i <= n; i++) {
				src = dir + String(i).padStart(4, "0") + "." + ex;
				srcs.push(src);
			}
			fn.showMsg("hr.xhrHEAD(test)");
			let status = await hr.xhrHEAD(srcs.at(-1)).then(res => res.status);
			if (status != 200) {
				srcs = srcs.slice(0, -1);
			}
			return srcs;
		},
		repeat: 1,
		customTitle: "h1.article-title",
		category: "nsfw1"
	}, {
		name: "秀人集",
		host: ["3w.8012359.xyz"],
		url: {
			e: "//div[@class='item_info']//a[text()='秀人集']",
			p: /\/\w+\/\d+\.html$/
		},
		init: () => q(".page").remove(0),
		imgs: () => hr.getImg(".content>p img", ".page a", 3, 100),
		button: [4],
		insertImg: ["//div[p[img]]", 2],
		autoDownload: [0],
		next: "//span[contains(text(),'下一篇')]/a[contains(@href,'html')]",
		prev: "//span[contains(text(),'上一篇')]/a[contains(@href,'html')]",
		customTitle: ".item_title>h1",
		fetch: 0,
		hide: ".content br",
		category: "nsfw1"
	}, {
		name: "秀人美女網",
		host: ["www.xiu01.top"],
		url: {
			e: "//div[@class='single-cat']/a[text()='秀人美女网']",
			p: /\/\w+\/\d+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".content p img[alt]", ".page a", 3, 100),
		button: [4],
		insertImg: ["//div[p[img[@alt]]]", 2],
		autoDownload: [0],
		next: "//span[contains(text(),'下一篇')]/a[contains(@href,'html')]",
		prev: "//span[contains(text(),'上一篇')]/a[contains(@href,'html')]",
		customTitle: ".item_title>h1",
		fetch: 0,
		hide: ".item_info>a,p[align='center']:has(>img),.item_title>div[id],.item_title>a,.content br,.bottom_fixed,.update_area_lists>div[id]",
		category: "nsfw1"
	}, {
		name: "爱美女网",
		host: ["a1.imn1.vip"],
		url: {
			e: "//section[@class='container']//a[text()='爱美女网']",
			p: /\/\w+\/\w+\.html$/
		},
		imgs: () => hr.getImg(".imgwebp p img[alt]", ".page a", 3, 100),
		button: [4],
		insertImg: ["//div[p[img[@alt]]]", 2],
		autoDownload: [0],
		next: "//span/b[contains(text(),'下一篇')]/a[contains(@href,'html')]",
		prev: "//span/b[contains(text(),'上一篇')]/a[contains(@href,'html')]",
		customTitle: ".focusbox h1+div",
		fetch: 0,
		hide: ".imgwebp br,img[src*='zz2.gif'],p:has(>a[title][alt]>img)",
		category: "nsfw1"
	}, {
		name: "爱看美女网",
		host: ["www.ik001.top"],
		url: {
			e: ["//i[@class='iconfont icon-shouye']/following-sibling::a[text()='爱看美女网']", ".info-pagebar>a"],
			p: /^\/\w+\/\d+\.html$/
		},
		init: () => q(".pagebar").remove(0),
		imgs: () => hr.getImg(".info-imtg-box img[alt]", ".pagebar>*", 3, 100),
		button: [4],
		insertImg: ["//p[img[@alt]]", 2],
		autoDownload: [0],
		next: ".info-next li:last-child a",
		prev: ".info-next li:first-child a",
		customTitle: "h1",
		fetch: 0,
		category: "nsfw1"
	}, {
		name: "美人图",
		url: {
			h: "meirentu",
			p: /\/pic\/\d+\.html$/
		},
		imgs: () => hr.getImg(".content_left img[alt]", ".page a", 5),
		button: [4],
		insertImg: [".content_left", 2],
		autoDownload: [0],
		next: "//span[contains(text(),'下一篇')]/a[contains(@href,'html')]",
		prev: "//span[contains(text(),'上一篇')]/a[contains(@href,'html')]",
		customTitle: ".item_title>h1",
		hide: "img[alt]~br",
		category: "nsfw1"
	}, {
		name: "高清图片吧/高清写真",
		host: ["pic8.cc", "www.pic882.cc", "ka123.cc", "www.ka1235.cc"],
		url: {
			h: /^www\.(pic|ka)\d+\.cc$/,
			p: /^\/\w+\/\d+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".content img", "#page>a,.page>*", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: "//div[@class='Title111']/h3[not(a)] | //div[@class='Title111']/h9[not(a)]",
		hide: ".center:has(>.dibu1),.center:has(>.dibu2),[class^=pgg],#gotop~*",
		category: "nsfw1"
	}, {
		name: "美女写真网/美女图片网",
		host: ["ku137.com", "www.ku1373.cc", "ku66.cc", "www.ku6663.cc"],
		url: {
			h: /^www\.ku\d+\.cc$/,
			p: /^\/\w+\/\d+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".content img", ".page>a,.NewPages a", 9),
		button: [4],
		insertImg: [".content,.image-content", 2],
		autoDownload: [0],
		next: "//p[@class='BlueF'][text()='上一篇:']/a",
		prev: "//p[@class='BlueF'][text()='下一篇:']/a",
		customTitle: () => q(".position").text.replaceAll("\n", "").replace(/\s+/g, " ").replace("浏览", " ").split(">").at(-1),
		hide: ".center:has(>.dibu1),.center:has(>.dibu2),.link2,.dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "美女写真网",
		host: ["abc963.cc", "www.abc9632.cc"],
		url: {
			h: /^www\.abc\d+\.cc$/,
			p: /^\/\w+\/\d+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".image-content img", ".pagination a", 9),
		button: [4],
		insertImg: [".image-content", 2],
		customTitle: () => q(".position").text.replaceAll("\n", "").replace(/\s+/g, " ").replace("浏览", " ").split(">").at(-1),
		hide: ".dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "美女图库",
		host: ["www.kan664.cc"],
		url: {
			t: "kan6.cc",
			p: "/pp/"
		},
		imgs: () => hr.getImg(".content img", ".pages a", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: "div:has(>.pic-info)>h1",
		hide: ".link2,.dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "美女图库",
		host: ["wa123.cc", "app123.cc", "www.wa1237.cc"],
		url: {
			t: "美女图库",
			p: "/wa/"
		},
		imgs: () => hr.getImg(".content img", "#pageNum a", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: "#nav~div h1:not(:has(a))",
		hide: ".link2,.dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "多图网/七图吧",
		host: ["www.duotu1231.cc", "7tuba.com", "www.773tuba.cc"],
		url: {
			t: ["duotu123.com", "七图吧"],
			p: ["/mm/", "/html/"]
		},
		imgs: () => hr.getImg(".content img", "#pages a", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: ".header~div h1:not(:has(a)),.top~div h1",
		hide: ".link2,.dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "美女图片网",
		host: ["www.tu96334.cc"],
		url: {
			t: "tu963.com",
			p: "/y/"
		},
		imgs: () => hr.getImg(".content img", ".articleV4Page a", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: ".articleV4Tit",
		hide: ".dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "大图吧",
		host: ["da123.cc", "www.da1232.cc"],
		url: {
			t: "大图吧",
			p: "/to/",
			e: ".breadcrumb"
		},
		imgs: () => hr.getImg(".content img", ".pages a", 9),
		button: [4],
		insertImg: [".content", 2],
		customTitle: ".Title111>h9",
		hide: ".link2,.dibu1,.dibu2",
		category: "nsfw1"
	}, {
		name: "高清图片吧M/美女写真网M/美女图片网M/高清写真M/美女图库M/多图网M/大图吧M/七图吧M",
		host: ["m.pic882.cc", "m.ku1373.cc", "m.ku6663.cc", "m.tu96334.cc", "m.ka1235.cc", "m.kan664.cc", "m.wa1237.cc", "m.duotu1231.cc", "m.da1232.cc", "m.abc9632.cc", "m.773tuba.cc"],
		url: {
			h: /^m\.(pic|ku|ka|kan|tu|wa|duotu|da|abc)\d+\.cc$|^m\.\d+tuba\.cc$/,
			p: /^\/\w+\/\d+\/\d+\.html$/
		},
		box: [".PsBox,.tuji", 2],
		imgs: ".ArticleImageBox>img",
		button: [4],
		insertImg: [
			["box", 0, ".ArticleImageBox,.m_adv,.m_kanp,.m_ku66,.m_ka123,.m_kan6,.m_ku137,.m_tu963,.m_pic8,.m_wa123,.m_duotu123,.m_da123,.m_abc963,.m_tutuba"], 2
		],
		customTitle: ".PsBox,.tuji>.weizhi",
		hide: ".m_adv,.m_kanp,.m_ku66,.m_ka123,.m_ku137,.m_kan6,.m_tu963,.m_pic8,.m_wa123,.m_duotu123,.m_da123,.m_abc963,.m_tutuba",
		category: "nsfw1"
	}, {
		name: "美女目录网",
		url: {
			h: ["www.girldir.com"],
			p: "/book/",
			e: ".view-photo"
		},
		imgs: () => {
			let [total] = q(".base-info li").text.match(/\d+/);
			let pages = Math.ceil(total / 10);
			if (pages > 1) {
				let links = fn.arr(pages, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page=${i + 1}`);
				return hr.getImgA(".view-photo img", links, 600);
			}
			return q(".view-photo img").all;
		},
		button: [4],
		insertImg: ["#vueRender", 2],
		customTitle: ".book-title a",
		category: "nsfw1"
	}, {
		name: "ROSI写真",
		url: {
			h: "rosipic.com",
			p: /^\/rosi\/\d+\.html$/,
			e: "a.spotlight"
		},
		imgs: () => q("a.spotlight").urls.map(u => u.replace("https://wsrv.nl/?url=", "").replace(/&blur=\d+/, "")),
		button: [4],
		insertImg: [
			["#waterfall-container", 2], 2
		],
		category: "nsfw1"
	}, {
		name: "ROSI美女写真",
		host: ["www.365mm.cc", "www.rosi318.cc", "www.rosipro.cc"],
		url: {
			e: "//header[@class='header']//h1[@class='logo']//span[starts-with(text(),'ROSI')]",
			p: /^\/\w+\/\w+\.html$/,
			ee: "//span/a[text()='ROSI视频']"
		},
		init: () => {
			q(".pagination2").remove(0);
			fn.remove(".content>b,.content>br,.asst");
		},
		imgs: () => hr.getImg(".article-content img", "[class^=pagination] a", 9),
		button: [4],
		insertImg: [".article-content", 2],
		autoDownload: [0],
		next: ".article-nav-prev>a",
		prev: ".article-nav-next>.a",
		customTitle: ".article-title",
		category: "nsfw1"
	}, {
		name: "ROSI小莉最新写真",
		host: ["www.rosimm.top"],
		url: {
			t: "ROSI小莉写真官网",
			p: /^\/html\/\d+$/
		},
		imgs: () => hr.getImgA("article img", ".page-links a"),
		button: [4],
		insertImg: ["article.post", 2],
		autoDownload: [0],
		next: ".nav-previous>a",
		prev: ".nav-next>a",
		customTitle: "h1.entry-title",
		category: "nsfw1"
	}, {
		name: "闺秀网",
		url: {
			h: ["www.guixiu.org", "guixiu.org"],
			p: "/post/"
		},
		imgs: () => hr.getImgA("#lightgallery img", "#ipage a[href*=ipage]"),
		button: [4],
		insertImg: ["#lightgallery", 2],
		customTitle: ".focusbox-title",
		category: "nsfw1"
	}, {
		name: "爱图门",
		url: {
			h: ["aitu.men"],
			p: ".html",
			e: ".context img"
		},
		imgs: () => hr.getNP(".context img", ".pagelist span+a", null, ".pagelist"),
		button: [4],
		insertImg: [".context", 1],
		autoDownload: [0],
		next: ".post-previous a",
		prev: ".post-next a",
		customTitle: "#content h1",
		category: "nsfw1"
	}, {
		name: "K55",
		link: "https://k55.net/arttype/2.html",
		url: {
			h: ["k55.net"],
			p: "/artdetail-",
			e: ".photo_box",
		},
		imgs: () => q(".photo_box img").currentSrcs,
		sort: true,
		button: [4],
		insertImg: [".photo_box", 2],
		autoDownload: [0],
		next: ".item_prev_next>.item_right>a",
		prev: ".item_prev_next>.item_left>a",
		customTitle: () => fn.dt({
			s: ".title-box>.h3-md.mb-1",
			d: /\[\d+P\].+$/i
		}),
		category: "nsfw1"
	}, {
		name: "秀人网图集",
		host: ["www.aisxiuren.com"],
		url: {
			e: ".site .logo-wrapper img.logo.tap-logo[alt='XiuRen秀人网']",
			p: /^\/\d+\.html/
		},
		exclude: "//button[contains(text(),'登录购买')]",
		imgs: () => hr.getImgA("a[data-fancybox],.entry-content img", ".fenye a"),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: ".article-nav-prev a",
		prev: ".article-nav-next a",
		customTitle: ".entry-title",
		fancybox: {
			v: 3,
			css: false
		},
		observerClick: [".swal2-close", ".ht-n-close-toggle"],
		css: ".navbar .nav-list>.menu-item>a{line-height:20px;margin:0 6px}",
		category: "nsfw1"
	}, {
		name: "秀人网图集",
		url: {
			e: ".site .logo-wrapper img.logo.tap-logo[alt='XiuRen秀人网']",
		},
		observerClick: [".swal2-close", ".ht-n-close-toggle"],
		css: ".navbar .nav-list>.menu-item>a{line-height:20px;margin:0 6px}",
		category: "ad"
	}, {
		name: "牛C網",
		url: {
			//h: ["rulel.com"],
			t: "NIUC.NET",
			p: /^\/\d+\.html$/,
			e: "i.czs-folder-l+a:text:写真|寫真|photo|뷰티포토|Photo|Foto|Cosplay|角色扮演|코스프레|コスプレ|PHOTO|相片|사진|FOTO"
		},
		imgs: () => q(".content-warp img").filter(e => !e.closest("a[href*=android],a[href*=mypikpak],a[href$='app.html'],a[href*='/t.me/']") && !e.src.includes("/svg")),
		button: [4],
		insertImgBF: () => fn.sm4().then(() => fn.waitEle("a.core-next-img").then(() => fn.hm())),
		insertImg: [".content-warp", 2],
		autoDownload: [0],
		next: ".card-item-img a:text:上一|prev|Prev|이전|前の|précédent|vorherigen|precedente",
		prev: ".card-item-img a:text:下一|next|Next|다음|次の|suivant|Nächster|Prossimo",
		customTitle: ".post-title",
		mcss: ".post-warp .content-warp{padding:0px}",
		category: "nsfw2"
	}, {
		name: "8E资源站",
		host: ["8ezy.com"],
		url: {
			e: [".logo>a[title='8EZY']", "h1.article-title"]
		},
		imgs: ".article-content p>img",
		videos: "video>source",
		button: [4],
		insertImg: [".article-content", 2],
		customTitle: () => fn.dt({
			s: "h1.article-title",
			d: [
				"【在线观看】-",
				/\d+p(\d+v)?$|\(\d+[\w\s\.\+-]+\)|\[\d+[\w\s\.\+-]+\]|“\d+ photos.*/i
			]
		}),
		downloadVideo: true,
		category: "nsfw2"
	}, {
		name: "MissKon",
		host: ["misskon.us"],
		url: {
			t: "MissKon",
			p: "/albums/"
		},
		box: ["div[x-data^=photoViewer]>.space-y-3", 1],
		imgs: () => {
			let getImageUrls = (code) => {
				let a = code.indexOf("JSON.parse");
				let b = code.indexOf(")", a) + 1;
				code = code.slice(a, b);
				return fn.run(code).map(e => e.image_url);
			};
			let max = fn.um("nav:has(a[rel=next]) a");
			let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page=${i + 1}`);
			return hr.getEle(links, "#main-content div[x-data^=photoViewer]").then(eles => q(eles).attrs("x-data").map(getImageUrls));
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: {
			remove: "div[x-data^=photoViewer]>.space-y-3,div[x-data^=photoViewer]>nav[aria-label]"
		},
		customTitle: ["nav>ol>li>a,nav>ol>li[class]", -2, -1],
		category: "nsfw2"
	}, {
		name: "秀图网",
		url: {
			h: "www.xiutu.me",
			p: "/photo/"
		},
		box: ["article>p:last-of-type", 2],
		imgs: () => hr.getImg(".post-content img", ".current~a", "4"),
		button: [4],
		insertImg: [
			["box", 0, "article>p"], 2
		],
		customTitle: ".post-title",
		category: "nsfw1"
	}, {
		name: "优美图录",
		url: {
			h: ["www.umei.net", "umei.net"],
			p: ".html",
			e: ".image_div img"
		},
		imgs: () => hr.getImgO(".image_div img", ".item_info span", 9, 200, ".nav-links"),
		button: [4],
		insertImg: [".image_div", 2],
		customTitle: ".item_title>h1",
		css: ".content_left img,.image_div a img{cursor:unset}",
		hide: ".affs,.xg_content>li:nth-child(n+1):nth-child(-n+2)",
		category: "nsfw1"
	}, {
		name: "Xiutaku/Kiutaku",
		url: {
			h: ["xiutaku.com", "kiutaku.com"],
			p: /^\/\d+$/
		},
		init: () => fn.remove(".search-form~*,.blog~*:not([class]),.pagination~*:not([class]):not(hr),.article.content~*:not([class]):not(hr),.bottom-articles~*"),
		imgs: () => hr.getImg(".article-fulltext img", ".pagination-list a"),
		button: [4],
		insertImg: [".article-fulltext", 2],
		customTitle: () => fn.dt({
			s: ".article-header>h1",
			d: /([\s-]+)?.Mitaku.*/i
		}),
		category: "nsfw1"
	}, {
		name: "美图社",
		host: ["www.928r.com", "www.060k.com", "ssleg.top"],
		url: {
			t: ["美图社", "花瓣美女", "美图鉴"],
			p: /^\/\w+\/\d+\.html$/
		},
		imgs: () => {
			let url = q("//a[text()='显示全文']").url;
			if (!url) {
				return q("#lightgallery img").all;
			}
			fn.sm5();
			return hr.fetchDoc(url).then(dom => q("#lightgallery img", dom).all);
		},
		button: [4],
		insertImg: ["#lightgallery", 2],
		autoDownload: [0],
		next: ".prev>a",
		prev: ".next>a",
		customTitle: ".focusbox-title",
		category: "nsfw1"
	}, {
		name: "桃花社",
		host: ["www.iiblog.live", "taohua.iiblog.live"],
		url: {
			t: "桃花社",
			p: "/thread/"
		},
		box: ["div:has(>p>img)", 1],
		imgs: ".entry-title~div img",
		button: [4],
		insertImg: [
			["box", 0, "div:has(>p>img)"], 2
		],
		customTitle: () => fn.dt({
			s: ".entry-title",
			r: [
				["|", " - "]
			]
		}),
		category: "nsfw1"
	}, {
		name: "91性感美女",
		url: {
			h: ["www.913wen.com", "913wen.com"],
			p: ["/mm/", "/p/"]
		},
		imgs: () => hr.getImg(".sg_img img", ".current~a", 9),
		button: [4],
		insertImg: [".sg_img", 2],
		customTitle: "h1",
		css: ".sg_img img{min-height:unset!important}",
		hide: "#divpsg,.tujia",
		category: "nsfw1"
	}, {
		name: "柠檬皮",
		url: {
			h: "www.emonl.com",
			p: ".html"
		},
		imgs: () => hr.getNP(".single-content>*", ".page-links span.current+a:has(.next-page)", null, ".page-links").then(() => fn.hideEle(".page-links")).then(() => q(".single-content img")),
		capture: true,
		customTitle: () => fn.dt({
			d: " | 檸檬皮"
		}),
		category: "nsfw1"
	}, {
		name: "美女私房菜",
		host: ["ozv.me"],
		url: {
			t: "美女私房菜",
			p: ".html"
		},
		init: () => fn.clearAllTimer(3),
		imgs: "img.swiper-lazy",
		customTitle: () => fn.title(" - 美女私房菜"),
		category: "nsfw1"
	}, {
		name: "美桌",
		link: "http://www.win4000.com/meitu.html",
		url: {
			h: "www.win4000.com",
			p: /^\/meinv\d+\.html$/
		},
		imgs: () => hr.getImgA(".pic-large", "#scroll>li:not(.current)>a", 200),
		button: [4],
		insertImg: ["#pic-meinv,.pic-meinv", 2],
		autoDownload: [0],
		next: ".group-next>a",
		prev: ".group-prev>a",
		customTitle: ".ptitle>h1",
		category: "nsfw1"
	}, {
		name: "MM1311",
		url: {
			h: ["www.mm1311.net", "m.mm1311.net"],
			p: /^\/\w+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".content-pic img,.post-content img", ".page-ch:first-child,.fenye>.rw", 9),
		button: [4],
		insertImg: [".content-pic,.post-content", 2],
		autoDownload: [0],
		next: ".updown_r",
		prev: ".updown_l",
		customTitle: ".content>h5,.mm-title",
		hide: "union",
		category: "nsfw1"
	}, {
		name: "656G精品套图/秀人妹子图",
		url: {
			h: ["www.656g.com", "m.656g.com", "www.mmww.cc", "mmww.cc"],
			p: "/tid/"
		},
		imgs: () => hr.getImgO(".imgg img", ".i1", 9),
		button: [4],
		insertImg: [".imgg", 2],
		customTitle: ".c-tt>h1",
		category: "nsfw1"
	}, {
		name: "MM1314美女",
		url: {
			h: "mm1314.cc",
			p: "/p/"
		},
		imgs: () => hr.getImg(".content img", ".page-link", 9),
		button: [4],
		insertImg: [".content", 2],
		autoDownload: [0],
		next: "//span[@class='htag'][text()='上一篇:']/a[not(@href='/p/')]",
		prev: 1,
		customTitle: ".item_title>h1",
		category: "nsfw1"
	}, {
		name: "青年美圖",
		host: ["jrants.com"],
		reg: [
			/^https?:\/\/(\w+\.)?jrants\.com\/\d+\.html$/,
			/^https:\/\/\w+\.jrants\.com\/[^\/]+\/$/
		],
		imgs: () => hr.getImg(".entry-content img", ".page-links>a", 7),
		button: [4],
		insertImg: [".entry-content", 1],
		autoDownload: [0],
		next: "span.prev>a",
		prev: "span.next>a",
		customTitle: ".entry-title",
		hide: ".code-block",
		category: "nsfw2"
	}, {
		name: "CosBlay/風流雜誌/虹圖/FullMei",
		url: {
			h: [/cosblay\.com$/, /trendszine\.com$/, /\.hongimg\.com/, "www.fullmei.com"],
			p: /\.html$|^\/[^/]+\/$/,
			e: ".entry-content img"
		},
		imgs: () => hr.getImg(".entry-content img", ".current~a", 7),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "span.prev>a",
		prev: "span.next>a",
		customTitle: ".entry-title,#main h1.gb-headline",
		mcss: ".separate-containers .inside-article,.separate-containers .comments-area,.separate-containers .page-header,.separate-containers .paging-navigation,.one-container .site-content,.inside-page-header{padding:2px}.entry-content:not(:first-child),.entry-summary:not(:first-child),.page-content:not(:first-child){margin-top:2px}",
		hide: ".code-block",
		category: "nsfw2"
	}, {
		name: "三千图片网",
		link: "https://www.win3000.com/tags/xingganmeinv/",
		url: {
			h: "www.win3000.com",
			p: ".html",
			e: ".pic-cont img"
		},
		imgs: () => {
			let [max] = q(".title>span").text.match(/\d+$/);
			let links = fn.arr(max, (v, i) => fn.lp.replace(".html", "") + "_" + (i + 1) + ".html");
			return hr.getImgA(".pic-cont img", links, 2);
		},
		button: [4],
		insertImg: [".pic-cont", 2],
		autoDownload: [0],
		next: "a.other-group.fr",
		prev: "a.other-group.fl",
		customTitle: ".title>h1",
		category: "nsfw1"
	}, {
		name: "三千图片网M",
		link: "https://m.win3000.com/tags/xingganmeinv/",
		url: {
			h: "m.win3000.com",
			p: ".html",
			e: [".show-page>i", ".pic-showbox .imgbox img"]
		},
		imgs: () => {
			let max = q(".show-page>i").text;
			let links = fn.arr(max, (v, i) => fn.lp.replace(".html", "") + "_" + (i + 1) + ".html");
			return hr.getImgA(".pic-showbox .imgbox img", links, 2);
		},
		button: [4],
		insertImg: [".pic-showbox", 2],
		autoDownload: [0],
		next: "a.page-next",
		prev: "a.page-prev",
		customTitle: ".pic-infobox h1",
		css: "#app{font-size:14px!important}",
		category: "nsfw1"
	}, {
		name: "3G 壁纸",
		host: ["www.3gbizhi.com", "m.3gbizhi.com"],
		link: "https://www.3gbizhi.com/meinv",
		reg: /^https?:\/\/(www|m|desk)\.3gbizhi\.com\/meinv\/(\w+\/)?\w+\.html$/,
		imgs: () => {
			let links = q(".showImglistw a").map(a => a.pathname);
			return hr.getImgA("#contpic,#mobile_c_img>img", links);
		},
		thums: ".showImglistw img",
		button: [4],
		insertImg: ["#showimg", 1],
		endColor: "white",
		autoDownload: [0],
		next: "a.next-page[href$=html]",
		prev: "a.prev-page[href$=html]",
		customTitle: "h2.title,.titlew>h2",
		hide: "[class^=ad_id]",
		category: "nsfw1"
	}, {
		name: "亿图全景图库",
		host: ["www.yeitu.com", "m.yeitu.com"],
		link: "https://www.yeitu.com/meinv/",
		reg: /^https?:\/\/(www|m)\.yeitu\.com\/\w+\/\w+\/\w+\.html$/,
		init: () => {
			let a = q(".article-body>a,.gallery-item>a").one;
			if (a) a.outerHTML = a.innerHTML;
		},
		imgs: () => {
			let max = q(".imageset-sum,span.num").maxNum || 1;
			let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : fn.lp.replace(".html", "") + "_" + (i + 1) + ".html");
			return hr.getImgA(".img_box img[alt],.gallery-item img[alt],.article-show img", links, 2);
		},
		button: [4],
		insertImg: [".img_box,.gallery-item,.article-show", 2],
		customTitle: "#title>h1,h1.article-title,.article-info>h1",
		hide: ".appbox,.uk-page~section,.yt-pages+.mssp",
		category: "nsfw1"
	}, {
		name: "MEITU131",
		host: ["www.meitu131.com", "m.meitu131.com"],
		link: "https://www.meitu131.com/nvshen/,https://www.meitu131.com/jigou/",
		reg: /^https?:\/\/(www|m)\.meitu131\.(com|net)\/(\w+\/)?meinv\/\d+\//,
		imgs: () => hr.getImgO(".work-content img,.uk-article-bd img", "a[title=Page],.uk-page>span", 15),
		button: [4],
		insertImg: [".work-content>p,.uk-article-bd", 1],
		customTitle: ".contitle-box>h1,h1.uk-article-title",
		css: ".work-content img{max-width:100%!important}",
		hide: ".appbox,.uk-page~section",
		category: "nsfw1"
	}, {
		name: "爱套图",
		url: {
			h: ["www.aitaotu.cc", "aitaotu.cc", "www.2taotu.cc", "2taotu.cc"],
			p: "/photo/"
		},
		box: [".uk-inline", 2],
		imgs: () => hr.getImg(".uk-article img", ".current~a", 9),
		button: [4],
		insertImg: [
			["box", 0, "figure.uk-inline"], 2
		],
		next: ".m-prevnext a",
		customTitle: ".uk-article-title",
		hide: "union[id]",
		category: "nsfw1"
	}, {
		name: "和邪社",
		url: {
			h: "www.hexieshe.com",
			p: /^\/\d+\/$/
		},
		init: () => hr.getNP("#content-innerText>p", "span.current+a", null, ".post-links"),
		imgs: "#content-innerText img",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: "为您朗读"
		}),
		setFancybox: true,
		category: "nsfw1"
	}, {
		name: "爱美女",
		url: {
			h: "www.92meinv.com",
			p: "/article-",
			e: ".pp.hh img[alt],#image_div img"
		},
		imgs: () => {
			let max = q(".des>h1,.post_title_topimg").maxNum || 1;
			let links = fn.arr(max, (v, i) => fn.lp.replace(/\.html$/, "") + "-" + (i + 1) + ".html");
			return hr.getImgA(".pp.hh img[alt],#image_div img", links, 200);
		},
		button: [4],
		insertImg: [".pp.hh,.content", 2],
		autoDownload: [0],
		next: "//a[@class='active' and contains(text(),'下一篇')] | //a[@class='active' and contains(text(),'下一组')]",
		prev: "//a[@class='active' and contains(text(),'上一篇')] | //a[@class='active' and contains(text(),'上一组')]",
		css: ".pp img{max-width:100%!important}",
		customTitle: () => fn.title("_", 1),
		category: "nsfw1"
	}, {
		name: "爱美女M",
		url: {
			h: "m.92meinv.com",
			p: "/article-",
			e: ".arcmain img,#image_div img"
		},
		imgs: () => {
			let max = q(".article-page>*").maxNum || 1;
			let links = fn.arr(max, (v, i) => fn.lp.replace(/\.html$/, "") + "-" + (i + 1) + ".html");
			return hr.getImgA(".arcmain img,#image_div img", links, 200);
		},
		button: [4],
		insertImg: [".clearfix.arcmain,.content", 1],
		autoDownload: [0],
		next: "a.f-r.l3",
		prev: "a.f-l.l2",
		hide: "body>a",
		customTitle: () => fn.title("_", 1),
		category: "nsfw1"
	}, {
		name: "XiuRenBox",
		url: {
			h: "www.xiurenbox.com",
			p: /\/\d+\/$/
		},
		box: [".entry-content .wp-block-image", 1],
		imgs: () => hr.getImgA(".entry-content .wp-block-image img", [fn.lp + "?showall=1"]),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".wp-block-image,.simple-page-nav"),
		autoDownload: [0],
		next: "a[href][rel=prev]",
		prev: "a[href][rel=next]",
		customTitle: "#post-title",
		category: "nsfw1"
	}, {
		name: "4Kgirl",
		url: {
			h: "www.4kgirl.com",
			e: "#post-title"
		},
		box: [".entry-content .wp-block-image", 1],
		imgs: () => hr.getImg(".wp-block-image img", ".current~a", 4),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".wp-block-image,.child-page-nav"),
		autoDownload: [0],
		next: "//a[div[span[text()='Previous']]][@href]",
		prev: "//a[div[span[text()='Next']]][@href]",
		customTitle: () => fn.dt({
			s: "#post-title",
			d: "– 4kgirl"
		}),
		category: "nsfw1"
	}, {
		name: "4KGal",
		host: ["gal4k.com"],
		url: {
			t: "4KGal",
			p: "/post/"
		},
		box: [".gallery", 1],
		imgs: () => hr.getImg(".gallery-item img", ".gallery~nav>.img-page-info").then(srcs => {
			return srcs.map(src => {
				if (src.includes("?url") && src.includes("4khd.com")) {
					src = fn.getUSP("url", src);
					return fn.rt(src, [
						[/i\d\.wp\.com\//, ""],
						["pic.4khd.com", "img.4khd.com"],
						[/\?.+$/, ""],
						[/\/w\d+-rw\//, "/w2500-h2500-rw/"]
					]);
				}
				return src;
			});
		}),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".gallery,.img-pagination"),
		autoDownload: [0],
		next: ".post-nav-prev",
		prev: ".post-nav-next",
		customTitle: ".post-title",
		category: "nsfw2"
	}, {
		name: "imissx/mavicX/xaicos/xaimiss",
		url: {
			h: ["www.imissx.com", "www.mavicx.com", "www.xaicos.com", "www.xaimiss.com"],
			p: /^\/\d+\.html$/
		},
		imgs: () => hr.getImgA(".article-content img", ".article-paging a"),
		button: [4],
		insertImg: [".article-content", 2],
		autoDownload: [0],
		next: ".article-nav-prev>a",
		prev: ".article-nav-next>a",
		customTitle: ".article-title",
		hide: ".rmp-container",
		category: "nsfw1"
	}, {
		name: "男人之家",
		host: ["nanrenhome.cc", "nanrenhome.com"],
		url: {
			h: /nanrenhome\./,
			p: ".html",
			e: "//a[@rel='category tag'][text()='福利美图']"
		},
		imgs: () => {
			let pages = q(".article-paging a[href]").one;
			return pages ? hr.getImgA(".article-content img", ".article-paging a[href]") : q(".article-content img");
		},
		button: [4],
		insertImg: [
			["//article/p[img]", 2, "//article/p[img] | //div[@class='article-paging']"], 2
		],
		customTitle: ".article-title",
		category: "nsfw1"
	}, {
		name: "推次元",
		host: ["www.a2cy.com", "a2cy.com"],
		url: {
			h: "a2cy.com",
			p: ".html"
		},
		imgs: () => q(".imgBox img,.w:not(.box-shadow) img").filter(e => !e.closest(".cy_tyoum,.cy_ranking,.yalayi_box,.mb10")).srcs,
		capture: true,
		customTitle: "h1",
		category: "nsfw1"
	}, {
		name: "HaneAme",
		url: {
			h: "haneame.net",
			p: ["/album-", "/deepfake"]
		},
		imgs: () => hr.getImgA(".entry-content img", ".pagelinks a"),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "a.g1-teaser-prev",
		prev: "a.g1-teaser-next",
		customTitle: () => fn.dt({
			s: "h1.entry-title",
			d: "Album –"
		}),
		category: "nsfw1"
	}, {
		name: "蠢沫沫",
		url: {
			h: "chunmomo.net",
			p: ["/album-", "/deepfake"]
		},
		imgs: async () => {
			let srcs = fn.srcs(".s-post-content img");
			let pages = q(".all-page").text;
			if (pages) {
				let [max] = pages.match(/\d+/);
				srcs = await hr.getImg(".s-post-content img", max, 4);
			}
			return srcs.filter(e => !e.includes("rehanman") && !e.includes("thumbnail"));
		},
		button: [4],
		insertImg: [".s-post-content", 2],
		autoDownload: [0],
		next: ".next-page a.pg-arrow",
		prev: ".prev-page a.pg-arrow",
		customTitle: () => fn.dt({
			s: "h1.entry-title",
			d: "Album –"
		}),
		hide: "[id^='quads-ad'],[id^=block]",
		category: "nsfw1"
	}, {
		name: "秀人写真网",
		host: ["tu925.com"],
		url: {
			t: "秀人写真网",
			p: /^\/\d+\/\d+\/\d+\//
		},
		box: ["#gallery-container", 1],
		imgs: () => {
			let pages = q("//a[contains(text(),'下一页')]").one;
			if (pages) {
				let max = q("a", pages.parentNode).maxNum;
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?page_num=${i + 1}`);
				return hr.getImgA("#gallery-container img", links);
			}
			return q("#gallery-container img");
		},
		button: [4],
		insertImg: [
			["box", 0, "#gallery-container"], 2
		],
		autoDownload: [0],
		next: "//a[span[text()='上一个图集']]",
		prev: "//a[span[text()='下一个图集']]",
		customTitle: "section h1",
		category: "nsfw2"
	}, {
		name: "猫猫网盘",
		url: {
			h: ["catcat.cloud"]
		},
		page: () => fn.lpsl() > 2,
		SPA: "g",
		observeURL: "nav",
		imgs: () => hr.getAList(),
		customTitle: () => fn.dt({
			d: [" | 猫猫网盘"]
		}),
		downloadVideo: true,
		category: "nsfw1"
	}, {
		name: "美图录",
		url: {
			h: ["meitulu.me"],
			p: "/item/",
			e: ".mb-4>img[alt]"
		},
		imgs: () => hr.getImg(".mb-4>img[alt]", ".page-link", 9),
		button: [4],
		insertImg: [".mb-4", 1],
		customTitle: ".top-title",
		category: "nsfw1"
	}, {
		name: "美女视界",
		host: ["www.beapic.com"],
		url: {
			t: "美女视界",
			p: /^\/\d+\.html$/,
			e: "#image_div",
			ee: "//a[@rel='category tag'][text()='演出视频']"
		},
		imgs: () => hr.getImg("#image_div img", ".current~a", 9).then(srcs => srcs.map(e => e.replace(/\?x-oss-process.+$/, ""))),
		button: [4],
		insertImg: ["#content", 2],
		insertImgAF: () => fn.run("$(document).off()"),
		customTitle: () => fn.title(" – 美女视界"),
		category: "nsfw1"
	}, {
		name: "FoamGirl",
		url: {
			h: "foamgirl.net",
			p: ".html",
			e: "a.imageclick-imgbox"
		},
		box: ["#image_div,a.imageclick-imgbox", 1],
		imgs: () => hr.getImg("a.imageclick-imgbox", ".current~a", 9),
		button: [4],
		insertImg: [
			["box", 0, "#image_div,a.imageclick-imgbox,#content br,#image_div_all"], 2
		],
		customTitle: () => fn.dt({
			s: ".item_title>h1",
			d: /\n/g
		}),
		hide: ".affs",
		category: "nsfw2"
	}, {
		name: "COSPLAY Girl 18+",
		host: ["cosplay.girl18.net", "xiuren.girl18.net", "bobosocks.girl18.net", "imiss.girl18.net", "cosplay.girl18.net"],
		url: {
			h: ".girl18.net"
		},
		imgs: () => fn.srcs("#image_div img").map(src => src.replace(/\?.+$/, "")),
		button: [4],
		insertImg: ["#image_div", 2],
		customTitle: ".item_title",
		hide: ".item_images_info",
		category: "nsfw2"
	}, {
		name: "Girl 18+",
		host: ["girl18.net"],
		url: {
			h: "girl18"
		},
		imgs: () => fn.srcs("#content img").map(src => src.replace(/\?.+$/, "")),
		button: [4],
		insertImg: ["#content", 2],
		customTitle: ".item_title",
		hide: ".item_images_info",
		category: "nsfw1"
	}, {
		name: "18成人貼圖",
		host: ["www.sexphotos.cc"],
		reg: /^https?:\/\/www\.sexphotos\.cc\/\w+\/\d+\.html$/,
		init: () => fn.waitEle(".article-body>img").then(e => fn.createImgBox(e, 1)),
		imgs: ".article-body>img",
		button: [4],
		insertImg: [
			["box", 0, ".article-body>img"], 2
		],
		autoDownload: [0],
		next: "a.entry-page-prev[href$=html]",
		prev: "a.entry-page-next[href$=html]",
		customTitle: ".detail-title",
		category: "nsfw2"
	}, {
		name: "Coser Lab",
		url: {
			h: ["coserlab.io"],
			p: "/archives/",
			ee: ".card-body .error-empty,.post-hide-content"
		},
		imgs: () => {
			fn.showMsg("hr.xhrHEAD(check)...", 0);
			let xhrNum = 0;
			return q("a.glightbox").urls.map(u => u.replace("-scaled", "")).map(async (src, i, arr) => {
				await fn.delay(100 * i, 0);
				let res = await hr.xhrHEAD(src);
				fn.showMsg(`hr.xhrHEAD(${xhrNum+=1}/${arr.length})`, 0);
				let status = res.status;
				return status == 404 ? src.replace(/(\.[a-z]+)$/i, "-scaled$1") : src;
			});
		},
		thums: "a.glightbox img",
		button: [4],
		insertImg: [
			[".masonry-list", 2, ".masonry-list"], 2
		],
		customTitle: "span.current,.card-body h1",
		category: "nsfw2"
	}, {
		name: "Erohere",
		url: {
			h: "my.erohere.eu",
			p: "/album/"
		},
		box: ["#gallery", 1],
		imgs: () => hr.getImg("#gallery img", ".current-page", 14),
		button: [4],
		insertImg: [
			["box", 0, "#gallery,.pagination"], 2
		],
		customTitle: ".album-name",
		category: "nsfw1"
	}, {
		name: "懒人看图",
		host: ["www.lazymanpic.net"],
		url: {
			t: "懒人在线看图",
			e: ".m-list-content img"
		},
		imgs: () => hr.getNP(".m-list-content img", "//a[text()='下一页'][@class='next']", null, ".link_pages"),
		button: [4],
		insertImg: [".m-list-content", 2],
		autoDownload: [0],
		next: ".sxpage_r>a",
		prev: ".sxpage_l>a",
		customTitle: () => fn.dt({
			s: ".m-list-tools>h2",
			d: [
				/\(\d\)/,
				/\[\d+[\s\.\+\w-\/]+\].*/,
				/全网首发|免费下载|无损图包下载|未删减版|无删减图包/g
			]
		}),
		category: "nsfw1"
	}, {
		name: "尤物秀",
		host: ["www.youwushow.net"],
		reg: /^https?:\/\/(www\.)?youwushow\.net\/pic\/\w+\.html(\?btwaf=\d+)?$/,
		imgs: () => hr.getNP(".entry-content>*:not(.page-links)", "span.current+a", null, ".page-links").then(() => q(".entry-content img")),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "a.prev-link",
		prev: "a.next-link",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: [
				/\(\d\)/,
				/\[\d+[\s\.\+\w-\/]+\].*/,
				/全网首发|免费下载|无损图包下载|未删减版|无删减图包/g
			]
		}),
		category: "nsfw1"
	}, {
		name: "比思在線圖庫",
		host: ["bisipic.xyz", "bisipic.online"],
		url: {
			h: /bisipic\./,
			p: "/thread-",
			e: "img[zoomfile]"
		},
		imgs: () => q("img[zoomfile]").map(e => fn.lo + "/" + fn.attr(e, "zoomfile")),
		capture: true,
		customTitle: () => fn.dt({
			t: q("meta[name=keywords]").attr("content"),
			d: /【\d+P】.*$/
		}),
		category: "nsfw1"
	}, {
		name: "米兔妹妹",
		host: ["www.loxiu.com"],
		url: {
			t: "米兔妹妹",
			p: "/post/"
		},
		imgs: () => hr.getImg(".info-imtg-box>img[alt]", ".pagebar>*"),
		button: [4],
		insertImg: ["div:has(>.info-imtg-box)", 2],
		autoDownload: [0],
		next: "//a[p[text()='上一篇']]",
		prev: "//a[p[text()='下一篇']]",
		customTitle: ".info-title>h1",
		category: "nsfw1"
	}, {
		name: "遛无写真格式",
		url: {
			h: [
				"www.0xzn.com",
				"www.096d.com",
				"www.0niz.com",
				"www.1nlm.com",
				"www.1plq.com",
				"www.1tu5.com",
				"www.1vtr.com",
				"www.3pxa.com",
				"www.3tck.com",
				"www.4tck.com",
				"www.54k5.com",
				"www.5njs.com",
				"www.5pwc.com",
				"www.6evu.com",
				"www.6kpo.com",
				"www.6tck.com",
				"www.6vtr.com",
				"www.7k1a.com",
				"www.7mqk.com",
				"www.7tck.com",
				"www.7u8t.com",
				"www.09kt.com",
				"www.c0h.net",
				"www.df10.net",
				"www.eshh.net",
				"www.game1313.net",
				"www.te2zn.com",
				"www.tmm123.vip",
				"www.wangblog.net",
				"www.wjstbs.net",
				"www.wsqap.com",
				"www.wxytw.com",
				"www.zhaixiaonan.com",
				"www.vansankan.net",
				"d2nx.com"
			],
			p: /^\/\d+\.html$/,
			e: "#post_content img,.article-content img,.entry-content img",
			ee: "//a[@rel='category tag'][contains(text(),'人物简历') or contains(text(),'宅男科技') or contains(text(),'时尚玩酷') or contains(text(),'身边事') or contains(text(),'追星一族') or contains(text(),'网红头条') or contains(text(),'大众娱乐') or contains(text(),'生活热点') or contains(text(),'影评剧透') or contains(text(),'娱乐时尚') or contains(text(),'吃喝玩乐') or contains(text(),'体育') or contains(text(),'亲子宠物') or contains(text(),'番号大全') or contains(text(),'番号推荐') or contains(text(),'最新番号') or contains(text(),'素人番号')]"
		},
		imgs: () => hr.getImgA("#post_content img,.article-content img,.entry-content img", ".pagelist a,.pagination a,.article-paging a"),
		button: [4],
		insertImg: ["#post_content,.article-content,.entry-content", 2],
		autoDownload: [0],
		next: "a[rel=prev],.article-nav-prev a",
		prev: "a[rel=next],.article-nav-next a",
		customTitle: () => fn.dt({
			s: "h1",
			d: [
				/无圣光.+$/,
				/无水印.+$/,
				/无删减.+$/,
				/高品质.+$/,
				/超高清.+$/,
			]
		}),
		css: ".article_container{padding:10px 0px!important}#post_content{padding:0px!important}",
		mcss: ".container{max-width:100% !important}",
		category: "nsfw1"
	}, {
		name: "原创妹子图/尤物私房图/极品美女图/免费私房图/私房网红图/尤物妹妹图",
		//所有域名在環境變數urltz
		host: ["www.ywsft.com", "www.jpmnt.com", "www.mfsft.com", "www.sfwht.com", "www.ywmmt.com"],
		url: {
			e: [".b", "#picg", ".pagelist"],
			p: /^\/[a-z]+\/[a-z]+\/\d+\/\d+\.html$/
		},
		init: () => {
			q(".b a").for(a => a.removeAttribute("target"));
			q("#picg a").for(a => (a.outerHTML = a.innerHTML));
			fn.remove("iframe", 2000);
		},
		imgs: () => hr.getImg("#picg img[alt]", ".pagelist a", 9),
		button: [4],
		insertImg: ["#picg", 2],
		autoDownload: [0],
		next: "//div[@class='b' and contains(text(),'下一')]/a",
		prev: "//div[@class='b' and contains(text(),'上一')]/a",
		customTitle: () => fn.dt({
			s: "h1",
			d: [
				/第\d+页|^- /g,
				/[\s-]+P\.\d/g,
				/:/g
			]
		}),
		fancybox: {
			v: 3,
			insertLibrarys: 1
		},
		css: "#imgc img{margin:0px auto !important}#picg{max-width:1110px !important;margin:0 auto}#picg img:hover{transform:none !important}#picg img{filter:blur(0px) !important}",
		hide: "body>br,body>*[id]:has(*[class*=adsby]),#apic,#bzs7,.interestline+center,center+#pic,#qpai,#d4a,#divone,#xzpap1,#divpsgx,#bdivpx,#divfts,#divftsp,#app+div,#xzappsq,div.bg-text,#divpsg,#divStayTopright2,#bdssy,#qrcode2>.erweima-text,#qrcode2>center,#qrcode2>center+div,#d5tig,#pcapicb,#google_translate_element,#d5a>*:not([id]):not([class]),.slide>a+div,.slide>img+div,#xtjpp,#divftst,.interestline+.nav~span,.interestline+.nav~br",
		category: "nsfw2"
	}, {
		name: "美女私房照/看妹图",
		host: ["www.sfjpg.com", "www.sfmm.cc", "www.kmeitu.cc", "kanmeitu.net"],
		url: {
			t: ["美女私房照", "看妹图", "看妹圖"],
			p: /^\/\w+\/\d+\.html$/,
			e: "#picg img"
		},
		init: () => {
			q(".b a").for(a => a.removeAttribute("target"));
			q("#picg a").for(a => (a.outerHTML = a.innerHTML));
		},
		imgs: () => hr.getImgO("#picg img", ".pagelist span,.pagelist a[title=Page]", 9, 0, ".page .pagelist"),
		button: [4],
		insertImg: ["#picg", 2],
		autoDownload: [0],
		next: "//div[@class='b' and contains(text(),'上一')]/a",
		prev: "//div[@class='b' and contains(text(),'下一')]/a",
		customTitle: "h1",
		topButton: true,
		fancybox: {
			v: 3,
			insertLibrarys: 1
		},
		css: "#imgc img{margin:0px auto !important}#picg{max-width:1110px !important;margin:0 auto}#picg img:hover{transform:none !important}#picg img{filter:blur(0px) !important}",
		hide: "body>br,.interestline+center,center+#pic,#xzpap1,#divpsgx,#bdivpx,#divfts,#divftsp,#app+div,#xzappsq,div.bg-text,#divpsg,#divStayTopright2,#bdssy,#qrcode2>center,#d5tig,#pcapicb,#pcapic,#google_translate_element,#d5a>*:not([id]):not([class]),union[id]",
		category: "nsfw2"
	}, {
		name: "爱妹子",
		url: {
			h: ["xx.knit.bid", "www.lovecutes.com"],
			p: /^\/([\w-]+\/)?article\/\d+\//i,
			e: ".item-image img"
		},
		box: [".image-container"],
		imgs: () => {
			if (q("li.next-page").one) {
				let max = q(".pagination a").maxNum;
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : fn.lp + `page/${i + 1}/`);
				return hr.getImgA(".item-image img", links, 1200);
			}
			return q(".item-image img");
		},
		button: [4],
		insertImg: [
			["box", 0, ".item-image,.loading-indicator,.pagination-nav"], 2
		],
		insertImgAF: () => setTimeout(() => fn.clearAllTimer(2), 1500),
		customTitle: ".focusbox-title",
		css: "a{white-space:unset!important}",
		hide: ".clickadu-container",
		category: "nsfw2"
	}, {
		name: "美女写真",
		url: {
			h: "portrait.knit.bid",
			p: /^\/\w+\/\d+$/,
			e: ".container>.container>img"
		},
		imgs: () => {
			let max = q(".page-link").maxNum;
			let links = fn.arr(max, (v, i) => siteUrl + "?page=" + (i + 1));
			return hr.getImgA(".container>.container>img", links, 300);
		},
		button: [4],
		insertImg: [
			[".container>.container>nav", 2, "nav[aria-label=pagination],.img-fluid"], 2
		],
		customTitle: ".container h1",
		category: "nsfw1"
	}, {
		name: "美图网",
		url: {
			h: "meitu.knit.bid",
			p: /^\/(beauty|handsome)\/[^\/]+$/,
			e: ".details_item>img"
		},
		imgs: () => {
			let [max] = q("a[href*=gotoPage]").urls.at(-2).match(/\d+/);
			let links = fn.arr(max, (v, i) => siteUrl + "?page=" + (i + 1));
			return hr.getImgA(".details_item>img", links, 300);
		},
		button: [4],
		insertImg: [".details_item", 2],
		customTitle: () => fn.dt({
			s: ".text-center>h1",
			r: [
				["|", "-"]
			]
		}),
		category: "nsfw1"
	}, {
		name: "美图网",
		url: {
			h: "meitu.knit.bid",
			p: /^\/(news|street)\/\d+$/
		},
		imgs: ".news-body img",
		customTitle: () => fn.dt({
			s: ".text-center>h1",
			r: [
				["|", "-"]
			]
		}),
		category: "nsfw1"
	}, {
		name: "萌图社",
		url: {
			h: ["www.446m.com", "446m.com"],
			p: /^\/index\.php\/\w+\/\d+\.html$/
		},
		imgs: "span.post-item",
		button: [4],
		insertImg: [".post-content", 2],
		customTitle: () => fn.title(" - 萌图社"),
		hide: ".footer~*",
		category: "nsfw1"
	}, {
		name: "日式JK旧版",
		host: ["v2.jk.rs"],
		reg: /^https?:\/\/v2\.jk\.rs\/\d+\/\d+\/\d+\/\d+\.html$/,
		imgs: "div[data-fancybox]",
		button: [4],
		insertImg: ["#masonry", 2],
		customTitle: () => fn.title(" - 日式JK"),
		fancybox: {
			v: 3,
			css: false
		},
		css: "#masonry{position:unset!important;height:unset!important}",
		category: "nsfw1"
	}, {
		name: "日式JK",
		url: {
			h: "www.jk.rs",
			p: ".html",
			ee: ".post-hide-content"
		},
		imgs: "a.glightbox",
		button: [4],
		insertImg: [
			[".masonry-list", 2, ".masonry-list"], 2
		],
		insertImgAF: () => fn.css("#masonry{position:unset!important;height:unset!important}"),
		customTitle: () => fn.title(" – 日式JK"),
		referer: "",
		category: "nsfw1"
	}, {
		name: "微博美女",
		url: {
			h: "weibomn.com",
			p: "/girl"
		},
		box: [".photos", 1],
		imgs: ".photos img",
		button: [4],
		insertImg: [
			["box", 0, ".photos"], 2
		],
		customTitle: () => "微博美女 - " + q(".post-content p").text,
		category: "nsfw1"
	}, {
		name: "唐朝资源",
		url: {
			h: "oorpg.com",
			e: ["#card-box", ".article-h1"],
			st: "var uul"
		},
		box: ["#card-box", 1],
		imgs: () => {
			let str = Code.str("var uul");
			return str.split("https://").filter(Boolean).map(s => "https://" + s);
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#card-box"),
		customTitle: () => fn.dt({
			s: ".article-h1",
			d: "- [秀人套图]"
		}),
		category: "nsfw1"
	}, {
		name: "HotAsiaGirl",
		url: {
			h: ["hotgirl.asia"]
		},
		box: [".galeria_img", 1],
		imgs: () => hr.getImgA(".galeria_img>img", ".pagination a[href]"),
		button: [4],
		insertImg: [
			["box", 0, ".galeria_img,#pagination"], 2
		],
		customTitle: ".mvic-desc h3",
		category: "nsfw2"
	}, {
		name: "HotGirl World",
		url: {
			h: ["www.hotgirl2024.com", "hotgirl.world"],
			P: "/g/"
		},
		init: () => q(".blur-image").for(e => e.classList.remove("blur-image")),
		imgs: () => hr.getImg(".article__image-list img", ".pagination__total"),
		button: [4],
		insertImg: [".article__image-list", 2],
		customTitle: ".article-header__title",
		category: "nsfw1"
	}, {
		name: "MaoJiuJiu/SkyBird/TightImg/SexCity",
		url: {
			h: ["www.maojiujiu.com", "www.skybirdx.com", "www.tightimg.com", "www.sexscity.com"],
			p: "/album/",
			e: "#item_list img"
		},
		imgs: () => hr.getImgA("#item_list img", ".pager>a:not(.current)"),
		capture: true,
		customTitle: "h1.title",
		setFancybox: "#item_list a:has(>img)",
		category: "nsfw1"
	}, {
		name: "Pibys",
		url: {
			h: "pibys.win",
			e: ".page-links"
		},
		box: [".entry-content img", 1],
		imgs: () => hr.getImgA(".entry-content img", ".page-links a"),
		button: [4],
		insertImg: [
			["box", 0, "#FullPictureLoadMainImgBox~*"], 2
		],
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "TGG",
		url: {
			h: ["thegg.net"],
			e: "#header img,#body img"
		},
		imgs: () => q("#header img:not([alt*='author']),#body img:not([alt*='author'])").srcsets.filter(src => !src.includes("banner")),
		capture: true,
		autoDownload: [0],
		next: "//a[text()='Next post']",
		prev: "//a[text()='Previous post']",
		customTitle: ".info h2",
		category: "nsfw1"
	}, {
		name: "1Y Beauties",
		url: {
			h: "www.1y.is",
			p: /^\/[\w-]+\/[^\.]+\.html$/i
		},
		imgs: () => hr.getImgA(".entry-content img", ".page-links a"),
		capture: true,
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "True Pic",
		url: {
			h: ["truepic.net"],
			p: /^\/[\w-]+\/$/,
			e: "//div[@class='entry-content']//p[img]"
		},
		box: ["//p[img]", 1],
		imgs: () => hr.getImgA("//p/img", ".pagination_split_post a"),
		button: [4],
		insertImg: [
			["box", 0, "//p[img]"], 2
		],
		customTitle: ".entry-content h2",
		category: "nsfw1"
	}, {
		name: "#TheFappening",
		url: {
			h: "fap.thefappening.one",
			p: /^\/[^\/]+\/$/,
			e: ".entry-title"
		},
		imgs: () => {
			let a = q(".gallery-item a[target]").all;
			if (a.length) return a;
			return q(".gallery-item img");
		},
		capture: true,
		customTitle: () => q(".entry-title").text.replaceAll("/", "-"),
		category: "nsfw2"
	}, {
		name: "Hot Girl Pix/美图集",
		url: {
			h: ["www.hotgirlpix.com", "www.meituj.com"],
			p: "/p/"
		},
		imgs: () => hr.getImgA("article img", "#singlePostPagination a", 300),
		button: [4],
		insertImg: ["article", 2],
		customTitle: "#singlePostTitle",
		css: ".nav-menu{z-index:10}",
		hide: "#modalAdblock,.alignCenter,.gcseSearchPlaceHolder,body~*:not(#DownloadAppUIRoot,[id^=Full],.viewer-container),footer~*",
		category: "nsfw1"
	}, {
		name: "Hot Girl Pix AD",
		host: ["www.hotgirlpix.com"],
		reg: /^https?:\/\/www\.hotgirlpix\.com\//,
		hide: "#modalAdblock,body~*:not(#DownloadAppUIRoot,[id^=Full],.viewer-container),footer~*",
		category: "ad"
	}, {
		name: "美推网",
		host: ["www.meinvtui.com"],
		url: {
			//h: [/meinvtui\.com$/, "bbs.2tu.me"],
			e: [".logo>a[title=美女图片]>img[alt=美女图片],nav.bg-w a[title=美女图片]", ".pp.hh,.contimglist"],
			p: ".html"
		},
		imgs: () => hr.getImg(".pp.hh img[alt],.contimglist img[alt]", ".pages>a:first-child,.page a:not([href])", 9),
		button: [4],
		insertImg: [".pp.hh,.contimglist", 2],
		autoDownload: [0],
		next: "//b[text()='上一篇:']/following-sibling::a | //a[@class='f-l l2'][@href]",
		prev: "//b[text()='下一篇:']/following-sibling::a | //a[@class='f-l l3'][@href]",
		customTitle: ".des>h1,.contmbx-title",
		category: "nsfw1"
	}, {
		name: "SexyAsianGirl",
		url: {
			h: ["www.sexyasiangirl.top", "sexyasiangirl.top"],
			p: "/album/"
		},
		box: ["article>header~img", 1],
		imgs: () => hr.getImg("article>header~img", "//span[contains(text(),'of')]"),
		button: [4],
		insertImg: [
			["box", 0, "article>header~img"], 2
		],
		customTitle: "header>h2",
		category: "nsfw2"
	}, {
		name: "媚人图库",
		host: ["meirrrrrrr.xyz"],
		url: {
			t: "媚人图库",
			u: "album/"
		},
		box: ["article>header~img", 1],
		imgs: () => {
			let max = fn.gt("//span[contains(text(),'of')]").match(/\d+/g).at(-1);
			let links = fn.arr(max, (v, i) => i == 0 ? fn.url : `${fn.url}?page=${i + 1}`);
			return hr.getImgA("article>header~img", links);
		},
		button: [4],
		insertImg: [
			["box", 0, "article>header~img"], 2
		],
		customTitle: "header>h2",
		category: "nsfw2"
	}, {
		name: "尤物丧志/亚色图库/福利姬美图/秀人图/極品妹子圖/涩图社/三上悠亚写真图片/AHottie/Coser/HotGirl/SexyGirl/私房图库",
		url: {
			t: ["尤", "图", "圖", "写真", "寫真", "AHottie", "Coser", "Girl"],
			e: ["img.block", "//div[img[@title]]", "#main>h1,header>h1"]
		},
		imgs: () => hr.getImg("img.block", "span~a").then(srcs => srcs.map(e => e.replace("teleimgs.pages.dev", "imgfiles.pages.dev"))),
		button: [4],
		insertImg: ["//div[img[@title]]", 2],
		next: "//span[contains(text(),'上一篇')]/following-sibling::a[1]",
		customTitle: () => fn.dt({
			s: "#main>h1,header>h1",
			d: [
				/\(\d+[\w\s\\\/\.+-/]+\)?|\[\d+[\w\s\\\/\.+-/]+\]?|(\d+[\w\s\\\/\.+-/]+)?|【\d+[\w\s\\\/\.+-/]+】?|\d+P/gi,
				/\s?\d+P\+?\d+V/,
				/未分类性感写真|^.+人体|AI图区/,
				/(\d+月\d+打赏群(自购)?资源)/gi,
				/🐾/g
			]
		}),
		hide: "div.flex.m-1:has(>a[style]),.my-2:has(>a[target][referrerpolicy][style]),iframe[id][class][width][height][style],div:has(>script):has(>iframe),div:has([id*='adsby']),body>div[id][style]:has(>a[id])",
		category: "nsfw2"
	}, {
		name: "美图鉴赏/美图鉴赏ACG",
		links: [
			"https://www.lspimg.com/page/1/",
			"https://acg.lspimg.com/page/1/"
		],
		url: {
			h: ["www.lspimg.com", "acg.lspimg.com"],
			p: "/archives/"
		},
		home: "/page/1/",
		imgs: "div[data-src]",
		button: [4],
		insertImg: ["#masonry", 2],
		customTitle: () => fn.lh === "www.lspimg.com" ? fn.title(" - 美图鉴赏") : null,
		css: "#masonry{position:unset!important;height:unset!important}",
		hide: "#popup",
		category: "nsfw2"
	}, {
		name: "tumbex",
		url: {
			h: "www.tumbex.com"
		},
		page: "/post/",
		SPA: true,
		observeURL: "head",
		imgs: () => fn.waitEle(".hg-item").then(() => q(".hg-item", ".post-content")),
		capture: true,
		customTitle: () => fn.title(" - Tumbex"),
		referer: "",
		category: "nsfw2"
	}, {
		name: "Fapdungeon",
		url: {
			h: ["fapdungeon.com"]
		},
		init: () => fn.addMutationObserver(() => fn.remove("div[class][style*='z-index']")),
		srcset: ".entry-content img.size-full",
		videos: ".entry-content video>source",
		customTitle: "h1.entry-title",
		referer: "https://fapdungeon.com/",
		setFancybox: ".entry-content img",
		downloadVideo: true,
		category: "nsfw2"
	}, {
		name: "Jizz to Nude Girls",
		url: {
			h: "jizzy.org",
			p: /^\/[^\/]+\/$/,
			e: ".entry-content img"
		},
		imgs: () => q(".entry-content img").srcs.filter(src => !src.includes("18xmob")),
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: ".entry-title",
		category: "nsfw2"
	}, {
		name: "WhoresHub",
		url: {
			h: "whoreshub.com",
			p: "/albums/",
			e: [".gallery-top", ".info-buttons"]
		},
		box: [".info-buttons", 1],
		imgs: () => q(".gallery-top .swiper-wrapper img").map(e => e.dataset.srcset),
		thums: ".gallery-thumbs img",
		button: [4],
		insertImg: ["box", 2],
		customTitle: "h1.title",
		category: "nsfw2"
	}, {
		name: "SaradaHentai",
		url: {
			h: ["saradahentai.com"],
			p: /^\/[\w-]+\/$/
		},
		imgs: () => {
			let b = q(".sd-gallery-thumbs>.sd-gallery-thumb");
			return b.length ? b : q(".sd-entry-content img");
		},
		capture: true,
		customTitle: ".sd-single-title",
		category: "hcomic"
	}, {
		name: "CosersLove",
		url: {
			h: ["coserslove.com"],
			p: "/album/"
		},
		box: ["div[data-photo-list]", 2],
		imgs: async () => {
			let imgs = q("article[data-photo-index] img").all;
			let [, a, b] = q("#photo-grid p").text.match(/\d+/g);
			let pages = Math.ceil(b / a);
			if (pages > 1) {
				let links = fn.arr(pages, (v, i) => i == 0 ? fn.lp : `${fn.lp}/${i+1}`);
				imgs = await hr.getEle(links, "article[data-photo-index] img");
			}
			return q(imgs).srcsets;
		},
		button: [4],
		insertImg: [
			["box", 0, "div[data-photo-list]"], 2
		],
		customTitle: "#main-content h1",
		category: "nsfw2"
	}, {
		name: "暖暖社",
		url: {
			h: "nncos.com",
			p: /^\/\d+\.html$/,
			ee: ".vip-hide-content"
		},
		loop: () => {
			let cs = ".age-gate-restricted,.age-gate__restricted,.age-restriction,.age-gate__restricted--js";
			q(cs).for(e => e.classList.remove(...cs.replaceAll(".", "").split(",")));
			document.body.removeAttribute("style");
		},
		loopTime: 3000,
		init: () => (document.cookie = "age_gate=18;"),
		imgs: () => hr.getImgA(".post-content img", ".single-page-link>a"),
		button: [4],
		insertImg: [".post-content", 2],
		customTitle: ".post-title",
		hide: "#gh-container,.fixnav,.age-gate__wrapper",
		category: "nsfw2"
	}, {
		name: "G-MH/18GAL",
		url: {
			h: ["g-mh.com", "18gallery.com"],
			p: "/gallery/"
		},
		imgs: () => {
			let max = q("[aria-label=Pagination] a").maxNum || 1;
			if (max > 1) {
				let links = fn.arr(max, (v, i) => `${fn.url}page/${i + 1}/`);
				return hr.getImgA("#article img", links);
			}
			return q("#article img");
		},
		button: [4],
		insertImg: ["#article", 2],
		customTitle: "main h1",
		hide: ".bg-muted:has(script)",
		category: "nsfw2"
	}, {
		name: "LUOBUS",
		url: {
			h: ["luobus.com"],
			e: ".post-meta"
		},
		box: ["div[class$='meta-info']", 2],
		imgs: () => hr.getImg(".entry-content img", ".ajax-pager a", "4"),
		button: [4],
		insertImg: [
			["box", 0, "div[class$='meta-info']~p,.ajax-pager"], 2
		],
		customTitle: ".entry-header>h1",
		category: "nsfw2"
	}, {
		name: "JimmysOnline.com",
		url: {
			h: "www.jimmysonline.com",
			p: /^\/[^\/]+\/$/,
			e: "a.aigpl-img-link[data-mfp-src]"
		},
		imgs: () => q("a.aigpl-img-link[data-mfp-src]").map(a => a.dataset.mfpSrc),
		button: [4],
		insertImg: [".aigpl-gallery", 2],
		customTitle: ".entry-title",
		category: "nsfw2"
	}, {
		name: "Mitaku",
		url: {
			h: "mitaku.net",
			e: "a.msacwl-img-link[data-mfp-src]"
		},
		MutationObserver: () => q("body>div").for(e => {
			if (e.textContent.includes("Ads Blocker Detected")) {
				e.remove();
			}
		}),
		imgs: () => q("a.msacwl-img-link[data-mfp-src]").map(a => a.dataset.mfpSrc),
		button: [4],
		insertImg: [
			[".entry-content", 2], 2
		],
		autoDownload: [0],
		next: ".previous>a",
		prev: ".next>a",
		customTitle: () => fn.dt({
			s: "h1.entry-title",
			d: /.[\smitaku]{6,7}\.net./
		}),
		hide: "div:has(.adblock_title)",
		category: "nsfw2"
	}, {
		name: "Mitaku AAD",
		url: {
			h: ["mitaku.net"]
		},
		MutationObserver: () => q("body>div").for(e => {
			if (e.textContent.includes("Ads Blocker Detected")) {
				e.remove();
			}
		}),
		hide: "div:has(.adblock_title)",
		category: "ad"
	}, {
		name: "야동갤러리",
		host: ["yagall2.com"],
		url: {
			t: "야동갤러리",
			p: "/studio/"
		},
		box: ["#sv-img-grid", 1],
		imgs: () => q("#studio-content img").map(e => e.dataset.s ? atob(e.dataset.s) : e.src),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#sv-img-grid"),
		customTitle: "#bo_v_title",
		category: "nsfw2"
	}, {
		name: "Mikatu",
		url: {
			h: "mikatu.net",
			p: "/galleries/"
		},
		box: ["div:has(>div.gallery-card)", 1],
		imgs: () => hr.getImg("div.gallery-card>img", "nav.flex"),
		button: [4],
		insertImg: [
			["box", 2, "div:has(>div.gallery-card)"], 2
		],
		customTitle: "main h1",
		category: "nsfw2"
	}, {
		name: "Maulon",
		host: "1sex.maulon.vip",
		url: {
			t: "Maulon",
			p: ".html",
			e: ".entry-content .separator"
		},
		imgs: () => hr.getImgA(".entry-content .separator>a", ".page-links a"),
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: "h1.entry-title",
		category: "nsfw1"
	}, {
		name: "MissKON.com",
		host: ["misskon.com"],
		reg: /^https?:\/\/misskon\.com\/[^\/]+\/$/,
		imgs: () => hr.getImg(".entry img[decoding]", ".page-link>*", 4),
		button: [4],
		insertImg: ["//p[img[@decoding]]", 2],
		customTitle: "h1",
		category: "nsfw2"
	}, {
		name: "4KHD",
		host: ["www.4khd.com", "aynzl.uuss.uk", "zrxiu.ssuu.uk"],
		url: {
			e: "//a[@rel='home'][text()='4KHD'] | //a[@rel='home'][text()='秀图网']",
			p: /^\/content\/\d+\/[^\.\/]+\.html$/
		},
		init: () => {
			if ("serviceWorker" in navigator) {
				let loop = setInterval(() => {
					navigator.serviceWorker.getRegistrations().then(registrations => {
						if (registrations.length) {
							for (let registration of registrations) {
								registration.unregister();
							}
							clearInterval(loop);
						}
					});
				}, 1000);
			}
		},
		imgs: () => hr.getImgA("figure.wp-block-image>a>img,#basicExample>a>img,.entry-content>p>a>img", ".page-link-box a").then(srcs => srcs.map(src => fn.rt(src, [
			[/i\d\.wp\.com\//, ""],
			["pic.4khd.com", "img.4khd.com"],
			[/\?.+$/, ""],
			[/\/w\d+-rw\//, "/w2500-h2500-rw/"]
		]))),
		button: [4],
		insertImg: [
			[".page-link-box,.wp-block-post-content>*:last-child,#khd", 1, "#basicExample,.wp-block-image,.entry-content>p:not(#FullPictureLoadEnd),.page-link-box"], 2
		],
		customTitle: "h3.wp-block-post-title",
		css: ".FullPictureLoadImage{max-width:100%!important}",
		hide: ".centbtd,.popup,.wp-container-13,.popup-iframe",
		category: "nsfw2"
	}, {
		name: "4KHD AAD",
		url: {
			e: "//a[@rel='home'][text()='4KHD']"
		},
		init: () => {
			if (fn.lh === "www.4khd.com") {
				const replaceSrc = () => q("img[src*='pic.4khd.com']").for(e => {
					let src = e.src;
					src = src.replace("pic.4khd.com", "img.4khd.com");
					e.src = src;
				});
				fn.addMutationObserver(replaceSrc);
			}
		},
		hide: ".centbtd,.popup,.wp-container-13,.popup-iframe",
		category: "ad"
	}, {
		name: "AsianPink",
		url: {
			h: ["asianpink.net"],
			p: /^\/[^\/]+\/$/
		},
		imgs: () => {
			let max = Number(fn.gt(".pagination .next", 2)) || 1;
			if (max > 1) {
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}?gallery_page=${i + 1}`);
				return hr.getImgA(".gallery-wrapper img", links).then(srcs => srcs.map(e => decodeURIComponent(e)));
			}
			return fn.srcs(".gallery-wrapper img").map(e => decodeURIComponent(e));
		},
		button: [4],
		insertImg: [".gallery-wrapper", 2],
		customTitle: "h1.entry-title",
		category: "nsfw1"
	}, {
		name: "Buon Dua",
		url: {
			h: ["buondua.com", "buondua.us"],
			e: ".article-fulltext img[alt]"
		},
		init: () => {
			fn.remove("//div[text()='Sponsored ads']");
			fn.remove(".search-form~*");
			q(".pagination a[previous],.pagination a[next]").for(e => e.classList.add('disabled'));
		},
		imgs: () => hr.getImg(".article-fulltext img[alt]", ".pagination a"),
		button: [4],
		insertImg: [".article-fulltext", 2],
		customTitle: ".article-header>h1",
		referrerpolicy: "strict-origin",
		hide: "div:not([class]):has(>small),a[href^=java]",
		category: "nsfw2"
	}, {
		name: "HOTGIRLchina格式",
		h: ["hotgirlchina.com"],
		url: {
			e: ["html[lang='en-US'],html[lang='vi']", "body.wp-theme-cube-blog", "#masthead .site-branding-logo", "#site-navigation", ".wp-block-gallery img"]
		},
		init: () => fn.remove("div:has(>iframe),center:has(iframe)"),
		imgs: () => fn.srcs(".wp-block-gallery img").filter(src => !src.endsWith(".gif")),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: ".nav-previous a",
		prev: ".nav-next a",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: /\(\d+\s?photos\s?\)|(\s?\(\d+\s?photos?\s?\+\s?\d+\s?videos?\))|\([0-9\s]+ảnh[0-9\s\+]+video\)|\([0-9\s]+ảnh.*\)|\/mitaku\.net\//i
		}),
		hide: ".gaigu-banner,.vietpub_nativeads-banner,div:has(>iframe),center:has(iframe),#tpbr_topbar,.ad-container,.nwm-hidden-mobile,section[id^='custom_html'],#adsxyz-overlay-bg,#adsxyz-banner-float,#adsxyz-bottom-banner,.fappedia-banner,#vietpub-overlay,body>div[id]:has(>a[id])",
		category: "nsfw2"
	}, {
		name: "HOTGIRLchina 格式 AD",
		url: {
			e: ["html[lang='en-US'],html[lang='vi']", "body.wp-theme-cube-blog", "#masthead .site-branding-logo", "#site-navigation"]
		},
		init: () => fn.remove("div:has(>iframe),center:has(iframe)"),
		hide: ".gaigu-banner,.vietpub_nativeads-banner,div:has(>iframe),center:has(iframe),#tpbr_topbar,.ad-container,.nwm-hidden-mobile,section[id^='custom_html'],.boxzilla-container,.boxzilla-overlay,.sharrre-container,#vietpub-overlay,#adsxyz-overlay-bg,#adsxyz-banner-float,#adsxyz-bottom-banner,.fappedia-banner,#vietpub-overlay,body>div[id]:has(>a[id])",
		category: "ad"
	}, {
		name: "3600000 Beauty",
		host: ["3600000.xyz"],
		reg: /^https?:\/\/3600000\.xyz\/[^\/]+\/$/,
		imgs: () => {
			let [a, img] = ["//a[img[@file]]", ".entry-content img.ls_lazyimg[file]"];
			if (q(a).length) {
				return q(a);
			} else if (q(img).length) {
				return q(img).attrs("file");
			}
			return [];
		},
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: ".nav-previous>a",
		prev: ".nav-next>a",
		customTitle: ".entry-title",
		hide: "ins",
		category: "nsfw1"
	}, {
		name: "Big Boobs Asia",
		host: ["www.tokyobombers.com"],
		reg: /^https?:\/\/www\.tokyobombers\.com\/\d+\/\d+\/\d+\/[^\/]+\/$/,
		imgs: () => {
			if (q(".gallery img[srcset]").length) {
				return q(".gallery img[srcset]").srcsets;
			}
			return q("a[itemprop='contentURL']");
		},
		button: [4],
		insertImg: [".gallery", 2],
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "Pixnet 相簿",
		link: "https://nagoat.pixnet.net/albums",
		url: {
			h: "pixnet.net",
			p: "/albums/"
		},
		box: [".gallery", 2],
		imgs: () => hr.getNP(".gallery>a", "a[data-slot='pagination-link']:has(path[d$='6-6-6-6'])", null, "nav[data-slot=pagination]"),
		button: [4],
		insertImg: [
			["box", 0, ".gallery,nav[data-slot=pagination]"], 2
		],
		customTitle: () => fn.dt({
			s: "#panel h2",
			d: "相簿檔案"
		}),
		category: "nsfw1"
	}, {
		name: "Tabakus Gallery",
		reg: /^https?:\/\/tabakus\.blogspot\.com\/\d+\/\d+\/[^\.]+\.html/,
		init: () => fn.waitEle(".separator img"),
		box: [".separator:has(>a>img[height])", 1],
		imgs: ".separator>a:has(>img[height])",
		button: [4],
		insertImg: [
			["box", 0, ".separator:has(>a>img),.separator~br"], 2
		],
		customTitle: ".post_item>h1",
		category: "nsfw2"
	}, {
		name: "Chinese Nude Art Photos",
		url: {
			h: ["chinesenudeart.blogspot.com"],
			p: /^\/\d+\/\d+\/[\w-]+\.html/i
		},
		imgs: ".entry-content a[href]",
		thums: ".entry-content a[href]>img",
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "a.blog-pager-older-link",
		prev: "a.blog-pager-newer-link",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: [
				"Chinese beautiful model Amanda -",
				"Beautiful Chinese girl -",
				"Beautiful Chinese girl ",
				"Chinese Beautiful girl -",
				" |18+ Nude model Amateur"
			]
		}),
		mcss: "#outer-wrapper{margin:0px!important;width:100%!important}",
		category: "nsfw1"
	}, {
		name: "Daily Cosplay",
		url: {
			h: ["dailycosplay.com"]
		},
		imgs: () => q("tbody td[width='754'] center img[title]").filter(e => !e.closest("img[alt=Previous],img[alt=Next],.t2")),
		capture: true,
		autoDownload: [0],
		next: "td[align=LEFT] a:has(img[alt=Previous])",
		prev: "td[align=RIGHT] a:has(img[alt=Next])",
		customTitle: () => fn.title(" - Daily Cosplay .com"),
		category: "nsfw1"
	}, {
		name: "Animexx",
		url: {
			h: ["www.animexx.de"],
			e: [".header_mitte>a", "#cosplay_tab_holder"],
			st: "PHPSESSID"
		},
		imgs: () => {
			fn.sm5();
			let data_url = new URL(document.querySelector(".header_mitte>a").href).searchParams.get("back").replace(/\?.+$/, "");
			let code = [...document.scripts].find(s => s.textContent.includes("PHPSESSID")).textContent;
			let [, id] = code.match(/PHPSESSID=(\w+)/);
			return hr.json(data_url + "photoswipe/?PHPSESSID=" + id, {
				"headers": {
					"x-requested-with": "XMLHttpRequest"
				}
			}).then(data => data.map(e => e.url));
		},
		capture: true,
		customTitle: () => fn.title("auf Animexx.de"),
		category: "nsfw1"
	}, {
		name: "Everia.club/Vearitale.com",
		url: {
			h: ["everia.club", "vearitale.com", "vilolala.com"],
			p: [/^\/\d+\/\d+\/\d+\//, /^\/[^\/]+\/$/]
		},
		imgs: () => hr.getImgA(".wp-block-image img,.separator img", ".page-links a"),
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: ".single-post-title",
		category: "nsfw2"
	}, {
		name: "Gravia",
		url: {
			h: ["www.gravia.site", "gravia.site"],
			p: "show.php",
			s: "id="
		},
		box: [".slideshow.for_box", 2],
		imgs: ".slideshow .item>img",
		thums: ".thums img",
		button: [4],
		insertImg: [
			["box", 0, ".slideshow.for_box"], 2
		],
		customTitle: () => fn.dt({
			s: ".container>h1",
			d: /\s?【\d+枚】/
		}),
		css: "img.small{max-width:100% !important;max-height:auto !important}",
		hide: ".cmd_bar.wide",
		category: "nsfw1"
	}, {
		name: "抜けるっ!二次元エロ画像&イラストまとめ",
		url: {
			h: "ero-gazou.jp",
			e: ".grid-container img"
		},
		init: () => fn.addMutationObserver(() => document.documentElement.classList.remove("pum-open", "pum-open-overlay", "pum-open-scrollable")),
		imgs: () => hr.getImgA(".grid-container img", ".pager-numbers a"),
		capture: true,
		autoDownload: [0],
		next: "a.prev-post",
		prev: "a.next-post",
		customTitle: "h1.entry-title",
		css: "html.pum-open{overflow: auto}",
		hide: "#content-top,#content-bottom,.pum-overlay",
		category: "nsfw2"
	}, {
		name: "水着グラビア",
		url: {
			h: ["www.mizugigurabia.com"],
			s: "p="
		},
		init: () => {
			fn.clearAllTimer();
			fn.remove("#content-top");
		},
		imgs: () => {
			let srcs_a = q(".article img[srcset]").srcsets;
			let srcs_b = q(".entry-content a:has(>img)").filter(a => !a.closest(".code-block-16")).map(a => {
				if (a?.firstElementChild?.src) {
					let src = a.firstElementChild.src;
					src = src.replace(/s(\.\w+)/i, "$1");
					if (src == a.href) {
						return src;
					}
				}
				return a?.firstElementChild?.src;
			});
			return [...srcs_a, ...srcs_b];
		},
		capture: true,
		customTitle: ".entry-title",
		category: "nsfw2"
	}, {
		name: "エロ画像まとめ",
		host: ["geinou-nude.com"],
		reg: /^https?:\/\/geinou-nude\.com\/[^\/]+\/(#.*)?$/,
		init: () => fn.addMutationObserver(() => fn.remove(".widgetarea_sp,.widget_execphp,.adContainer")),
		imgs: ".post_thum>img,.post_content a[href*='/uploads/']",
		videos: "iframe[src*=youtube]",
		autoDownload: [0],
		next: "a.nav_link_l",
		prev: "a.f_row_r",
		customTitle: "h1.post_title",
		hide: ".widgetarea_sp,.widget_execphp,.adContainer",
		setFancybox: true,
		category: "nsfw2"
	}, {
		name: "お宝エログ幕府",
		url: {
			h: "bakufu.jp",
			p: "/archives/"
		},
		imgs: () => {
			let srcs = fn.srcs(".entry-content a[href*=bakufu]:has(img[src*=bakufu]),.entry-content a[href*=twimg]:has(img[src*=twimg])");
			return srcs.map(e => e.replace("-scaled.", "."));
		},
		capture: true,
		autoDownload: [0],
		next: ".nav-previous>a",
		prev: ".nav-next>a",
		customTitle: "h1.entry-title",
		category: "nsfw2"
	}, {
		name: "惚れた.net",
		url: {
			h: ["horeta.net"],
			p: /^\/[\w-]+\/$/
		},
		imgs: () => {
			let srcs = fn.srcs(".entry-content p>img.alignnone,.gallery-item img");
			return srcs.map(e => e.replace("-scaled.", "."));
		},
		capture: true,
		autoDownload: [0],
		next: ".st-next-link",
		prev: ".st-prev-link",
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "エロ画像女神ちゃんねる",
		url: {
			h: ["megamich.com"],
			p: /^\/[^\/]+\/\d+\.html$/
		},
		imgs: () => hr.getImg("img[id^='entry_image']", ".current~a", 9),
		capture: true,
		customTitle: "#Single_h1",
		hide: ".sidesticky_l:has(#im_wrap_left),.sidesticky_r:has(#im_wrap_right)",
		category: "nsfw2"
	}, {
		name: "裏ピク",
		url: {
			h: "www.urapic.com",
			p: "/blog-entry-"
		},
		imgs: "//div[@class='entry-body']//a[img[@title]] | //div[@class='entry_body']//a[img[@title]]",
		autoDownload: [0],
		next: "link[rel=prev],.next_entry>a",
		prev: "link[rel=next],.prev_entry>a",
		customTitle: () => fn.gt(".entry-title,.entry_title>h1").replace(/[w]+$/, ""),
		setFancybox: true,
		category: "nsfw2"
	}, {
		name: "Rikitake.com",
		url: {
			h: ["rikitake.com"],
			p: "/g/"
		},
		imgs: "a[data-lightbox],a[data-fancybox]",
		videos: "video>source",
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: () => fn.dt({
			d: "|Rikitake.com"
		}),
		downloadVideo: true,
		observerClick: ".age-link.enter",
		category: "nsfw2"
	}, {
		name: "アイドル画像魂",
		host: ["blog.livedoor.jp"],
		reg: /^https?:\/\/blog\.livedoor\.jp\/idol_gravure_sexy\/archives\/\d+\.html$/,
		imgs: () => fn.srcs(".pict").map(e => e.replace("-s.", ".")),
		capture: true,
		autoDownload: [0],
		next: ".article-pager>.prev a",
		prev: ".article-pager>.next a",
		customTitle: "h1.article-title",
		category: "nsfw1"
	}, {
		name: "水着画像まとめ",
		url: {
			h: ["mizugazo.com"],
			p: "/archives/"
		},
		imgs: () => {
			let srcs = fn.srcs(".single_thumbnail>img,.wp-block-gallery img");
			return srcs.map(e => e.replace(/-\d+x\d+\./, "."));
		},
		capture: true,
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "JKワールド",
		link: "https://jkeroina.net/3zigazou/",
		url: {
			h: "jkeroina.net"
		},
		imgs: () => q(".single_thumbnail img,.single-post-main .content img").filter(e => !e.closest("#wp_rp_first")),
		capture: true,
		autoDownload: [0],
		next: ".navigation a[rel=prev]",
		prev: ".navigation a[rel=next]",
		customTitle: "h1.entry-title",
		category: "nsfw1"
	}, {
		name: "美巨乳美女図鑑@素人画像サイト",
		url: {
			h: "bikyonyu-bijo-zukan.com",
			p: "/post"
		},
		imgs: () => fn.srcs(".entry-content img:not(.w_b_ava_img,[src$='ps-loader.svg'])").map(e => e.replace("-scaled.", ".")),
		capture: true,
		customTitle: "h1.entry-title",
		hide: "div:has(.adblock_title),.widget_custom_html",
		category: "nsfw2"
	}, {
		name: "日刊エログ",
		url: {
			h: "nikkanerog.com",
			p: "/blog-entry-"
		},
		imgs: () => {
			let srcs = q(".mainEntryBody img,.mainEntryMore img,#entry .entry-body img").filter(e => !e.closest("a[href*='html'],a[href*='?']")).srcs;
			return srcs.map(e => e.replace(/s(\.\w+)$/, "$1"));
		},
		capture: true,
		autoDownload: [0],
		next: "a:has(>img[src$='next.png']),#nav-top .next a",
		prev: "a:has(>img[src$='previous.png']),#nav-top .prev a",
		customTitle: ".entry_title_h2_ver2,header.entry-title h1",
		category: "nsfw2"
	}, {
		name: "夜のおかずchエロ画像集会所",
		host: ["yorunookazucherogazousyuukaizyo.com"],
		url: {
			t: "夜のおかずchエロ画像集会所",
			p: /^\/[^\/]+\/$/
		},
		imgs: () => hr.getNP(".entry-content>*", "//a[span[text()='次へ']]", null, ".pager-links").then(() => fn.srcsets(".entry-content img")),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "a:has(.prev-post-title)",
		prev: "a:has(.next-post-title)",
		customTitle: "h1.entry-title",
		category: "nsfw2"
	}, {
		name: "Love Asian Babes",
		url: {
			h: ["amazon-love.com"],
			p: /^\/[^.]+\.html$/
		},
		imgs: () => hr.getImg(".entry-content img", ".current~a", 7),
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "span.prev>a",
		prev: "span.next>a",
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "我要色色",
		url: {
			h: ["51sese.org"],
			p: "/p/"
		},
		imgs: () => q("img[img-path]").attrs("img-path", (a) => `https://imgfiles.pages.dev${a}`),
		button: [4],
		insertImg: [".article-content", 2],
		customTitle: ".article-title",
		category: "nsfw1"
	}, {
		name: "夜社资源 寫真",
		host: ["yeshezy.com", "yeshezy.sbs", "yeshezy.xyz", "yeshezy.top", "yeshezy.cfd", "yeshezy.cc"],
		url: {
			t: "夜社资源",
			p: "/voddetail/",
			e: ".infohead>span:text:写真列表"
		},
		box: [".videolist", 1],
		imgs: () => q(".videolist>.list>a[onclick]").attrs("onclick", (a) => a.split("'").at(1)),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".videolist"),
		customTitle: ".detailinfo>h1",
		hide: "a.res",
		category: "nsfw2"
	}, {
		name: "夜社资源 漫畫",
		url: {
			t: "夜社资源",
			p: "/vodplay/"
		},
		box: [".picslist>.list", 1],
		imgs: ".picslist img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".picslist>.list"),
		autoDownload: [0],
		next: ".nextbtn>a",
		prev: () => {
			let cs = q("a.album-title").urls;
			let ci = cs.findIndex(a => a.endsWith(fn.lp));
			let a = cs[ci - 1];
			return isString(a) ? a : null;
		},
		chapters: {
			target: "a.album-title"
		},
		customTitle: ".picslist>.name",
		hide: "a.res",
		category: "hcomic"
	}, {
		name: "夜社/深夜色 寫真",
		host: ["yeshex.com", "xyeshe.com", "shenyex.com"],
		url: {
			t: ["夜社", "深夜色"],
			p: "/play/"
		},
		box: [".module-player-pics-list", 1],
		imgs: ".module-player-pics-list img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".module-player-pics-list"),
		customTitle: ".module-player-info h1",
		hide: ".btm_list_box,.module-player-info-items>.res,.vaj_list_box,a.module-item:not([href]),.storeBox",
		category: "nsfw2"
	}, {
		name: "夜社/深夜色 漫畫",
		url: {
			t: ["夜社", "深夜色"],
			p: "/play/"
		},
		box: [".module-player-cartoon-list>.title", 2],
		imgs: ".title~.list img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".title~.list"),
		autoDownload: [0],
		next: ".nextbtn>a",
		prev: 1,
		chapters: {
			api: () => {
				let id = fn.lpsa(2);
				return `/detail/${id}.html`;
			},
			mode: "f",
			target: ".chpterlist a.link"
		},
		customTitle: ".title",
		hide: ".btm_list_box,.module-player-info-items>.res,.vaj_list_box,a.module-item:not([href]),.storeBox",
		category: "hcomic"
	}, {
		name: "夜社/深夜色 AD",
		url: {
			t: ["夜社", "深夜色"]
		},
		hide: ".btm_list_box,.module-player-info-items>.res,.vaj_list_box,a.module-item:not([href]),.storeBox",
		category: "ad"
	}, {
		name: "七仙子图片",
		host: ["www.qixianzi.com"],
		reg: /^https?:\/\/www\.qixianzi\.com\/\w+\/\d+\.html$/,
		imgs: () => {
			let url = fn.src("#diggnum script");
			let classid = fn.getUSP("classid", url);
			let id = fn.getUSP("id", url);
			let links = [`/e/wap/show.php?classid=${classid}&id=${id}`];
			return hr.getImgA(".arcmain img", links);
		},
		button: [4],
		insertImg: [".picture_content", 2],
		endColor: "white",
		next: "//li[contains(text(),'上一篇')]/a",
		prev: "//li[contains(text(),'下一篇')]/a",
		customTitle: "h1.diy-h1",
		hide: "nav:has(.pagination)",
		category: "nsfw1"
	}, {
		name: "Asian To Lick",
		url: {
			h: ["asiantolick.com"],
			p: "/post"
		},
		box: [".spotlight-group", 2],
		imgs: () => fn.removeImageCDN(q("div[data-src]").srcs),
		button: [4],
		insertImg: [
			["box", 0, ".spotlight-group"], 2
		],
		customTitle: "h1",
		hide: "#touch_to_see",
		category: "nsfw2"
	}, {
		name: "Asian To Lick 移除圖片CDN",
		url: {
			h: ["asiantolick.com"]
		},
		MutationObserver: () => q("#container img[data-src*='wsrv.nl']").for(e => {
			e.src = fn.getUSP("url", e.dataset.src);
			e.removeAttribute("data-src");
			e.removeAttribute("src-original");
		}),
		category: "none"
	}, {
		name: "Goddess247/BestGirlSexy/美眉图/美女图库",
		url: () => fn.checkUrl({
			h: ["goddess247.com", "bestgirlsexy.com", "www.mmeijpg.com", "0505o.com"]
		}) && !/^\/tag\/|^\/category\//.test(fn.lp) && !q(".needUp").one,
		box: ["//p[img] | //img[@class='aligncenter size-full']", 1],
		imgs: ".elementor-widget-container p img[alt],.elementor-widget-container img.aligncenter.size-full,.elementor-widget-theme-post-content img",
		button: [4],
		insertImg: [
			["box", 0, "//p[img] | //img[@class='aligncenter size-full']"], 2
		],
		customTitle: () => fn.title(/ - Goddess247| - BestPrettyGirl| - Girl Sweetie| - Girl Dreamy| - BestGirlSexy| - 美眉图/),
		category: "nsfw1"
	}, {
		name: "Danryoku",
		url: {
			h: ["danryoku.com"]
		},
		imgs: () => hr.getImgA(".dynamic-entry-content img", ".ipp-image-nav .nav-center a"),
		button: [4],
		insertImg: [".dynamic-entry-content", 2],
		customTitle: "h1.gb-headline",
		category: "nsfw1"
	}, {
		name: "HayVn.Net",
		url: {
			h: "www.hayvn.net"
		},
		imgs: () => {
			let srcs = fn.srcs(".entry-content img");
			return srcs.map(src => src.includes("/s1600/") ? fn.wurl("s16000", src, -2) : src);
		},
		capture: true,
		customTitle: ".entry-title",
		category: "nsfw1"
	}, {
		name: "GenZ Relax/Hình ảnh gái xinh",
		url: {
			h: ["genzrelax.com", "gaixinh.photo"],
			e: ".entry-image img,.entry-content img:not(#img_video)"
		},
		imgs: () => q(".entry-image img,.entry-content img:not(#img_video)").filter(e => !e.closest("a[href*='?']")),
		capture: true,
		customTitle: "h1.entry-title,h1.page-title",
		category: "nsfw1"
	}, {
		name: "呦糖社",
		host: ["www.nicesss.com"],
		reg: /^https?:\/\/www\.nicesss\.com\/archives\/[\w-]+\/([\w-]+\/)?\d+\.html$/i,
		box: [".entry-content>img[data-srcset],.entry-content>p>img[data-srcset],.entry-content>center>img", 1],
		imgs: () => q(".entry-content>img[data-srcset],.entry-content>p>img[data-srcset],.entry-content>center>img").map(e => e.dataset.srcset || e.src),
		button: [4],
		insertImg: [
			["box", 0, ".entry-content>img[data-srcset],.entry-content>p:has(>img[data-srcset]),.entry-content>center>imgs"], 2
		],
		customTitle: ".entry-title>a",
		category: "nsfw1"
	}, {
		name: "Fliporn/性性图",
		host: ["fliporn.biz", "www.xingtupicx.buzz"],
		reg: [
			/^https?:\/\/fliporn\.biz\/videos\//,
			/^https?:\/\/www\.xingtupicx\.buzz\/\?videos\//
		],
		include: "//span[@class='entry-category']/a[text()='亚洲贴图' or text()='写真' or text()='动漫贴图' or text()='性感贴图' or text()='欧美贴图' or text()='网友自拍']",
		box: ["//center[img] | //center[p[img]] | //div[@id='conttpc' and img] | //div[@id='conttpc' and p[img]] | //div[@class='entry-content']//p[img] | //div[figure[div[img]]]", 1],
		imgs: async () => {
			let srcs = await hr.getImg("article img", ".current~a", 7);
			return srcs.map(e => e.replace("%3C/center%3E%3C/p%3E%3Cdiv%20class=", "").replace(/\?w=858(&ssl=1)?/, ""));
		},
		button: [4],
		insertImg: [
			["box", 0, "//br | //div[@class='custom-pagination'] | //center[img] | //center[p[img]] | //div[@id='conttpc' and img] | //div[@id='conttpc' and p[img]] | //div[@class='entry-content']//p[img] | //div[figure[div[img]]]"], 2
		],
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: /\n|[\s\d]+$/g
		}),
		category: "nsfw2"
	}, {
		name: "淫淫小说写真馆",
		host: ["books.xxgirls.vip"],
		url: {
			h: "xxgirls",
			p: "artdetail"
		},
		imgs: "#read_tpc img,.hl-article-content img",
		button: [4],
		insertImg: ["#read_tpc,.hl-article-content", 2],
		autoDownload: [0],
		next: ".hl-next",
		prev: ".hl-prev",
		customTitle: () => fn.dt({
			s: ".hl-article-title",
			d: /-[\d\s]+P?$|\(\d+P\)?.*$|【\d+P】$/i
		}),
		category: "nsfw2"
	}, {
		name: "Elite Babes格式",
		url: {
			h: ["www.elitebabes.com", "www.ftvhunter.com", "www.joymiihub.com", "pmatehunter.com", "www.jperotica.com", "www.metarthunter.com", "www.xarthunter.com", "www.femjoyhunter.com", "nakedporn.pics", "plum.gent", "uludagspot.com", "funphotoguys.com", "suikachallenge.com"],
			e: ".list-gallery",
			ee: "#content video"
		},
		init: () => fn.waitEle(".list-gallery a[data-fancybox]"),
		imgs: () => q(".list-gallery a[data-fancybox]"),
		thums: ".list-gallery a[data-fancybox]>img",
		button: [4],
		insertImg: [
			[".list-gallery", 2], 2
		],
		customTitle: "#content>p",
		fancybox: {
			v: 3,
			css: false
		},
		category: "nsfw2"
	}, {
		name: "Pics-X",
		url: {
			h: "pics-x.com",
			p: "/gallery/"
		},
		imgs: () => fn.waitEle(["#images-container .images-container-image"]),
		button: [4],
		insertImg: ["#images-container", 2],
		customTitle: () => fn.title(" | Pics-X"),
		category: "nsfw2"
	}, {
		name: "Boombo!",
		host: ["hot.boombo.biz", "boombo.biz"],
		url: {
			h: "boombo.biz"
		},
		imgs: () => fn.srcs(".text div[style] img,.text div.fimg img").map(e => e.replace("thumbs/", "")),
		thums: ".text div[style] img,.text div.fimg img",
		button: [4],
		insertImg: [".text div[style],.news .text", 2],
		customTitle: "#dle-content h1",
		category: "nsfw2"
	}, {
		name: "Картинки и фото",
		url: {
			h: "cojo.ru",
			e: ".entry-title"
		},
		imgs: ".wp-block-image img",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: /\([\d\s]+фото\)|\(\d+[\sфотfots]+\)|\d+[\sфотfots]+/
		}),
		setFancybox: true,
		category: "nsfw1"
	}, {
		name: "geekfan.site",
		url: {
			h: "geekfan.site",
			e: [".sgb-data,.entry-content img", ".entry-title"]
		},
		imgs: () => {
			let data = q(".sgb-data");
			let links = q("a[href*='/images/']")
			if (data.length) {
				return data.all.flatMap(data => {
					let text = data.textContent;
					let json = JSON.parse(text);
					return json.images.map(e => e.url.replace("-scaled", ""));
				});
			} else if (links.length) {
				return links;
			}
			return q(".entry-content img");
		},
		capture: true,
		autoDownload: [0],
		next: ".nav-previous a[rel=prev]",
		prev: ".nav-next a[rel=next]",
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: [
				/\(\d+[\sфотfots]+\)|[\d\sфотfots]+/,
				/\(?[\d\s]+фото\)?/,
				/[\d\s]+горячих/,
				"слив"
			]
		}),
		category: "nsfw1"
	}, {
		name: "CLANNAD",
		url: {
			h: "clannadhouse.com",
			p: /^\/[^\/]+\/$/
		},
		imgs: () => {
			let g = "a.fox-lightbox-gallery-item";
			let g2 = "div[class*='lightbox'] img";
			if (q(g).length) {
				return q(g);
			} else if (q(g2).length) {
				return q(g2).srcsets;
			}
			return q(".hero56__background>img,.entry-content img").srcsets;
		},
		capture: true,
		customTitle: ".post-title",
		category: "nsfw1"
	}, {
		name: "Terekspos",
		url: {
			h: "terekspos.com"
		},
		imgs: () => hr.getImg(".post-content>center>a>img,.post-content>p>a>img", ".post-pagination a", 4),
		capture: true,
		autoDownload: [0],
		next: "div.next a",
		prev: "div.previous a",
		customTitle: "h1.post-title",
		category: "nsfw2"
	}, {
		name: "Nevsepic",
		host: ["nevsepic.com.ua"],
		url: {
			h: "nevsepic",
			e: ["//div[@class='full-comms']/a[text()='18+']", ".full-text img,a.highslide", ".share_widget"]
		},
		box: [".share_widget", 1],
		imgs: async () => {
			let srcs = fn.srcs("a.highslide,.full-text img");
			let pages = q(".bottom-nav").one;
			if (pages) {
				let last = q(".navigation>a:last-child").one;
				let max = last.innerText;
				let url = last.pathname;
				let links = fn.arr(max, (v, i) => i == 0 ? fn.url : url.replace(/(\/page\,)(\d+\,)/, `$1${(i + 1) + ","}`));
				srcs = await hr.getImgA("a.highslide,.full-text img", links);
			}
			return srcs.filter(src => !src.includes("/thumbs/") && !src.includes("attach.png"));
		},
		button: [4],
		insertImg: [
			["box", 0, ".full-text img:not(.FullPictureLoadImage,[src$='attach.png']),.full-text img:not(.FullPictureLoadImage,[src$='attach.png'])~br,a.highslide,a.highslide~br,.bottom-nav"], 2
		],
		customTitle: ".f-page-title",
		category: "nsfw2"
	}, {
		name: "Nevsepic",
		host: ["nevsepic.com.ua"],
		url: {
			h: "nevsepic",
			e: [".full-text img,a.highslide", ".share_widget"]
		},
		imgs: async () => {
			let srcs = fn.srcs("a.highslide,.full-text img");
			let pages = q(".bottom-nav").one;
			if (pages) {
				let last = q(".navigation>a:last-child").one;
				let max = last.innerText;
				let url = last.pathname;
				let links = fn.arr(max, (v, i) => i == 0 ? fn.url : url.replace(/(\/page\,)(\d+\,)/, `$1${(i + 1) + ","}`));
				srcs = await hr.getImgA("a.highslide,.full-text img", links);
			}
			return srcs.filter(src => !src.includes("/thumbs/") && !src.includes("attach.png"));
		},
		capture: true,
		button: [4],
		customTitle: ".f-page-title",
		category: "nsfw2"
	}, {
		name: "Развлекательно-эротический блог",
		url: {
			h: "tettie.net",
			s: "p="
		},
		imgs: () => fn.srcs(".postContent img").filter(e => !e.includes("-ads")),
		customTitle: ".postTitle",
		setFancybox: true,
		category: "nsfw2"
	}, {
		name: "FitNakedGirls",
		url: {
			h: ["fitnakedgirls.com"],
			p: "/gallery/"
		},
		imgs: () => {
			let srcs;
			let [a, b] = [".wp-block-image img[data-src]", ".entry-content img"];
			if (q(a).length) {
				srcs = q(a).map(e => e.dataset.src.replace(/-\d+x\d+(\.\w+)$/, "$1"));
			} else {
				srcs = q(b).map(e => e.dataset.src ?? e.src);
			}
			return srcs.filter(src => !src.includes("18xmob.png") && !src.includes("/18plus"));
		},
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: ".entry-title",
		css: ".g1-column-2of3{width:100%!important}",
		hide: "#secondary",
		category: "nsfw2"
	}, {
		name: "FreeXcafe",
		host: ["www.freexcafe.com"],
		reg: /^https?:\/\/www\.freexcafe\.com\/erotica\/[\w-]+\/[\w-]+\/index\.php/,
		box: ["#content>*:last-child", 2],
		imgs: () => hr.getImgA("#imagelink>img,#bigphoto>img", ".thumbs>a", 500),
		thums: ".thumbs>a>img",
		button: [4],
		insertImg: [
			["box", 2, ".thumbs"], 2
		],
		category: "nsfw2"
	}, {
		name: "Xasiat",
		hots: [
			"www.xasiat.com",
			"avjb.com",
			"www.x1hub.com",
			"teenager365.to",
			"theavporn.com",
			"thothub.vip",
			"thothd.com",
			"epawg.com",
			"www.javbangers.com",
			"kissjav.com",
			"xnhau.la",
			"www.eachporn.com",
			"www.eporner.video",
			"www.porntrex.video",
			"www.eachpics.com",
			"www.xepn.com"
		],
		url: {
			e: {
				s: [".copyright a", ".footer .copy", ".footer .txt", ".footer .copi"],
				t: [
					"Xasiat",
					"AVJB",
					"爱微社区",
					"愛微社區",
					"X1HUB",
					"EachPorn",
					"Teenager365",
					"The AV Porn",
					"theavporn",
					"javbangers",
					"Thothub",
					"ThotHD",
					"EPawg",
					"TXXX",
					"KissJAV",
					"xNhau",
					"ePorner",
					"EachPics"
				]
			},
			p: [/\/(albums?|anh-sex)\/\d+/, "/gallery/"]
		},
		box: [".album-info,.video-controls", 1],
		imgs: () => fn.srcs(".images img").map(e => e.replace(/main\/\d+x\d+/, "sources")),
		thums: ".images img",
		button: [4],
		insertImg: [
			["box", 0, ".images"], 2
		],
		customTitle: ".headline>h1,.title",
		css: ".block-album{display:block !important}",
		hide: ".block-album>.table,.top,.sponsor,.link-sponsor,.chatra--webkit,.report-violate,.footer~*:not([id^='Full'],[class^='Full'],[id^='pv-'],[class^='pv-'],#comicRead,#fab,*[class^=fancybox])",
		category: "nsfw2"
	}, {
		name: "Erotic Pics",
		url: {
			h: ["erotic.pics"],
			p: /^\/[^\/]+\/$/
		},
		imgs: ".entry-content img",
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: /\s–\s\d+\spics/
		}),
		category: "nsfw2"
	}, {
		name: "Jvflix",
		url: {
			h: ["jvflix.cc"]
		},
		box: [".vip-gallery", 1],
		imgs: ".vip-gallery img",
		button: [4],
		insertImg: [
			["box", 0, ".vip-gallery"], 2
		],
		customTitle: () => fn.title(/ - Jvflix.+$/),
		category: "nsfw2"
	}, {
		name: "Erotic Pics 分類自動翻頁",
		reg: /^https?:\/\/erotic\.pics\//,
		autoPager: {
			ele: "#masonry",
			observer: "#masonry>article",
			next: "span.current+a",
			re: ".wp-pagenavi",
			pageNum: "span.current"
		},
		openInNewTab: "a.entry-thumbnail:not([target=_blank])",
		category: "autoPager"
	}, {
		name: "jimpicotphotography.com",
		url: {
			h: "jimpicotphotography.com"
		},
		imgs: ".con>img,#post-navigation img",
		customTitle: () => fn.dt({
			d: " - jimpicotphotography.com"
		}),
		category: "nsfw2"
	}, {
		name: "Pornotaran.com photo",
		url: {
			h: "pornotaran.com",
			p: ".html",
			e: ".inner-page__desc div:has(img[data-src])"
		},
		imgs: () => fn.srcs(".inner-page__desc img[data-src]").map(e => e.replace("/thumbs", "")),
		button: [4],
		insertImg: [".inner-page__desc div:has(img[data-src])", 2],
		customTitle: ".inner-page__title",
		category: "nsfw2"
	}, {
		name: "Hot Celebs Home",
		url: {
			h: "www.hotcelebshome.com",
			e: ".tiled-gallery__gallery img"
		},
		imgs: () => fn.srcs(".tiled-gallery__gallery img").map(e => e.replace(/(-\d+x\d+)(.\w+)/i, "$2")),
		capture: true,
		customTitle: "h1.entry-title",
		category: "nsfw2"
	}, {
		name: "Pictoa",
		url: {
			h: "www.pictoa.com",
			p: ["/thumbs/", "/albums/"],
			e: "#player img"
		},
		imgs: () => hr.getImgA("#player img", q(".thumb-nav-img a").urls),
		thums: ".thumb-nav-img img",
		button: [4],
		insertImg: ["#player", 2],
		customTitle: ".title>h1",
		css: "#gallery #player{cursor:unset!important}",
		hide: ".ad-placement",
		category: "nsfw2"
	}, {
		name: "PimpAndHost",
		host: ["pimpandhost.com"],
		link: "https://pimpandhost.com/site/trending",
		reg: /^https?:\/\/pimpandhost\.com\/(image|album)\/\d+/,
		init: () => {
			if (/image/.test(location.href)) location.href = q("a[title=Album]").url;
			fn.remove(".flex-block-1,.flex-block-2,#comments,.ano_po");
		},
		imgs: () => hr.getNP("#album-images>.image-block", "li.active+li:not(.next)>a", null, ".pagination").then(() => q("#album-images .image-block a[data-src]")),
		button: [4],
		insertImg: [
			[".summary", 2], 2
		],
		customTitle: ".author-header__album-name",
		category: "nsfw2"
	}, {
		name: "PimpAndHost 隱藏廣告",
		reg: /^https?:\/\/pimpandhost\.com\//,
		init: () => fn.remove(".flex-block-1,.flex-block-2,#comments,.ano_po"),
		hide: ".list-view:not(#main-list-view) .item:not(.image-block)",
		category: "ad"
	}, {
		name: "Fapator",
		host: ["www.fapator.com"],
		reg: /^https?:\/\/www\.fapator\.com\/\?content_id=/i,
		init: () => fn.remove("//div[@class='img' and a[@target and img]]"),
		imgs: "a[data-lightbox]",
		thums: "a[data-lightbox]>img",
		button: [4],
		insertImg: [".fcon+.fapad", 1],
		autoDownload: [0],
		next: "//a[contains(text(),'next photos')]",
		prev: 1,
		css: ".fapad{width:auto !important;height:auto !important}",
		category: "nsfw2"
	}, {
		name: "DirtyShip.com",
		url: {
			h: ["dirtyship.com"],
			p: "/gallery/"
		},
		srcset: ".gallery_grid img,.gallery_grid~img",
		thums: ".gallery_grid img,.gallery_grid~img",
		button: [4],
		insertImg: [
			[".gallery_grid", 0, ".gallery_grid img:not(.FullPictureLoadImage),.gallery_grid~img"], 2
		],
		customTitle: () => fn.title(" - DirtyShip.com"),
		category: "nsfw2"
	}, {
		name: "imx.to gallery",
		host: ["imx.to"],
		reg: /^https?:\/\/imx\.to\/g\/\w+$/i,
		imgs: () => q("img.imgtooltip").map(e => e.src.replace("/t/", "/i/").replace("/upload/small/", "/u/i/")),
		button: [4],
		insertImg: [
			["#content", 2], 2
		],
		category: "nsfw2"
	}, {
		name: "imx.to",
		host: ["imx.to"],
		reg: /^https?:\/\/imx\.to\/i\/\w+$/i,
		autoClick: ".button.blue.large,#continuebutton,a[title='Show gallery']",
		category: "none"
	}, {
		name: "imgbox gallery",
		url: {
			h: ["imgbox.com"],
			p: "/g/"
		},
		imgs: () => fn.srcs("#gallery-view-content img").map(src => fn.rt(src, [
			["thumbs", "images"],
			["_t.", "_o."],
			["_b.", "_o."]
		])),
		button: [4],
		insertImg: [
			["#gallery-view-content", 2], 2
		],
		category: "nsfw2"
	}, {
		name: "1000艺术摄影/169图片大全",
		url: {
			h: ["www.1000ysys.com", "www.169tp.com", "wap.169tp.com"],
			p: /^\/\w+\/\d+\/\d+\/\d+\.html/
		},
		imgs: () => hr.getImg(".big-pic img,.inside_box img", ".pagelist>li:first-child>a", 9),
		button: [4],
		insertImg: [".big-pic,.inside_box", 2],
		autoDownload: [0],
		next: ".fenxianga a,.pre_arct a",
		prev: ".fenxianga a:last-child,.next_arct a",
		hide: ".ad,union",
		category: "nsfw1"
	}, {
		name: "热图站",
		host: ["www.retu8.com", "www.simei8.com"],
		link: "https://www.retu8.com/ji/leisitubaobao.html",
		url: {
			t: "热图站",
			p: /\.htm$/,
			e: ".pp.hh"
		},
		imgs: () => {
			let max = fn.um(".page-show>*");
			if (max > 1) {
				let url = fn.lp.replace(".htm", "");
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${url}${i + 1}.htm`);
				return hr.getImgA(".pp.hh img", links);
			}
			return q(".pp.hh img");
		},
		button: [4],
		insertImg: [".pp.hh", 2],
		customTitle: ".des>h1",
		category: "nsfw1"
	}, {
		name: "热图站M",
		host: ["m.retu8.com", "m.simei8.com"],
		url: {
			e: ["//a[text()='热图站']", "#ImageBox"],
			p: /\.htm$/
		},
		imgs: () => {
			let max = q(".article_page a").maxNum;
			if (max > 1) {
				let url = fn.lp.replace(".htm", "");
				let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${url}${i + 1}.htm`);
				return hr.getImgA("#ImageBox img", links);
			}
			return q("#ImageBox img");
		},
		button: [4],
		insertImg: ["#ImageBox", 2],
		customTitle: ".ArticleHead>h1",
		category: "nsfw1"
	}, {
		name: "人体艺术",
		link: "https://dsqs8.com/",
		url: {
			e: ".umBody",
			p: /^\/post\/\d+/
		},
		init: () => fn.clearAllTimer(),
		box: [".viewall_plugin", 2],
		imgs: ".LightGallery_Item",
		button: [4],
		insertImg: [
			["box", 0, ".viewall_plugin"], 2
		],
		autoDownload: [0],
		next: ".prev>a",
		prev: ".next>a",
		customTitle: "h1.tit",
		category: "nsfw2"
	}, {
		name: "XO福利圖",
		links: [
			"https://kb1.a7xofulitu.com/%E5%84%BF%E6%AD%8C%E4%B8%89%E7%99%BE%E9%A6%96/",
			"https://www.xofulitu521.xyz/xoxo",
			"https://www.xofulitu9ok999.xyz/xoxo",
			"https://diedk1123-ake33i.xofulitu2za222.sbs/xoxo",
			"https://ponds-attract-ducks.xofulitu1qqq111.xyz/xoxo"
		],
		url: {
			t: "XO福利圖",
			h: "xofulitu",
			e: ".picture-wrap img",
			p: /\/art\/pic\/id\/\d+\/$/i
		},
		imgs: () => fn.srcs(".picture-wrap img").filter(src => !src.includes("loading")),
		button: [4],
		insertImg: [".container.clearfix", 2],
		customTitle: () => fn.dt({
			d: [
				/ - XO福利圖.+$/,
				/[\/\s]?[\(\[(【“]\d+[\w\s\\\/\.+-/]+[\)\])】”]|\s?\d+p[\+\s]+\d+v|\s?\d+p\d+v|\s?\d+P|\(\d\)/gi,
				/[\s-]+$/
			]
		}),
		hide: ".custom_link-wrapper,div:has(>#floating-ad),body>*[style*='display: block; z-index: 2147483646; width: 10%;']",
		category: "nsfw2"
	}, {
		name: "XO福利圖 分類自動翻頁",
		url: {
			h: "xofulitu",
			t: "XO福利圖",
			p: /^\/arttype\//i
		},
		autoPager: {
			ele: ".container.clearfix",
			observer: ".container.clearfix .album",
			next: ".paging-item--current+a",
			re: ".pagging-div",
			lazySrc: "img[data-src]",
			pageNum: ".paging-item--current"
		},
		openInNewTab: ".picture-list a:not([target=_blank])",
		hide: ".custom_link-wrapper,div:has(>#floating-ad),body>*[style*='display: block; z-index: 2147483646; width: 10%;']",
		category: "autoPager"
	}, {
		name: "XO福利圖AD",
		url: {
			h: "xofulitu",
			t: "XO福利圖"
		},
		hide: ".custom_link-wrapper,div:has(>#floating-ad),body>*[style*='display: block; z-index: 2147483646; width: 10%;']",
		category: "ad"
	}, {
		name: "多多影视/多多影音/全网影视/哥哥在线/微微资讯/酷酷影音/男人社区 模式A",
		link: "https://xxselove.com/artmv/",
		url: {
			e: [
				".v_nav .sel_wrap",
				"#content_news img"
			],
			p: /^\/art\w+\//
		},
		imgs: () => {
			let pages = q("//div[@id='page']/a[@class='next'][starts-with(text(),'尾')]").one;
			if (pages) {
				let [max] = fn.gt(pages).match(/\d+/);
				let dir = fn.dir(fn.lp);
				let links = fn.arr(max, (v, i) => i == 0 ? dir : dir + `index${i + 1}.html`);
				return hr.getImgA("#content_news img", links);
			}
			return q("#content_news img");
		},
		button: [4],
		insertImg: ["#content_news", 2],
		customTitle: ".title h1 a",
		category: "nsfw2"
	}, {
		name: "多多影视/多多影音/全网影视/哥哥在线/微微资讯/酷酷影音/男人社区 模式B",
		link: "https://m.rusese.org/artmv/",
		url: {
			e: [
				"a.fed-nav-title[href='/artmv/']",
				".fed-arti-content img"
			],
			p: /^\/art\w+\//
		},
		imgs: () => {
			let pages = q(".fed-page-info a[href*='/index']").one;
			if (pages) {
				let [max] = fn.gt(".fed-page-info a:last-child").match(/\d+/);
				let dir = fn.dir(fn.lp);
				let links = fn.arr(max, (v, i) => i == 0 ? dir : dir + `index${i + 1}.html`);
				return hr.getImgA(".fed-arti-content img", links);
			}
			return q(".fed-arti-content img");
		},
		button: [4],
		insertImg: [".fed-arti-content", 2],
		customTitle: ".fed-arti-info h2",
		category: "nsfw2"
	}, {
		name: "多多影视/多多影音/全网影视/哥哥在线/微微资讯/酷酷影音/男人社区 模式C",
		link: "https://xxk555.com/arttype/meituqu.html",
		url: {
			e: [
				"a.fed-nav-title[href='/arttype/meituqu.html']",
				".fed-arti-content img"
			],
			p: "/artdetail/"
		},
		imgs: () => {
			let pages = q("//a[text()='尾页']").one;
			if (pages) {
				let max = q("//a[text()='尾页']").url.match(/\d+/g).at(-1);
				let url = fn.lp.replace(/(-\d+)?\.html$/, "");
				let links = fn.arr(max, (v, i) => i == 0 ? url + ".html" : url + `-${i + 1}.html`);
				return hr.getImgA(".fed-arti-content img", links);
			}
			return q(".fed-arti-content img");
		},
		button: [4],
		insertImg: [".fed-arti-content", 2],
		customTitle: ".fed-arti-info h2",
		category: "nsfw2"
	}, {
		name: "多多影视/多多影音/全网影视/哥哥在线/微微资讯/酷酷影音/男人社区 模式D",
		link: "https://xoxvi.com/arttype/jipinmeinv.html",
		url: {
			e: [
				"#sidebarTogglePcDown",
				".single-video-info-content img"
			],
			p: "/artdetail/"
		},
		imgs: () => hr.getNP(".single-video-info-content>*", ".page-item.active+li>a:not([title='下一页'])", null, ".pagination").then(() => q(".single-video-info-content img")),
		button: [4],
		insertImg: [".single-video-info-content", 1],
		customTitle: ".single-video-title h2",
		category: "nsfw2"
	}, {
		name: "SexBee.TV",
		link: "https://sexbee.tv/arttype/jipinmeinv/",
		host: ["sexbee.tv", "m.beebee.top", "m.beeku.top", "蜜.2025tv.top", "m.aistv.top", "xiaobee.vip", "meimeibee.com"],
		url: {
			e: [
				"#site-header .app-nav-toggle>.lines",
				"#site-header a.logo>img[src='/assets/images/logo.png']",
				"#list_art_common_art_show img"
			],
			st: ["pageContext", "toastMessage"],
			p: "/artdetail/"
		},
		imgs: () => {
			let pages = q(".pagination").one;
			if (pages) {
				let max = q("//a[text()='最後 »']").url.match(/\d+/g).at(-1);
				let links = fn.arr(max, (v, i) => `?mode=async&function=get_block&block_id=list_art_common_art_show&sort_by=&from=${i + 1}`);
				return hr.getImgA("#list_art_common_art_show img", links);
			}
			return q("#list_art_common_art_show img");
		},
		button: [4],
		insertImg: ["#list_art_common_art_show", 2],
		customTitle: ".content-header h2",
		category: "nsfw2"
	}, {
		name: "adultspic色情成人圖片",
		url: {
			h: ["adultspic.com"],
			p: ".html"
		},
		imgs: () => hr.getNP(".wp-block-image", "//a[text()='下一頁']").then(() => q(".wp-block-image img").currentSrcs),
		button: [4],
		insertImg: [".article-content", 2],
		autoDownload: [0],
		next: ".article-nav-prev>a",
		prev: ".article-nav-next>a",
		customTitle: ".article-title",
		hide: ".ssr-content",
		category: "nsfw2"
	}, {
		name: "名腿网",
		host: ["www.mingtuiw.com"],
		reg: /^https?:\/\/www\.mingtuiw\.com\/archives\/\d+\/.+$/,
		exclude: "#div_img_vip",
		imgs: () => hr.getImgA(".entry-content img.attachment-large", q("#thumb_imglist>a").urls).then(srcs => srcs.map(e => e.replace(/-\d+x\d+(\.\w+)$/, "$1"))),
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: () => fn.dt({
			d: /(\d+\/\d+).+/
		}),
		category: "nsfw1"
	}, {
		name: "AhentaiZ.net",
		url: {
			h: "ahentaiz.net",
			e: "#imageContainer"
		},
		imgs: () => {
			fn.sm5();
			let json_url = fn.attr("#imageContainer", "data-json-url");
			let s = new URL(json_url).origin;
			return hr.json(json_url).then(arr => arr.map(e => s + e));
		},
		button: [4],
		insertImgBF: () => fn.waitEle("#imageContainer img[alt]"),
		insertImg: ["#imageContainer", 2],
		customTitle: () => fn.dt({
			d: [
				"Read online Hentai Manga 2025 year",
				" - Ahentaiz",
				/"/g
			]
		}),
		category: "hcomic"
	}, {
		name: "Doujin Hentai",
		url: {
			h: "doujin-hentai.net",
			P: /^\/[\w-]+\/$/
		},
		box: [".post-content", 2],
		srcset: ".post-content~p>img,.post-content~img",
		button: [4, 4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".post-content~p,.post-content~img,.post-content~center"),
		customTitle: () => fn.getText([".post-titles h4", ".post-titles h2"]),
		category: "hcomic"
	}, {
		name: "Prismblush",
		url: {
			h: "prismblush.com",
			p: "/comic/"
		},
		imgs: () => {
			let links = q(".level-0", ".comic-nav-jumptocomic").map(e => e.value);
			return hr.getImgA("#comic img", links);
		},
		button: [4],
		insertImg: ["#comic", 2],
		endColor: "white",
		customTitle: "h1.elementor-heading-title",
		category: "hcomic"
	}, {
		name: "Xpicvid",
		host: ["www.niacg.com", "www.susmeat.com"],
		url: {
			e: {
				s: ".footer",
				t: ["逆次元", "Xpicvid"]
			},
			p: /^\/(moeupup-\d-\d+\.html|showinfo-\d+-\d+-\d\.html)$/,
			ee: ".dplayer-container,.episode"
		},
		imgs: () => hr.getNP(".row.thumb-overlay-albums img,.artwork-container .artwork img", ".pagination li.active+li>a:not(.prevnext)"),
		button: [4],
		insertImg: [".row.thumb-overlay-albums,.artwork-container .artwork", 2],
		autoDownload: [0],
		next: ".ph-active a[href$=html]:text:下一页|下一頁",
		prev: ".ph-active a[href$=html]:text:上一页|上一頁",
		customTitle: () => {
			let url = q("//a[span[text()='漫畫簡介']] | //a[span[text()='漫画简介']]").url;
			if (url) {
				return hr.fetchDoc(url).then(dom => {
					let comicName = q(".panel-heading h1", dom).text;
					let episode = q(".episode", dom).one;
					return episode ? comicName + " - " + q(".panel-heading>.pull-left").text : comicName;
				}).then(text => fn.dt({
					t: text,
					d: [
						/\(\d+[\w\s\.\+-]+\)/i,
						/[\d+[\w\s\.\+-]+]/i
					]
				}));
			}
			return document.title;
		},
		category: "hcomic"
	}, {
		name: "DocTruyen3Q",
		host: ["doctruyen3qhub.org"],
		url: {
			e: "meta[property='og:site_name'][content^=DocTruyen3Q]",
			p: "/chapter-"
		},
		imgs: () => q(".list-image-detail>div[id].page-chapter>img").map(e => e.src),
		button: [4],
		insertImg: [".list-image-detail", 2],
		autoDownload: [0],
		next: "a.previous-chapter",
		prev: "a.next-chapter",
		chapters: {
			target: "#select_chapter>option",
			sort: "r"
		},
		customTitle: [".breadcrumb>li", 1, 2],
		category: "hcomic"
	}, {
		name: "Manga Lotus/Yaoi Manga Online/Yaoi DJ/Yaoi Manga",
		url: {
			h: ["mangalotus.com", "yaoimangaonline.com", "yaoidj.com", "harlock.co.uk"]
		},
		box: [".meta-tags", 1],
		imgs: ".entry-content img",
		button: [4],
		insertImg: [
			["box", 0, ".entry-content .code-block,.entry-content p:has(img)"], 2
		],
		next: ".nav-links a[rel=next]",
		prev: ".nav-links a[rel=previous]",
		chapters: () => q(".mpp-toc a,.mpp-toc span").map(e => e.textContent == "Intro" ? null : ({
			text: e.textContent,
			url: e.classList.contains("current") ? fn.url : e.href
		})).filter(Boolean),
		customTitle: ".entry-title",
		category: "hcomic"
	}, {
		name: "Naruto hentai Doujins/Ai Generated Hentai MILFS",
		host: ["narutodoujins.com", "syntheticgirls.com"],
		reg: [
			/^https?:\/\/(www\.)?narutodoujins\.com\/\d+\//,
			/^https?:\/\/(www\.)?syntheticgirls\.com\/\d+\//
		],
		imgs: async () => {
			let srcs = [];
			let links;
			if (q(".post-items-list").one) {
				let pages = q(".page-item-next").one;
				if (pages) {
					let max = fn.gt(".page-item-next", 2);
					links = fn.arr(max, (v, i) => i == 0 ? fn.lp : fn.lp + `?page=${i + 1}`);
					srcs = await hr.getEle(links, ".post-items-list a").then(eles => {
						links = eles.map(a => a.href);
						return hr.getImgA(".lightbox", links);
					});
				} else {
					links = q(".post-items-list a").urls;
					srcs = await hr.getImgA(".lightbox", links);
				}
			} else if (q(".post-images-carousel-wrap").one) {
				links = q(".post-images-carousel-wrap a").urls;
				srcs = await hr.getImgA(".lightbox", links);
			} else {
				srcs = fn.srcs(".lightbox");
			}
			let hd = srcs.filter(src => src.includes("/original/"));
			if (hd.length) {
				return hd;
			}
			return srcs;
		},
		capture: true,
		customTitle: "h1.text-center",
		category: "hcomic"
	}, {
		name: "TMOHentai",
		url: {
			h: ["www.tmohentai.app", "tmohentai.app"],
			p: "/library/",
			e: ".md-preview-read-btn"
		},
		box: [".md-info-card+.row", 2],
		imgs: () => hr.getImgA(".reader-img-wrap>img", [q(".md-preview-read-btn").url]),
		button: [4],
		insertImg: [".md-info-card+.row", 2],
		customTitle: "#md-title",
		category: "hcomic"
	}, {
		name: "GotoFap",
		url: {
			h: ["gotofap.org"]
		},
		box: ["#gallery-border", 1],
		imgs: () => hr.getNP(".gallery>*", "a.next.page-numbers-post", null, ".page-links").then(() => hr.getImgA(".entry-content img", q(".gallery-item a").urls)),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#gallery-border"),
		customTitle: "article h1",
		hide: "div[align]:has(script)",
		category: "hcomic"
	}, {
		name: "ILikeComiX",
		url: {
			h: ["ilikecomix.com"],
			e: ".entry-content img[data-jg-srcset],.pswp-gallery__item a"
		},
		imgs: () => q(".entry-content img[data-jg-srcset],.pswp-gallery__item a").srcsets.map(src => src.replace("-scaled", "")),
		button: [4],
		insertImg: [".entry-content", 2],
		customTitle: ".entry-title",
		category: "hcomic"
	}, {
		name: "MyAdultComics",
		url: {
			h: ["myadultcomics.com"],
			p: "/read"
		},
		box: [".idbook", 1],
		imgs: () => {
			let str = Code.arr("template").join("");
			let node = fn.html(str);
			return q("img", node);
		},
		button: [4],
		insertImg: [
			["box", 0, ".idbook"], 2
		],
		customTitle: "#TOP",
		category: "hcomic"
	}, {
		name: "ComicsXD",
		url: {
			h: ["comicsxd.com"],
			e: ".pps-slide-count"
		},
		imgs: () => {
			let max = fn.gt(".pps-slide-count").match(/\d+/g).at(-1);
			let links = fn.arr(max, (v, i) => i == 0 ? fn.lp : `${fn.lp}${i + 1}/`)
			return hr.getImgA(".pps-content img", links);
		},
		button: [4],
		insertImg: [".pps-content", 2],
		insertImgAF: () => fn.hideEle(".pps-slider-nav"),
		customTitle: ".entry-title",
		category: "hcomic"
	}, {
		name: "MANGA HENTAI",
		url: {
			h: ["adulthentai.net", "www.manga-hentai.net", "hentaiweb.net", "hentai-freak.com"],
		},
		box: [".thumbs", 2],
		imgs: () => {
			let links = q(".thumbs:not(:last-child) a").urls;
			return hr.getImgA(".big-picture img", links);
		},
		thums: ".thumbs:not(:last-child) img",
		button: [4],
		insertImg: [
			["box", 0, ".thumbs"], 2
		],
		customTitle: ".wrapper h2",
		category: "hcomic"
	}, {
		name: "Neko Hentai",
		host: ["neko-hentai.net"],
		reg: /^https?:\/\/neko-hentai\.net\//i,
		include: "#manga-content img",
		imgs: "#manga-content img",
		button: [4],
		insertImg: ["#manga-content", 2],
		endColor: "white",
		customTitle: () => fn.title(/ - Neko Hentai.*$/),
		category: "hcomic"
	}, {
		name: "EroKomics",
		url: {
			h: ["erokomics.com"],
			e: ".ha_details_container"
		},
		box: [".custom-gallery", 1],
		imgs: () => hr.getImgA("#shorts_container img", [fn.lp + "?mode=play"]),
		button: [4],
		insertImg: [
			["box", 0, ".custom-gallery"], 2
		],
		customTitle: ".ha_heading",
		category: "hcomic"
	}, {
		name: "Manhwaraw18",
		url: {
			h: ["manhwaraw18.com"],
			p: "/chapter"
		},
		imgs: "#readerPages img",
		button: [4],
		insertImg: ["#readerPages", 2],
		next: "a[title='Next Chapter']",
		prev: "a[title='Previous Chapter']",
		chapters: () => q("#chapterSelect>option").map(o => ({
			text: o.text,
			url: fn.wurl(o.value)
		})).reverse(),
		customTitle: [".reader-sidebar-title", "#chapterSelect>option[selected]"],
		category: "hcomic"
	}, {
		name: "HDpornComics",
		url: {
			h: "hdporncomics.com",
			e: [".my-gallery.scrollmenu", "#infoBox>h1"]
		},
		imgs: ".my-gallery a[data-size]",
		thums: ".my-gallery a[data-size] img",
		button: [4],
		insertImg: [
			[".postContent>.items-center,#likeDislikeVue", 2], 2
		],
		customTitle: () => fn.dt({
			s: "#infoBox>h1",
			d: [
				" – Gay Manga",
				" Comic Porn"
			]
		}),
		category: "hcomic"
	}, {
		name: "HDpornComics",
		url: {
			h: "hdporncomics.com",
			p: "/chapter"
		},
		imgs: "#imageContainer img",
		button: [4],
		insertImg: ["#imageContainer", 2],
		autoDownload: [0],
		next: "#nextChapter a",
		prev: "#previousChapter a",
		chapters: {
			node: "#selectChapter",
			target: "option",
			sort: "r",
			cb: (text, url) => {
				if (!url.endsWith("/")) {
					url = url + "/";
				}
				return {
					text,
					url
				}
			}
		},
		customTitle: [".list-reset a,option[selected]", 2, 3],
		category: "hcomic"
	}, {
		name: "Hanime1.me",
		url: {
			h: ["hanimeone.me"],
			p: /^\/comic\/\d+$/
		},
		box: [".comics-thumbnail-wrapper", 2, 1280],
		imgs: () => {
			fn.sm5();
			let url = q(".comics-thumbnail-wrapper a").one;
			return hr.fetchDoc(url).then(dom => {
				let dir = q("#current-page-image", dom).one.dataset.prefix;
				let extensions = Code.arr("extensions", dom);
				return extensions.map((e, i) => {
					if (dir.includes("nhentai")) {
						return `${dir}${(i + 1)}.${fn.ex(e)}`;
					}
					return dir + e + ".jpg";
				});
			});
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".comics-thumbnail-wrapper"),
		endColor: "white",
		customTitle: () => fn.getText(["h4.title", "h3.title"]),
		referer: "src",
		category: "hcomic"
	}, {
		name: "DoujinHentai",
		url: {
			h: ["doujinhentai.net"],
			p: "/manga-hentai/",
			e: ".manga-image"
		},
		imgs: () => Object.values(Code.obj("pageUrls")),
		capture: true,
		customTitle: [".desktop-manga-title>h1", ".desktop-manga-title>p"],
		category: "hcomic"
	}, {
		name: "IMHentai格式",
		url: {
			h: ["imhentai.xxx", "hentairox.com", "hentaiera.com", "comicporn.xxx", "hentaiclap.com", "www.hentaienvy.com", "hentaienvy.com", "hentaifox.com"],
			p: "/gallery/"
		},
		box: ["#comments_div,.gallery_second:has(#append_thumbs),.gallery_thumbs,.gallery_bottom"],
		imgs: async () => {
			let code = fn.fs("var g_th =");
			if (!code) {
				let url = fn.gu(".left_cover a,.gp_read a,.gt_left a,.gallery_left a,.hz-gallery-read");
				code = await hr.getCode(url, {
					mode: "dom",
					key: "var g_th ="
				});
			}
			let g_th = fn.textToObject(code, "g_th");
			return hr.hentai_t(`/${fn.lh == "hentaifox.com" ? "includes" : "inc"}/thumbs_loader.php`).then(srcs => fn.dir(srcs.at(0))).then(dir => Object.entries(g_th).map(([i, v]) => `${dir}${i}.${fn.ex(v.split(",").at(0))}`));
		},
		button: [4],
		insertImg: ["box", 2],
		customTitle: () => fn.getText([".info>h1", ".gp_top_right h1", ".gt_right h1", ".subtitle", "h1"]),
		category: "hcomic"
	}, {
		name: "HentaiZap",
		url: {
			h: ["hentaizap.com"],
			p: "/gallery/"
		},
		box: [".hz-gallery-pages-section"],
		imgs: async () => {
			fn.sm5();
			let url = fn.gu(".hz-gallery-read");
			let dom = await hr.fetchDoc(url);
			let code = fn.gt("#readerPagesJson", 1, dom);
			let arr = JSON.parse(code);
			let src = fn.src(".hz-gallery-thumb img");
			let dir = fn.dir(src);
			return arr.map(({
				page,
				ext
			}) => `${dir}${page}.${fn.ex(ext)}`);
		},
		button: [4],
		insertImg: ["box", 2],
		customTitle: "#gallery-title",
		category: "hcomic"
	}, {
		name: "エロモモ",
		url: {
			h: "momoniji.com",
			e: "#cif"
		},
		imgs: () => hr.getImgA("#cif img", ".singlepager a"),
		capture: true,
		customTitle: "main h1",
		category: "hcomic"
	}, {
		name: "エロ画像まとめ えっちなお姉さん。",
		url: {
			h: "hnalady.com",
			p: "/blog-entry-"
		},
		imgs: () => q(".entry_body img,#more img,.entry_more img").filter(e => !e.closest(".relation_entry,.wakupr")),
		capture: true,
		autoDownload: [0],
		next: ".page_next a,.next_entry a",
		prev: ".page_prev a,.prev_entry a",
		customTitle: "#main h2,.big_title h2",
		category: "hcomic"
	}, {
		name: "キモ男陵辱同人道",
		url: {
			h: "kimootoko.net",
			p: "/archives/"
		},
		imgs: () => q(".post_content .midashigazou img,.post_content a[data-wpel-link]:not(.syousaimoji):has(img)").filter(e => !e.closest(".fanzakiji-hako,.pickup")),
		capture: true,
		customTitle: ".c-postTitle__ttl",
		category: "hcomic"
	}, {
		name: "H研-成年コミック研究会",
		url: {
			h: "www.b-hentai.com",
			p: ".html"
		},
		imgs: () => hr.getImgA(".content img", ".article-pagination a"),
		autoDownload: [0],
		next: "//a[div[div[div[text()='Previous']]]]",
		prev: "//a[div[div[div[text()='Next']]]]",
		customTitle: "h1.post-title",
		category: "hcomic"
	}, {
		name: "XlecX",
		url: {
			h: ["xlecx.one"],
			p: /^\/[^\.\/]+\.html$/
		},
		imgs: () => fn.srcs(".ug-thumb-image,img[data-src]").map(e => e.replace("thumbs/", "")),
		button: [4],
		insertImg: [
			[".page__col-left", 0], 2
		],
		customTitle: ".page__col-left>h1",
		category: "hcomic"
	}, {
		name: "8muses",
		host: ["comics.8muses.com"],
		reg: /^https?:\/\/comics\.8muses\.com\/comics\/album\/[\w-]+\/[\w-]+\//i,
		include: ".gallery",
		exclude: ".image-title>.title-text",
		imgs: () => {
			let srcs = q("img[data-src]").map(e => e.dataset.src.replace("/image/th/", "https://comics.8muses.com/image/fl/"));
			let xhrNum = 0;
			fn.showMsg("hr.xhrHEAD...", 0);
			return srcs.map(async src => {
				let res = await hr.xhrHEAD(src);
				fn.showMsg(`hr.xhrHEAD(${xhrNum+=1}/${srcs.length})`, 0);
				let status = res.status;
				return status == 404 ? src.replace("/fl/", "/fm/") : src;
			});
		},
		button: [4],
		insertImg: [
			[".gallery", 2], 1
		],
		endColor: "white",
		category: "hcomic"
	}, {
		name: "ReadManga18/ManhwaHub/Manga18fx/MangaDNA/MangaDass/Manhwa18",
		url: {
			h: ["www.readmanga18.com", "readmanga18.com", "manhwahub.me", "manga18fx.com", "mangadna.com", "mangadass.com", "manga18.me", "manhwa18.cc", "metruyen18.net"],
			p: "/chapter-"
		},
		imgs: ".read-content img",
		button: [4],
		insertImg: [".read-content", 2],
		autoDownload: [0],
		next: "a.navi-change-chapter-btn-next",
		prev: "a.navi-change-chapter-btn-prev",
		chapters: {
			node: "select.navi-change-chapter",
			target: "option",
			sort: "r",
			cb: (text, _, o) => {
				let url;
				if (fn.lp.endsWith("/")) {
					url = fn.wurl(o.dataset.c, fn.url, -2);
				} else {
					url = fn.wurl(o.dataset.c, fn.url);
				}
				return {
					text,
					url
				}
			}
		},
		customTitle: ".read-manga h1,.entry-title",
		hide: "#detect_modal,.modal-backdrop",
		category: "hcomic"
	}, {
		name: "爱漫画网",
		host: ["www.iimhw.com", "iimhw.com", "www.iimhw.top", "eemh.top", "mhgou.com", "mhmao.com", "mhjia.com", "mhxia.com", "8cmh.com", "mhzan.com", "ppmhw.com", "mhzhu.com", "rhmhw.com", "www.ssmhw.com"],
		url: {
			e: "a#trang-chu.logo-h1",
			p: "/chapter"
		},
		imgs: () => q(".chapter-content img:not([data-original*='?'])"),
		button: [4],
		insertImg: [".chapter-content", 2],
		next: "a#next_chap[href$=html]",
		prev: "a#prev_chap[href$=html]",
		chapters: () => {
			let a = q("a:has(.glyphicon-list-alt)").one;
			return hr.fetchDoc(a).then(dom => {
				const get = (_dom) => q(".title-list:not([id])+.row .list-chapter a", _dom).map(a => ({
					text: a.title,
					url: a.href
				}));
				let pages = q("//a[text()='Last']", dom).one;
				if (pages) {
					let doms = [dom];
					let max = Number(fn.getUSP("p", pages.href)) - 1;
					let links = fn.arr(max, (v, i) => `${a.href}?p=${i + 2}`);
					let resArr = links.map(fn.fetchDoc);
					return Promise.all(resArr).then(res => {
						doms = [...doms, ...res];
						return doms.map(get).flat();
					});
				}
				return get(dom);
			});
		},
		customTitle: [".truyen-title", ".chapter-title"],
		hide: "#goTop~div[class][style]",
		category: "hcomic"
	}, {
		name: "丽图·污漫画",
		url: {
			h: "litu100.xyz",
			p: "comic/id-"
		},
		imgs: ".comic-images img",
		button: [4],
		insertImg: [".comic-images", 2],
		autoDownload: [0],
		next: "a.next",
		prev: "a.prev",
		chapters: {
			target: "//h3[text()='漫画章节']/following-sibling::a"
		},
		customTitle: () => fn.dt({
			s: ".breadcrumb span:nth-child(2)",
			d: "首页"
		}),
		css: "body{overflow:unset!important}",
		hide: ".banner_ad,.swal2-container,.article:has(.media),.jquery-modal.blocker.current,.push-top-container",
		category: "hcomic"
	}, {
		name: "紳士漫畫",
		link: "https://wnacg.date/,https://wnacg01.org/",
		//第3方API直接取得"寫真 & Cosplay"分類一整頁的畫廊資料
		//https://meoden.net/gallery?page=1&site=WN&siteTag=
		//https://meoden.net/api/gallery/wnacg?page=1
		url: {
			t: ["紳士漫畫", "绅士漫画"],
			p: "/photos-index-aid-"
		},
		init: () => {
			fn.remove(".sh,.dlh,div:not([id],[class],[style]):has(>a>img[alt]),iframe,.dv-section:has(.dv-notice)");
			fn.remove("//body/div[a[img]] | //div[@class='Introduct']/a[div[img]] | //div[a[img[@alt='Game Tip']]]");
			fn.addMutationObserver(() => fn.remove(".sh,.dlh,div:not([id],[class],[style]):has(>a>img[alt]),iframe"));
		},
		box: [".gallary_wrap,.dv-section:has(.dv-desc-text)", 2],
		imgs: () => {
			fn.sm5();
			let [galleryId] = fn.lp.match(/\d+/);
			let dataUrl = `/photos-item-aid-${galleryId}.html`;
			return hr.text(dataUrl).then(text => {
				let array = fn.textToArray(text, "page_url");
				return array.map(url => fn.rt(url, [
					[/^http:\/\//, "https://"],
					[/^\/\//, "https://"]
				]));
			});
		},
		button: [4],
		insertImg: [
			["box", 0, ".gallary_wrap"], 2
		],
		customTitle: () => fn.dt({
			d: / - 紳士漫畫.*$| - 绅士漫画.*$|-紳士漫畫.*$|-绅士漫画.*$/
		}),
		category: "hcomic"
	}, {
		name: "宅男漫画",
		host: ["www.znmh.net"],
		url: {
			t: "宅男漫画",
			p: "/view/",
			st: "encodedImages"
		},
		init: () => fn.clearAllTimer(3),
		box: ["#imageContainer", 1],
		imgs: () => {
			let encodedImages = Code.str("encodedImages");
			encodedImages = atob(encodedImages);
			let images = "";
			for (let i = 0, n = encodedImages.length; i < n; i++) {
				images += String.fromCharCode(encodedImages.charCodeAt(i) ^ "comicreader2024".charCodeAt(i % 15));
			}
			return JSON.parse(images);
		},
		button: [4],
		insertImg: [
			["box", 0, "#imageContainer"], 2
		],
		customTitle: () => fn.title(" - 宅男漫画"),
		hide: "#inviteModal,.float-ad",
		category: "hcomic"
	}, {
		name: "宅男漫画",
		host: ["www.znmh.net"],
		url: {
			t: "宅男漫画",
			p: /^\/\w+$/
		},
		MutationObserver: () => q(".gallery-item[onclick]").for(item => {
			item.innerHTML = `<a href="${item.getAttribute("onclick").split("'").at(1)}" target="_blank">${item.innerHTML}</a>`;
			item.removeAttribute("onclick");
		}),
		hide: ".float-ad",
		category: "none"
	}, {
		name: "PacHub",
		url: {
			h: ["pachub.net"],
			p: "/read/"
		},
		imgs: "#comic-pages img",
		button: [4],
		insertImg: ["#comic-pages", 2],
		autoDownload: [0],
		next: {
			s: "#comic-read-nav a",
			t: "下一话"
		},
		prev: {
			s: "#comic-read-nav a",
			t: "上一话"
		},
		chapters: {
			target: "[role=dialog] a",
			textNode: "span",
			cb: (t, url) => ({
				text: `第${t}话`,
				url
			})
		},
		customTitle: () => {
			let [m, c] = q("#comic-read-header>a,#comic-read-header h1+span").texts;
			[c] = c.match(/\d+/);
			return `${m} - 第${c}话`;
		},
		category: "hcomic"
	}, {
		name: "Roku Hentai",
		host: ["rokuhentai.com"],
		reg: /^https?:\/\/rokuhentai\.com\/\w+\/\d+$/,
		imgs: ".site-reader__image",
		button: [4],
		insertImg: [".site-reader", 2],
		customTitle: () => fn.title(" - Roku Hentai"),
		css: ".site-reader--right-to-left,.site-reader--left-to-right{overflow-x:auto !important;overflow-y:auto !important}.site-reader{padding-bottom:0px !important}.site-reader{display:block !important}",
		hide: ".site-bottom-ad-slot",
		category: "hcomic"
	}, {
		name: "177 漫画/XXIAV寫真館",
		url: {
			h: [/177pic/, "www.xxiav.com"],
			p: /^\/html\/\d+\/\d+\/\d+\.html$/
		},
		imgs: () => hr.getImg(".single-content img[data-lazy-src]", ".page-links a", 10),
		button: [4],
		insertImg: [".single-content", 2],
		autoDownload: [0],
		next: "a[rel=prev]",
		prev: "a[rel=next]",
		customTitle: ".entry-title",
		category: "hcomic"
	}, {
		name: "18H 宅宅愛動漫",
		host: ["18h.animezilla.com"],
		reg: /^https?:\/\/18h\.animezilla\.com\/manga\/\d+/,
		imgs: () => hr.getImgO("#comic", ".last", "4", 0, ".entry-title,.wp-pagenavi", siteUrl, 0),
		button: [4],
		insertImg: ["#page-current", 1],
		customTitle: () => fn.dt({
			s: "h1.entry-title",
			d: /\s?\[\d+P\](\s?-\s?\d+\/\d+\s?)?/i
		}),
		category: "hcomic"
	}, {
		name: "色漫網",
		host: ["www.cartoon18.com", "www.cartoon18.org"],
		url: {
			e: ["//span[text()='色漫網']|//span[text()='色漫网']", ".title+div>a.btn-info"],
			p: "/v/"
		},
		box: [".row.mb-4", 2],
		imgs: () => {
			fn.sm5();
			let urls = q(".title+div>a.btn-info").urls;
			return hr.getImgA("img[data-src],#lightgallery a,.gallary a", urls, 2000);
		},
		button: [4],
		insertImg: ["box", 3],
		hide: "#chromeModal,.modal-backdrop,#_iconsTop,#_iconsBottom,#_imageBottom",
		category: "hcomic"
	}, {
		name: "色漫網",
		url: {
			e: ["//span[text()='色漫網']|//span[text()='色漫网']", ".title+div>a>i.fa-play"],
			p: "/v/"
		},
		box: [".title~.row"],
		imgs: () => {
			fn.sm5();
			let url = q(".title+div>a").url;
			return hr.fetchDoc(url).then(dom => q("img[data-src]", dom).length ? q("img[data-src]", dom) : q("#lightgallery a,.gallary a", dom));
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: (parent) => {
			parent.className = "";
			let modalOpen = q(".modal-open").one;
			if (modalOpen) modalOpen.classList.remove("modal-open");
		},
		hide: "#chromeModal,.modal-backdrop,#_iconsTop,#_iconsBottom,#_imageBottom",
		category: "hcomic"
	}, {
		name: "色漫网",
		host: ["www.cartoon18.com"],
		reg: /^https?:\/\/www\.cartoon18\.com\/([\w-]+\/)?story\/\d+\/full/,
		imgs: () => q("img[data-src]").length ? q("img[data-src]") : q("#lightgallery a,.gallary a"),
		button: [4],
		insertImg: ["#lightgallery,.gallary", 2],
		autoDownload: [0],
		next: "//a[text()='下一話']",
		prev: "//a[text()='上一話']",
		hide: "#_iconsTop,#_iconsBottom,#_imageBottom",
		category: "hcomic"
	}, {
		name: "开心看漫画",
		host: ["kxmanhua.com"],
		url: {
			t: "开心看漫画",
			p: "/detail/"
		},
		imgs: ".blog__details__content img",
		button: [4],
		insertImg: [".blog__details__content", 2],
		endColor: "white",
		autoDownload: [0],
		next: "//a[text()='下一话'][@href]",
		prev: "//a[text()='上一话'][@href]",
		chapters: {
			url: ".view-fix-top-bar a",
			target: ".chapter_list a",
			sort: "r"
		},
		customTitle: () => q("meta[name='manga-name']").attr("content") + " - " + q("meta[name='chap-title']").attr("content"),
		hide: ".fixed-ads,.ad-banner,.blog__details__content~*",
		category: "hcomic"
	}, {
		name: "18H漫画",
		host: ["18hmanga.com", "18hmanga.cyou"],
		reg: /^https?:\/\/(18hmanga\.(com|cyou))\/[^\/]+\/$/,
		init: () => fn.remove(".code-block,#secondary,body>div[id][class][style]"),
		imgs: ".entry-content>img,.entry-content>p>img,.entry-content>div>img",
		button: [4],
		insertImg: [".entry-content", 2],
		autoDownload: [0],
		next: "#content .g1-teaser-prev",
		prev: "#content .g1-teaser-next",
		customTitle: ".entry-title",
		css: ".g1-column-2of3{width:100%!important}",
		category: "hcomic"
	}, {
		name: "COMIC18",
		host: ["www.comic18.cc"],
		reg: /^https?:\/\/www\.comic18\.cc\/\w+\/\d+\.html$/,
		init: () => fn.waitEle(".article-body>img").then(e => fn.createImgBox(e, 1)),
		imgs: ".article-body>img",
		button: [4],
		insertImg: [
			["box", 0, ".article-body>img"], 2
		],
		autoDownload: [0],
		next: "a.entry-page-prev[href$=html]",
		prev: "a.entry-page-next[href$=html]",
		customTitle: ".detail-title",
		category: "hcomic"
	}, {
		name: "18漫畫",
		host: ["18mh.org", "m.18mhx.com"],
		url: {
			e: ["meta[property='og:site_name'][content='18漫畫']", "#chapterContent"],
			p: "/manga/"
		},
		imgs: () => fn.waitEle([".touch-manipulation img"]),
		button: [4],
		insertImg: [".touch-manipulation", 2],
		autoDownload: [0],
		next: "#nextChapterLink",
		prev: "#preChapterLink",
		chapters: {
			api: () => {
				let id = q("#chapterContent").attr("data-ms");
				return `/manga/get?mid=${id}&mode=all`;
			},
			target: "#allchapterlist a",
			cb: (t, url, e) => ({
				text: e.dataset.ct,
				url
			})
		},
		customTitle: ["ol.inline-flex>li:nth-child(2) a", "ol.inline-flex>li:nth-child(3) a"],
		category: "hcomic"
	}, {
		name: "HentaiVn",
		host: ["www.hentaivnx.com", "www.hentaivnx.net", "hentaivnx.vip", "www.hentaivnx.live", "www.hentaivn.college", "raw18.vip"],
		url: {
			t: ["HentaiVn", "raw"],
			p: "/chapter",
			e: ".reading-detail",
			ee: ".lucide-list"
		},
		init: () => fn.waitEle(".select-chapter>option"),
		imgs: ".page-chapter img",
		button: [4],
		insertImg: [".reading-detail", 2],
		autoDownload: [0],
		next: "a.next:not([href='#'])",
		prev: "a.prev:not([href='#'])",
		chapters: () => hr.json("/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=" + fn.attr(".chapter-id,.follow-link", "data-cid")).then(json => json.chapters.map(({
			name,
			url
		}) => ({
			text: name,
			url
		})).reverse()),
		customTitle: [".breadcrumb span[itemprop=name]", 2, 3],
		hide: ".banners-all",
		category: "hcomic"
	}, {
		name: "Pizzaria Scan",
		url: {
			h: ["pizzariacomics.com"],
			p: "-capitulo-"
		},
		init: () => fn.wait(() => fn.fs("ch_image")),
		imgs: () => {
			let code = Code.slice("ch_image", ["$.reader(", ");"]);
			return Object.values(fn.run(code).array).map(e => e.image);
		},
		capture: true,
		autoDownload: [0],
		next: ".nvs>a:has(.fa-chevron-right)",
		prev: ".nvs>a:has(.fa-chevron-left)",
		chapters: async () => {
			let fullHtml = "";
			let id = q("a[data-post-id]").attr("data-post-id");
			let page = 1;
			let hasNextPage = false;
			do {
				let formData = new FormData();
				formData.append("action", "load_chapters");
				formData.append("post_id", id);
				formData.append("count", 1000);
				formData.append("paged", page);
				formData.append("order", "ASC");
				let htmlText = await hr.text("/wp-admin/admin-ajax.php", {
					body: formData,
					method: "POST"
				});
				fullHtml += htmlText;
				if (htmlText.includes("Próximo")) {
					hasNextPage = true;
					page++;
				} else {
					hasNextPage = false;
				}
			} while (hasNextPage);
			let node = fn.html(fullHtml);
			return q("a:has(span.text-xs)", node).map(a => ({
				text: q(".text-xs", a).text,
				url: a.href
			}));
		},
		customTitle: ".entry-title",
		category: "hcomic"
	}, {
		name: "SXKOMIX.com/SEXKOMIX2.com",
		url: {
			h: ["sxkomix.com", "sexkomix2.com"],
			p: "/comics"
		},
		home: "/home/",
		box: ["#comix_pages_ul", 1],
		imgs: "#comix_pages_ul img",
		button: [4],
		insertImg: [
			["box", 0, "#comix_pages_ul"], 2
		],
		customTitle: () => fn.dt({
			s: "#comix_description h1",
			d: "by sexkomix2.com."
		}),
		category: "comic"
	}, {
		name: "Hennojin",
		url: {
			h: ["hennojin.com"],
			p: "/manga/"
		},
		box: ["#respond", 1],
		imgs: () => hr.getImgA(".slideshow-container img", [fn.gu("//a[text()='Read Online']")]),
		button: [4],
		insertImg: ["box", 2],
		customTitle: () => [...q(".manga-title").one.childNodes].filter(e => e.nodeType == 3).at(0).textContent,
		category: "hcomic"
	}, {
		name: "MangaXL",
		url: {
			h: "mangaxl.com",
			s: "read_manga"
		},
		init: () => fn.waitEle(".all-pages-dialog__content-list>.active"),
		imgs: () => hr.getImgA(".pages-slider__wrapper>img", ".all-pages-dialog__content-list>a:not(.active)"),
		button: [4],
		insertImg: [".pages-slider__wrapper", 2],
		customTitle: ".read-page__header-title",
		category: "hcomic"
	}, {
		name: "TruyenHentaiVN",
		host: ["truyenhentaivn.store"],
		url: {
			e: [".site-logo img[alt=TruyenHentaiVN]", ".chapter-content", "h1.name"]
		},
		imgs: ".chapter-content img",
		button: [4],
		insertImg: [".chapter-content", 2],
		autoDownload: [0],
		next: "//a[text()='Chap sau ']",
		prev: "//a[text()=' Chap trước']",
		chapters: {
			url: ".rank-math-breadcrumb a",
			urlIndex: 1,
			target: ".chap-list a",
			textNode: ".name",
			sort: "r"
		},
		customTitle: () => fn.dt({
			s: "h1.name",
			d: " - Oneshot"
		}),
		hide: "body>div[style]:has(a[href$=go])",
		category: "hcomic"
	}, {
		name: "TruyenHentaiVN AD",
		url: {
			e: ".site-logo img[alt=TruyenHentaiVN]"
		},
		hide: "body>div[style]:has(a[href$=go])",
		category: "ad"
	}, {
		name: "Thư Viện Hentai",
		url: {
			h: "hentai.yoga",
			p: ["/gallery/open/", "/comics/open/"]
		},
		box: [".main-gallery-section", 2],
		imgs: () => Code.arr("mainEntity").filter(e => e["@type"] == "ImageObject").map(e => e.url),
		button: [4],
		insertImg: ["box", 2],
		customTitle: ".gallery-page-title",
		category: "hcomic"
	}, {
		name: "哇嘎哒/一之涩/哈塔兹/布罗塔/物二/奥特",
		host: ["www.wgada.com", "1zse.com", "hatazi.com", "www.bulota.com", "aotem.org", "522160.xyz"],
		url: {
			t: ["一之涩", "哈塔兹", "布罗塔", "物二", "奥特", "哇嘎哒", "网站标题"],
			p: /^\/index\.php\/\d+\.html/
		},
		init: () => {
			fn.addMutationObserver(() => fn.remove("#eruda,.__chobitsu-hide__,#lightboxOverlay,#lightbox"));
			fn.clearAllTimer();
		},
		imgs: () => hr.getImg(".context img", "span.pages,.pagelist a", 7),
		button: [4],
		insertImg: [".context", 2],
		autoDownload: [0],
		next: ".post-previous a",
		prev: ".post-next a",
		customTitle: () => fn.dt({
			s: "#content h1",
			d: /\[\d+P\]|〈|〉/gi
		}),
		hide: "body>*:not(#head,.container,#footer,#tbox,[id^='Full'],[class^='Full'],[id^='pv-'],[class^='pv-'],#comicRead,#fab,*[class^=fancybox])",
		category: "hcomic"
	}, {
		name: "杜牙/那露/勇吉拉/汉库克",
		host: ["www.duteya.com", "naluhd.com", "www.yojila.com", "www.hakuk.com"],
		url: {
			t: ["杜牙", "那露", "勇吉拉", "汉库克"],
			p: /^\/index\.php\/\d+\.html/
		},
		imgs: () => hr.getImgA(".article-content img", "a.post-page-numbers", 300),
		button: [4],
		insertImg: [".article-content", 2],
		autoDownload: [0],
		next: "//a[p[text()='上一篇'] and not(starts-with(@href,'java'))]",
		prev: "//a[p[text()='下一篇'] and not(starts-with(@href,'java'))]",
		customTitle: ".article-title>a",
		category: "hcomic"
	}, {
		name: "鸟鸟韩漫",
		host: ["nnhanman6.com"],
		url: {
			h: "nnhanman",
			p: "chapter",
			e: ".BarTit>h1"
		},
		imgs: "img[data-original]",
		button: [4],
		insertImg: ["//td[img] | //div[@class='view-imgBox']", 2],
		autoDownload: [0],
		next: "#k_Pic_nextArr",
		prev: "#k_Pic_upArr",
		chapters: {
			url: "#k_Pic_backArr",
			target: "#list a",
			sort: "r"
		},
		customTitle: () => fn.gt(".BarTit>h1").replace(" - 第1章", ""),
		category: "hcomic"
	}, {
		name: "楠楠漫画",
		host: ["nnmh.cc", "ttmh99.com", "nnmh.info", "nnboook.com"],
		url: {
			t: "楠楠漫画",
			p: /\/inforedit\/\d+\/\d+$/
		},
		imgs: ".item img",
		button: [4],
		insertImg: [".item", 2],
		autoDownload: [0],
		next: () => {
			let url = fn.gu(".next a");
			return /\/\d+\/\d+$/.test(url) ? url : null;
		},
		prev: ".prev a",
		chapters: async () => {
			let p = 1;
			let loop = true;
			let html = "";
			let id = fn.lpsa(-2);
			while (loop) {
				await hr.json("/index.php?m=&c=book&a=getjino", {
					headers: {
						"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
						"x-requested-with": "XMLHttpRequest"
					},
					body: new URLSearchParams({
						type: "mh",
						id,
						p,
						sort: 0
					}),
					method: "POST"
				}).then(json => {
					html += json.info;
					if (json.status == 0) {
						loop = false;
					}
					p++;
				});
			}
			html = fn.html(html);
			return q(".item a", html).map(a => {
				let text = a.outerText;
				if (text.includes("第")) {
					let i = text.indexOf("第");
					text = text.slice(i);
				}
				return {
					text,
					url: a.href
				};
			});
		},
		customTitle: () => {
			let text = q("meta[property='og\\:title']").attr("content").split("/").at(-1);
			let m, c;
			if (text.includes("-")) {
				[m, c] = text.split("-");
			} else {
				[m, c] = text.split(" ");
			}
			m = m.split("/").at(0);
			return m + " - " + c;
		},
		hide: ".read-article>img",
		category: "hcomic"
	}, {
		name: "18H汉化漫画 詳情頁",
		host: ["manhua.sexbook.top", "18manga.top", "mt91.top", "kk4.top", "9xh.top", "v-m.top", "cr8.top"],
		url: {
			e: "//ul[@class='nav-main']//a[text()='18H汉化漫画'] | //a[text()='很色情的漫画'] | //a[text()='涩涩汉化漫画']",
			p: "/cont.php",
			s: "?id="
		},
		init: () => fn.waitEle(".article-content>h3,.article-title"),
		imgs: () => {
			let [max] = fn.gt("#td-Act+#td-Series,.meta+.meta .rounded-button99").match(/\d+/);
			let [, dir, , ex] = fn.gu("#content-id a,.article-tabs-content a:has(img)").match(/^(.+\/)(\d+)(\.\w+)$/);
			return fn.arr(max, (v, i) => dir + (i + 1) + ex);
		},
		button: [4],
		insertImg: [
			[".content", 0, ".article-content>a,.article-tabs-content a:has(img)"], 2
		],
		endColor: "white",
		customTitle: () => {
			let text = fn.gt(".article-content>h3,.article-title");
			if (text.includes("|")) {
				text = text.split("|")[1];
			}
			return fn.dt({
				t: text,
				d: "很色情的漫画-"
			});
		},
		css: ".single .content{margin-right:0px!important;}",
		hide: ".sidebar,.modown-ad",
		category: "hcomic"
	}, {
		host: ["kkcomic.vip", "51man.vip", "www.51comic.org", "book.51comic.org", "18comic.top", "www.18comic.bar", "www.yumanse.com", "91manwu.com", "maozhuamcn.com", "fumanwu.org"],
		url: () => {
			let check = fn.checkUrl({
				e: [".hl-logo-black", ".hl-logo-white"],
				p: "/artdetail"
			});
			return check ? fn.waitEle(".hl-article-title,.hl-show").then(() => !q(".hl-comic-box.hl-show").one) : false;
		},
		init: () => fn.remove(".container:has(>#homeBannerWrap)"),
		imgs: ".hl-article-box img",
		button: [4],
		insertImg: [".hl-article-box", 2],
		autoDownload: [0],
		next: "//a[@class='hl-next'] | //a[span[text()='下一話']]",
		prev: "//a[@class='hl-prev'] | //a[span[text()='上一話']]",
		customTitle: () => q(".hl-mob-title").one ? fn.gt(".conch-head-1>.hl-mob-title") + " - " + fn.gt(".conch-head-2>.hl-mob-title") : fn.gt(".hl-article-title"),
		hide: ".hl-banner-list,.hl-app-list,.hl-hidden-md",
		category: "hcomic"
	}, {
		name: "污污漫书",
		host: "www.55comics.com",
		url: {
			t: "污污漫书",
			p: /\/\d+\.html$/,
			e: ".scramble-page img"
		},
		imgs: () => {
			if (q(".pagination li.active").one) {
				let max = fn.gt("//li[a[text()='下一页»' or text()='下一頁»' or text()='Next»']]", 2);
				let links = fn.arr(max, (v, i) => i == 0 ? fn.url : fn.url + "?p=" + (i + 1));
				return hr.getImgA(".scramble-page img", links);
			}
			return hr.getNP(".scramble-page", "//li/a[text()='下一页»' or text()='下一頁»' or text()='Next»']", null, ".pagination").then(() => q(".scramble-page img"));
		},
		button: [4],
		insertImg: [
			[".scramble-page", 2, ".scramble-page"], 2
		],
		insertImgAF: () => {
			let arr = ["//div[div[@class='ads']]", "//div[ul[ul[@class='pagination']]]"];
			fn.remove(arr);
		},
		autoDownload: [0],
		next: "//a[text()='下一话»' or text()='下一話»']",
		prev: "//a[text()='上一话»' or text()='上一話»']",
		chapters: {
			url: ".chapter-left a",
			urlIndex: 2,
			target: ".episode a"
		},
		customTitle: () => {
			let str = fn.gt(".chapter-left h1");
			let strArr = str.split(">");
			strArr = strArr.map(str => str.trim());
			if (strArr[3] == "全集阅读") {
				return strArr[2]
			}
			return strArr[2] + " - " + strArr[3];
		},
		observerClick: "#chk_cover",
		hide: ".row:has(>.ads),.row:has(>.stui_md)",
		category: "hcomic"
	}, {
		name: "污污漫书",
		url: {
			t: "污污漫书",
			h: /www\.55comics\./
		},
		observerClick: "#chk_cover",
		hide: ".row:has(>.ads)",
		category: "ad"
	}, {
		name: "VisorCapitulo",
		url: {
			h: ["www.visorcapitulo.com"],
			p: "/manga/",
			e: "i#data"
		},
		imgs: () => jsonHooker((text, parse, resolve) => {
			if (text.includes('"images_link"')) {
				resolve(parse(text).images_link);
			}
		}),
		button: [4],
		insertImg: ["#reader", 2],
		autoDownload: [0],
		next: "a:has(.bi-chevron-right)",
		prev: "a:has(.bi-chevron-left)",
		chapters: {
			target: "#chapters-list>option",
			sort: "r"
		},
		customTitle: [".breadcrumb>li", -2, -1],
		category: "comic"
	}, {
		name: "Monte Tai",
		url: {
			h: ["montetaiscanlator.xyz"],
			p: "/capitulo-"
		},
		box: [".reading-content", 2],
		imgs: ".reading-content img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".reading-content"),
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: "a[title='Proximo capitulo']",
		prev: "a[title='Capitulo anterior']",
		chapters: {
			target: "[data-mt-reading-panel=chapters] a",
			sort: "r"
		},
		customTitle: [".mt-reading-desktop-title", ".mt-reading-desktop-chapter"],
		category: "comic"
	}, {
		name: "Safire Scan",
		url: {
			h: "www.safirescan.site",
			p: "/cap"
		},
		init: () => fn.waitEle("#nextPrevJSbottom a[rel=home]"),
		imgs: ".chapter img",
		autoDownload: [0],
		next: "#nextPrevJSbottom a[rel=next]",
		prev: "#nextPrevJSbottom a[rel=prev]",
		chapters: {
			target: "[name=npx-list] a",
			sort: "r"
		},
		customTitle: () => `${q("header>h1>a").text} - ${q("[aria-label=Bookmark]").attr("data-title")}`,
		category: "comic"
	}, {
		name: "HerenScan/Lector KNS",
		url: {
			h: ["herenscan.com", "lectorknight.com"],
			p: "/capitulo-"
		},
		box: [".reading-content", 2],
		imgs: ".chapter-images img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".reading-content"),
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: ".nav-next>a",
		prev: ".nav-previous>a",
		chapters: {
			target: ".listing-chapters_wrap .chapter-name>a:not([href='#'])",
			sort: "r"
		},
		customTitle: [".chap-item>h3>a", "#chapter-heading"],
		hide: "body>div:has(button[aria-label=Close]):not(.wrap)",
		category: "comic"
	}, {
		name: "Manga Livre",
		url: {
			h: ["mangalivre.blog"],
			p: "/capitulo/"
		},
		imgs: ".chapter-images img",
		button: [4],
		insertImg: [".chapter-images", 2],
		autoDownload: [0],
		next: ".next-chapter",
		prev: ".prev-chapter",
		chapters: {
			target: ".reader-sidebar__popup-list>a"
		},
		customTitle: () => fn.dt({
			s: ".manga-title",
			r: [
				["/", "-"]
			]
		}),
		category: "comic"
	}, {
		name: "Plot Twist No Fansub",
		url: {
			h: ["plotnofansub.com"],
			p: "-"
		},
		box: [".reading-content", 2],
		imgs: ".rd-panel .rd-pic",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".reading-content"),
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: ".chapter-next>a",
		prev: ".chapter-prev>a",
		chapters: {
			target: ".plot-reader-select>option",
			sort: "r"
		},
		customTitle: () => fn.title(" - Plot Twist No Fansub"),
		category: "comic"
	}, {
		name: "Kaguya ID",
		host: ["01.kaguya.pro"],
		url: {
			t: "Kaguya ID"
		},
		box: [".reading-content", 2],
		imgs: () => q(".chapter-images img[data-aesir]").attrs("data-aesir", atob),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".reading-content"),
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: ".nav-next>a",
		prev: ".nav-previous>a",
		chapters: {
			target: ".listing-chapters_wrap .chapter-name>a:not([href='#'])",
			sort: "r"
		},
		customTitle: [".chap-item>h3>a", "#chapter-heading"],
		category: "comic"
	}, {
		name: "TaurusManga",
		url: {
			h: ["lectortaurus.com"],
			p: "/capitulo-"
		},
		imgs: ".reading-content img",
		button: [4],
		insertImg: [".reading-content", 2],
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: ".nav-next>a",
		prev: ".nav-previous>a",
		chapters: {
			target: ".wp-manga-chapter a",
			sort: "r"
		},
		customTitle: ".chap-item h3",
		hide: "#banner-cerrable,.ad",
		category: "comic"
	}, {
		name: "Fairy Scans",
		url: {
			h: ["fairyscans.com"],
			p: "-chapter-"
		},
		imgs: () => fn.waitEle(["#readerarea img"]),
		button: [4],
		insertImg: ["#readerarea", 2],
		autoDownload: [0],
		next: "a[aria-label='Next chapter']",
		prev: "a[aria-label='Previous chapter']",
		chapters: {
			target: ".greed-reader-chapters>a",
			sort: "r"
		},
		customTitle: [".greed-reader-series", ".greed-reader-titlebox .greed-reader-chapter"],
		category: "comic"
	}, {
		name: "TRManga",
		url: {
			h: ["trmanga.com"],
			p: "-"
		},
		imgs: "#images>img",
		button: [4],
		insertImg: ["#images", 2],
		autoDownload: [0],
		next: ".next>a",
		prev: ".previous>a",
		chapters: {
			target: "#Chapter-list+.dropdown-menu>a",
			sort: "r"
		},
		customTitle: () => q("#mangaNameInput").attr("value") + " - " + fn.gt("#Chapter-list"),
		category: "comic"
	}, {
		name: "Mgread.io",
		url: {
			h: ["mgread.io", "siyahmelek.site", "ragnarscans.com"],
			p: ["/chapter-", "/bolum-"]
		},
		imgs: "#chapter-content img",
		button: [4],
		insertImg: ["#chapter-content", 2],
		autoDownload: [0],
		next: "#next-link",
		prev: "#prev-link",
		chapters: () => {
			let get = (items) => items.map(({
				slug,
				number
			}) => ({
				text: `${fn.lp.includes("/bolum") ? "Bölüm" : "Chapter"} ${number}`,
				url: fn.wurl(slug, fn.lp, -2)
			}));
			let chapters = [];
			let id = fn.attr("#chapter-toggle", "data-id");
			return hr.json(`/wp-json/initmanga/v1/chapters?manga_id=${id}&paged=1&per_page=50`).then(json => {
				chapters = get(json.items);
				if (json.total_pages > 1) {
					let links = fn.arr(json.total_pages - 1, (v, i) => `/wp-json/initmanga/v1/chapters?manga_id=${id}&paged=${i + 2}&per_page=50`);
					let resArr = links.map(hr.json);
					return Promise.all(resArr).then(arr => {
						chapters = [...chapters, ...arr.map(j => get(j.items))].flat();
						return chapters.reverse();
					});
				}
				return chapters.reverse();
			});
		},
		customTitle: [".uk-breadcrumb .uk-text-capitalize", -2, -1],
		hide: ".init-ad",
		category: "comic"
	}, {
		name: "Rinko Comics",
		url: {
			h: ["rinkocomics.com"],
			p: "-chapter-"
		},
		imgs: ".images-flow>img",
		button: [4],
		insertImg: [".images-flow", 2],
		autoDownload: [0],
		next: ".chapter-navigation .next",
		prev: ".chapter-navigation .prev",
		chapters: () => {
			let a = q(".comic-home").one;
			return hr.fetchDoc(a).then(async dom => {
				let comicworld_ajax = Code.obj("var comicworld_ajax", dom);
				let {
					ajax_url,
					nonce
				} = comicworld_ajax;
				let id = q("#bookmarkComicBtn", dom).attr("data-comic-id");
				let html = "";
				let offset = 0;
				let loop = true;
				while (loop) {
					await hr.json(ajax_url, {
						headers: {
							"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
							"x-requested-with": "XMLHttpRequest"
						},
						body: new URLSearchParams({
							action: "load_more_chapters",
							nonce,
							comic_id: id,
							offset
						}),
						method: "POST"
					}).then(json => {
						if (json?.data?.html) {
							html += json?.data?.html;
							offset += 10;
						} else {
							loop = false;
						}
					});
				}
				let node = fn.html(html);
				return q(".chapter:not(.locked-chapter) a", node).map(a => ({
					text: fn.dt({
						s: ".chapter-number"
					}, a),
					url: a.href
				})).reverse();
			});
		},
		customTitle: [".breadcrumb-link,.breadcrumb-current", -2, -1],
		category: "comic"
	}, {
		name: "Little Tyrant",
		url: {
			h: ["tiraninha.world"],
			p: "/cap",
			st: "_proxyUrls"
		},
		init: () => fn.waitEle(".manga-page-canvas[width][height]"),
		imgs: async () => {
			let p_arr = [];
			await fn.aotoScrollEles({
				scale: ".reading-content",
				ele: ".manga-page-canvas",
				cb: (canvas) => {
					if (["width", "height"].every(k => canvas.hasAttribute(k))) {
						p_arr.push(new Promise(resolve => canvas.toBlob((blob) => resolve(URL.createObjectURL(blob)), "image/jpeg", 0.9)));
						return true;
					}
					return false;
				},
				top: 1
			});
			return Promise.all(p_arr);
		},
		autoDownload: [0],
		next: ".nav-next>a",
		prev: ".nav-previous>a",
		chapters: {
			wait: ".single-chapter-select option[data-redirect]",
			node: ".single-chapter-select",
			target: "option",
			cb: (t, v, e) => ({
				text: e.text,
				url: e.dataset.redirect
			}),
			sort: "r"
		},
		customTitle: () => fn.title(" - Little Tyrant"),
		category: "comic"
	}, {
		name: "Bully MANGA",
		url: {
			h: ["bully-manga.com"]
		},
		box: ["#imageContainer", 1],
		imgs: () => Code.arr("const IMAGE_MAP"),
		button: [4],
		insertImg: [
			["box", 0, "#imageContainer"], 2
		],
		autoDownload: [0],
		next: ".rd-nav-btn.active:has(path[d^='M9'])",
		prev: ".rd-nav-btn.active:has(path[d^='M15'])",
		chapters: {
			node: ".selected+.dropdown",
			target: "li",
			cb: (text, u, e) => {
				let url = new URL(e.dataset.value, fn.url).href
				return {
					text,
					url
				};
			},
			sort: "r"
		},
		customTitle: "main h1",
		category: "comic"
	}, {
		name: "Starlight Scan",
		url: {
			h: "starligthscan.com",
			s: "episodio"
		},
		box: [".scanImagesContainer .base__horizontalList", 1],
		imgs: ".scanImagesContainer>img",
		button: [4],
		insertImg: [
			["box", 0, ".scanImagesContainer>img"], 2
		],
		endColor: "white",
		autoDownload: [0],
		next: "//a[text()='Próximo Episódio'][not(contains(@class,'disabled'))]",
		prev: "//a[text()='Episódio Anterior'][not(contains(@class,'disabled'))]",
		chapters: {
			url: "//a[span[text()='Voltar']]",
			target: "a.mangaDetails__episodeTitle",
			sort: "r"
		},
		customTitle: () => hr.fetchDoc(q("//a[span[text()='Voltar']]").one).then(dom => {
			let title = fn.gt(".mangaDetails__title", 1, dom);
			return `${title} - Capítulo ${fn.getUSP("episodio")}`;
		}),
		category: "comic"
	}, {
		name: "Paradox Scans",
		url: {
			h: ["paradoxscans.com"],
			p: "/bolum-"
		},
		imgs: () => fn.waitEle(["#chapter-content img"]),
		button: [4],
		insertImg: ["#chapter-content", 2],
		autoDownload: [0],
		next: "#next-link",
		prev: "#prev-link",
		chapters: () => {
			let items = [];
			let get = () => items.map(({
				number,
				slug
			}) => ({
				text: `Bölüm ${number}`,
				url: fn.wurl(slug, fn.lp, -2)
			})).reverse();
			let id = fn.attr("#chapter-toggle", "data-id");
			let api = (paged) => {
				let params = fn.USP({
					manga_id: id,
					paged,
					per_page: 50
				});
				return hr.json(`/wp-json/initmanga/v1/chapters?${params}`);
			};
			return api(1).then(json => {
				items = json.items;
				let {
					total_pages
				} = json;
				if (total_pages > 1) {
					let resArr = fn.arr(total_pages - 1, (v, i) => api(i + 2));
					return Promise.all(resArr).then(arr => {
						items = [...items, ...arr.map(e => e.items)].flat();
						return get();
					});
				}
				return get();
			});
		},
		customTitle: [".uk-breadcrumb>li", -2, -1],
		hide: "div:has(.adblock_title),div:has(img[alt$=Adblock]),div:has(img[alt*=Tool]),.adblock_title,.adblock_subtitle",
		category: "comic"
	}, {
		name: "Ragnar Scans/MangaRuhu",
		url: {
			h: ["ragnarscans.net", "mangaruhu.com"],
			p: "/bolum-"
		},
		imgs: "#chapter-content img",
		button: [4],
		insertImg: ["#chapter-content", 2],
		autoDownload: [0],
		next: "#next-link",
		prev: "#prev-link",
		chapters: () => {
			let mid = q("#chapter-toggle").attr("data-id");
			const get_json = (p) => hr.json(`/wp-json/initmanga/v1/chapters?manga_id=${mid}&paged=${p}&per_page=50`);
			const get_c = (json) => json.items.map(({
				slug,
				number
			}) => ({
				text: `Bölüm ${number}`,
				url: fn.lp.endsWith("/") ? fn.wurl(slug, fn.lp, -2) : fn.wurl(slug)
			}));
			return get_json(1).then(json => {
				if (json.total_pages > 1) {
					let jsons = [json];
					let resArr = fn.arr(json.total_pages - 1, (v, i) => get_json(i + 2));
					return Promise.all(resArr).then(res => {
						jsons = [...jsons, ...res];
						return jsons.map(j => get_c(j)).flat().reverse();
					});
				}
				return get_c(json).reverse();
			});
		},
		customTitle: ".uk-article>h1",
		category: "comic"
	}, {
		name: "Araznovel",
		url: {
			h: ["manga.araznovel.com"],
			p: "/bolum-"
		},
		imgs: () => q(".ao-reader-images__img").attrs("data-src", atob),
		capture: true,
		autoDownload: [0],
		next: "a.ao-reader-nav__next",
		prev: "a.ao-reader-nav__prev",
		chapters: {
			target: "#aoChapterSelect>option"
		},
		customTitle: [".ao-breadcrumbs__item span[itemprop=name]", -2, -1],
		hide: "#aoAdblockOverlay",
		category: "comic"
	}, {
		name: "Mangafu",
		url: {
			h: "mangafu.com",
			p: "/bolum-"
		},
		box: [".reader-page", 1],
		imgs: ".reader-page img",
		insertImg: [
			["box", 0, ".reader-page"], 2
		],
		autoDownload: [0],
		next: "//a[text()='Sonraki Bölüm >']",
		prev: "//a[text()='< Önceki Bölüm']",
		chapters: {
			node: "select[name=bolum]",
			target: "option",
			sort: "r"
		},
		chapters: () => q("option", "select[name=bolum]").map(o => ({
			text: `Bölüm ${o.value}`,
			url: fn.lp.replace(/\/bolum-[\d\.]+\//, `/bolum-${o.value}/`)
		})),
		customTitle: ".reader-header h2",
		category: "comic"
	}, {
		name: "AstreaScans",
		url: {
			h: ["astreascans.com"],
			p: "/bolum-"
		},
		imgs: () => {
			fn.sm5();
			let astrea_ajax_vars = Code.obj("var astrea_ajax_vars");
			let {
				nonce
			} = astrea_ajax_vars;
			let astreaChapterData = Code.obj("astreaChapterData");
			let {
				chapter_id,
				load_time,
				page_token
			} = astreaChapterData;
			let formData = new FormData();
			formData.append("action", "astrea_get_chapter_images");
			formData.append("nonce", nonce);
			formData.append("chapter_id", chapter_id);
			formData.append("load_time", load_time);
			formData.append("page_token", page_token);
			return hr.json("/wp-admin/admin-ajax.php", {
				body: formData,
				method: "POST"
			}).then(json => json.data.urls);
		},
		button: [4],
		insertImg: [".chapter-content-area", 2],
		endColor: "white",
		autoDownload: [0],
		next: ".top-buttons>a:not(.disabled):has(.fa-chevron-right)",
		prev: ".top-buttons>a:not(.disabled):has(.fa-chevron-left)",
		chapters: {
			node: ".chapter-select",
			target: "option"
		},
		customTitle: ".ch-main-title",
		category: "comic"
	}, {
		name: "Mangack",
		url: {
			h: ["mangack.com"],
			p: "/chapter/"
		},
		imgs: ".entry-content>.separator>img",
		button: [4],
		insertImg: [".entry-content", 2],
		endColor: "white",
		autoDownload: [0],
		next: ".next-post>a",
		prev: ".prev-post>a",
		chapters: {
			url: ".latest-title>a",
			target: ".chapterslist a",
			cb: (t, url) => ({
				text: t.toLowerCase().charAt(0).toUpperCase() + t.toLowerCase().slice(1),
				url
			}),
			sort: "r"
		},
		customTitle: () => q(".entry-title").text.replace("chapter", "- Chapter"),
		category: "comic"
	}, {
		name: "Nux Scans",
		url: {
			h: ["nuxscans.blogspot.com"],
			p: "-chapter-"
		},
		box: [".separator", 1],
		imgs: "#post-width img",
		button: [4, 4],
		insertImg: [
			["box", 0, ".separator"], 2
		],
		autoDownload: [0],
		next: "//a[text()='Next']",
		prev: "//a[text()='Back']",
		customTitle: () => q(".post-title").text.replaceAll("\n", "").trim().replace("CHAPTER", "Chapter"),
		hide: "#preloader,#myModal",
		category: "comic"
	}, {
		name: "Iniotaku/Kokkokutei Scan KT",
		url: {
			h: ["www.iniotaku2.com", "kokkokuteisukyankt.blogspot.com"],
			p: ["/chapter", "/episodio"]
		},
		init: () => fn.waitEle("ul[name='npx-list']"),
		imgs: "#reader img",
		autoDownload: [0],
		next: "//a[span[text()='Next']] | //a[span[text()='Siguiente']]",
		prev: "//a[span[text()='Prev']] | //a[span[text()='Anterior']]",
		chapters: {
			target: "ul[name='npx-list'] a[href*=chapter],ul[name='npx-list'] a[href*=episodio]",
			sort: "r"
		},
		customTitle: () => getTitle(["header h1>a", "ul[name='npx-list'] a[selected]"]),
		category: "comic"
	}, {
		name: "DatgarScanlation/Sapphire Scan",
		url: {
			h: ["datgarscanlation.blogspot.com", "www.sapphirescan.com"],
			p: "/cap"
		},
		init: () => fn.waitEle("#nPL .inner_nPL"),
		imgs: ".check-box img",
		button: [4],
		insertImg: [".check-box", 2],
		endColor: "white",
		autoDownload: [0],
		next: "//a[span[text()='Next']]",
		prev: "//a[span[text()='Prev']]",
		chapters: {
			target: "#nPL_select>option[value*='/cap']",
			sort: "r"
		},
		customTitle: "main h1",
		category: "comic"
	}, {
		name: "Like Manga",
		url: {
			h: ["likemanga.ink"],
			p: ["/chapter-"]
		},
		init: () => (document.onkeydown = null),
		imgs: () => fn.waitEle([".reading-detail>.page-chapter>img"]),
		button: [4],
		insertImg: [".reading-detail", 2],
		autoDownload: [0],
		next: "a.a_next:not(.disabled)",
		prev: "a.a_prev:not(.disabled)",
		chapters: () => {
			let pages = q("#nav_list_chapter_id_modal a").one;
			if (pages) {
				let mid = fn.attr("#title-detail-manga", "data-manga");
				let max = fn.um("#nav_list_chapter_id_modal a,#nav_list_chapter_id_modal .current:not(:has(*))");
				let links = fn.arr(max, (v, i) => `/?act=ajax&code=load_list_chapter_modal&manga_id=${mid}&page_num=${i + 1}`);
				let resArr = links.map(hr.json);
				return Promise.all(resArr).then(jsons => {
					let html = jsons.map(j => j.list_chap).join("");
					let node = fn.html(html);
					return q("a", node).map(a => ({
						text: a.text.trim(),
						url: a.href
					})).reverse();
				});
			}
			return fn.getChapters({
				target: "#list_chapter_id_modal a",
				sort: "r"
			}).reverse();
		},
		customTitle: "#title-detail-manga",
		category: "comic"
	}, {
		name: "NetTruyen/NhatTruyen",
		url: {
			h: [/nettruyen/, /nhattruyen/],
			p: "/truyen-tranh/",
			e: [".chapter-id", ".reading-detail"]
		},
		imgs: () => fn.waitEle([".reading-detail>.page-chapter>img:not([style])"]),
		button: [4],
		insertImg: [".reading-detail", 2],
		autoDownload: [0],
		next: "a.a_next:not(.disabled)",
		prev: "a.a_prev:not(.disabled)",
		chapters: () => {
			let params = fn.USP({
				slug: fn.lpsa(-2),
				comicId: fn.attr(".chapter-id", "data-cid")
			});
			return hr.json(`/Comic/Services/ComicService.asmx/ChapterList?${params}`).then(json => json.data.map(({
				chapter_name,
				chapter_slug
			}) => ({
				text: chapter_name,
				url: fn.wurl(chapter_slug.replace("chapter", "chuong"))
			})).reverse());
		},
		checkCurrentChapter: (url) => {
			let a = url.split("/").filter(Boolean).at(-1).match(/\d+/g);
			let b = fn.lp.split("/").filter(Boolean).at(-1).match(/\d+/g);
			if (a.length == b.length) {
				return a.every((n, i) => n == b[i]);
			}
			return false;
		},
		customTitle: ".top>.breadcrumb+h1",
		hide: ".banner,.banner-container",
		category: "comic"
	}, {
		name: "MangaBTT",
		url: {
			h: ["manhwabtt.cc", /nettruyen/],
			e: ".reading-detail"
		},
		imgs: () => fn.waitEle([".reading-detail>.page-chapter>img:not([style])"]),
		button: [4],
		insertImg: [".reading-detail", 2],
		autoDownload: [0],
		next: "a.a_next:not(.disabled)",
		prev: "a.a_prev:not(.disabled)",
		chapters: {
			target: ".select-chapter option",
			sort: "r"
		},
		customTitle: ".top>.breadcrumb+h1",
		hide: ".banner,.banner-container",
		category: "comic"
	}, {
		name: "巴卡漫画",
		host: ["bakamh.app", "bakamh.com", "bakamh.ru"],
		url: {
			t: "bakamh巴卡漫画",
			p: "/c-"
		},
		imgs: ".read-container img",
		button: [4],
		insertImg: [".read-container", 2],
		endColor: () => q(".text-ui-light").one ? "white" : "black",
		autoDownload: [0],
		next: "a.next_page",
		prev: "a.prev_page",
		chapters: {
			wait: ".single-chapter-select option[data-redirect]",
			node: ".single-chapter-select",
			target: "option[data-redirect]",
			cb: (t, v, e) => ({
				text: e.text,
				url: e.dataset.redirect
			}),
			sort: "r"
		},
		customTitle: [".breadcrumb li", -2, -1],
		category: "comic"
	}, {
		name: "DigitalTeam",
		url: {
			h: ["dgtread.com"],
			p: "/read/"
		},
		box: ["#page_select", 2],
		imgs: () => {
			let max = q("#page_select>option").length;
			let links = fn.arr(max, (v, i) => fn.wurl(i + 1));
			return hr.getImgA("#page_block>img", links);
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: (parent, buttonBar) => fn.hideEle("#page_select"),
		customTitle: ["#t_manga_name a", "#chapter_select>option[selected]"],
		category: "comic"
	}, {
		name: "MangaWorld/MangaWorldAdult",
		url: {
			h: ["www.mangaworld.mx", "www.mangaworldadult.net"],
			p: "/read/"
		},
		box: ["#page", 2],
		imgs: () => {
			let list = fn.url.includes("style=list");
			if (list) {
				return q("#page>img");
			}
			let url = fn.url + "?style=list";
			return hr.getImgA("#page>img", [url]);
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: (parent, buttonBar) => fn.hideEle("#page"),
		category: "comic"
	}, {
		name: "MangaBuddy",
		url: {
			h: ["mangabuddy1.co.uk"],
			p: "/chapter-"
		},
		imgs: ".image-container img[data-number]",
		button: [4],
		insertImg: [".image-container", 2],
		autoDownload: [0],
		next: "a[aria-label=Next]",
		prev: "a[aria-label=Previous]",
		chapters: () => q("button[data-chapter]", "div[data-chapter-menu]").map(b => ({
			text: `Chapter ${b.dataset.chapter}`,
			url: fn.wurl(`chapter-${b.dataset.chapter}`)
		})),
		customTitle: () => fn.dt({
			s: ".title-comic",
			r: [
				[" Chapter ", " - Chapter "]
			]
		}),
		category: "comic"
	}, {
		name: "MangaBuddy",
		url: {
			h: ["mangabuddy.me", "mangaspin.com", "manhuanow.com"],
			p: "/chapter",
			st: "chapImages"
		},
		imgs: () => {
			let code = fn.fs("chapImages");
			return code.split("'").at(1).split(",").map(src => fn.rt(src, [
				[new URL(src).host, "sb.mbbcdn.com"],
				["/res/", "/"]
			]));
		},
		button: [4],
		insertImg: ["#chapter-images", 2],
		autoDownload: [0],
		next: "#btn-next",
		prev: "#btn-prev",
		chapters: {
			url: ".breadcrumbs-item:nth-child(2) a",
			target: "#chapter-list a",
			textNode: ".chapter-title",
			sort: "r"
		},
		customTitle: ".chapter-info h1",
		category: "comic"
	}, {
		name: "MangaPub",
		host: ["mangapub.com"],
		url: {
			t: ["MangaPub"],
			p: "/chapter",
			st: "var bookId"
		},
		imgs: () => {
			let code = fn.fs("var bookId = ");
			return fn.textVar(code, "indicators", '"').split(",");
		},
		button: [4],
		insertImg: [".chapter-image", 3],
		autoDownload: [0],
		next: "#btn-next",
		prev: "#btn-prev",
		chapters: {
			url: ".breadcrumbs-item:nth-child(2) a",
			target: "#chapter-list a",
			textNode: ".chapter-title",
			sort: "r"
		},
		customTitle: [".chapter-info h1", ".chapter-info h2"],
		category: "comic"
	}, {
		name: "VyManga",
		host: ["vymanga.com", "vymanga.net", "mangavyvy.com"],
		url: {
			h: ["summonersky.com", "burgerpixel.net", "aov-news.com", "5v5world.co"]
		},
		home: "https://vymanga.com/",
		update: "https://vymanga.com/search?sort=updated_at",
		imgs: ".carousel-item img",
		autoDownload: [0],
		next: "a#navbar-chapter-control-next",
		prev: "a#navbar-chapter-control-prev",
		chapters: {
			node: ".select-chapter",
			target: "option",
			sort: "r"
		},
		checkCurrentChapter: (url, text) => {
			let c_t = fn.gt(".select-chapter [selected]");
			return c_t == text;
		},
		customTitle: "#chapter-info",
		category: "comic"
	}, {
		name: "MHScans",
		host: ["mhscans.com"],
		url: {
			h: ["mh.curiosidadtop.com"]
		},
		home: "https://mhscans.com/",
		init: () => fn.waitEle(".rk-chapter-select"),
		imgs: () => fn.waitEle([".rk-img"]),
		capture: true,
		autoDownload: [0],
		next: "div:has(>#rk-chapter-select-bottom-container)>a:has(.fa-arrow-right)",
		prev: "div:has(>#rk-chapter-select-bottom-container)>a:has(.fa-arrow-left)",
		chapters: {
			node: ".rk-chapter-select",
			target: "option",
			sort: "r"
		},
		checkCurrentChapter: (url, text) => {
			let ct = fn.gt(".rk-chapter-select [selected]");
			return ct == text;
		},
		customTitle: () => getTitle("strong>a"),
		category: "comic"
	}, {
		name: "Mangahub",
		url: {
			h: "mangahub.ru",
			p: "/read/"
		},
		update: "/feed",
		imgs: ".reader-viewer-img",
		autoDownload: [0],
		next: "a[data-target='reader-area.chapterNext']",
		prev: "a[data-target='reader-area.chapterPrev']",
		chapters: {
			api: () => {
				let m_id = fn.attr("history-progress", "object-id");
				let c_id = fn.attr("history-progress", "item-id");
				return `/read/${m_id}/chapters?translationId=${c_id}`;
			},
			target: "a",
			sort: "r"
		},
		customTitle: () => fn.gt(".reader-info a.text-truncate").split("/")[0] + " - " + fn.gt(".reader-header .text-truncate"),
		category: "comic"
	}, {
		name: "Mèo Sữa",
		host: ["meosua.org"],
		url: {
			t: "Mèo Sữa",
			p: "ch"
		},
		imgs: ".chapter-content>p>img",
		button: [4],
		insertImg: [".chapter-content", 2],
		autoDownload: [0],
		next: "#next-link:not(.uk-disabled)",
		prev: "#prev-link:not(.uk-disabled)",
		chapters: () => {
			let id = q("[data-catid]").attr("data-catid");
			return hr.json("/wp-admin/admin-ajax.php", {
				headers: {
					"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
					"x-requested-with": "XMLHttpRequest"
				},
				body: `action=getchapter&catid=${id}`,
				method: "POST"
			}).then(json => json.data.map(({
				chap,
				link
			}) => ({
				text: `Chap ${chap}`,
				url: link
			})).reverse());
		},
		customTitle: ".uk-article>h3",
		category: "comic"
	}, {
		name: "RoliaScan/MangaTaro",
		url: {
			h: ["roliascan.com", "mangataro.org"],
			p: "/read/"
		},
		box: ["#chapter-images-container", 1, 1280],
		imgs: () => {
			let id = fn.attr("body", "data-chapter-id");
			return hr.json(`/auth/chapter-content?chapter_id=${id}`, {
				credentials: "include",
				headers: {
					"Content-Type": "application/json"
				}
			}).then(json => json.images);
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#chapter-images-container"),
		endColor: "white",
		autoDownload: [0],
		next: "a[title='Next Chapter']",
		prev: "a[title='Previous Chapter']",
		chapters: {
			target: "#chapter-select>option",
			cb: (text, url) => ({
				text,
				url: url + "/"
			})
		},
		checkCurrentChapter: (url) => fn.usl(url) == fn.usl(),
		customTitle: () => fn.attr("#reader-media", "data-chapter-title"),
		category: "comic"
	}, {
		name: "MyNimeku",
		url: {
			h: "www.mynimeku.com",
			p: "/chapter/"
		},
		imgs: ".komik-reader-content img",
		button: [4],
		insertImg: [".komik-reader-content", 2],
		autoDownload: [0],
		next: "//a[text()='Next']",
		prev: "//a[text()='Prev']",
		chapters: {
			node: ".komik-chapter-list__panel",
			target: ".komik-chapter-card-row[data-chapter-value]",
			urlNode: ".komik-chapter-card",
			textNode: ".komik-chapter-card__text",
			cb: (t, url, e) => ({
				text: `Chapter ${e.dataset.chapterValue}`,
				url
			}),
			sort: "r"
		},
		customTitle: () => fn.dt({
			s: ".post-title",
			d: "Bahasa Indonesia",
			r: [
				[" Chapter ", " - Chapter "]
			]
		}),
		category: "comic"
	}, {
		name: "Mangapill",
		url: {
			h: ["www.mangapill.com", "mangapill.com"],
			p: "/chapters/"
		},
		update: "/chapters",
		imgs: "chapter-page img",
		button: [4],
		insertImg: ["div:has(>chapter-page)", 2],
		autoDownload: [0],
		next: "a[data-hotkey=ArrowRight]",
		prev: "a[data-hotkey=ArrowLeft]",
		chapters: {
			api: () => {
				let [id] = fn.lp.match(/\d+/);
				return `/manga/${id}/chapters`;
			},
			target: "a",
			sort: "r"
		},
		customTitle: "h1#top",
		hide: ".flex.items-center.justify-between:has(svg[data-remove-flyer])",
		category: "comic"
	}, {
		name: "TodayManga",
		url: {
			h: ["todaymanga.com"],
			p: ["/ch-", "-ch-"]
		},
		update: "/category/recent",
		imgs: ".chapter-content>img[data-src]",
		button: [4],
		insertImg: [".chapter-content", 2],
		autoDownload: [0],
		next: "a:has(>.icon-ic_arw_right)",
		prev: "a:has(>.icon-ic_arw_left)",
		chapters: {
			api: () => fn.attr("button[data-url]", "data-url"),
			target: "a",
			sort: "r"
		},
		customTitle: [".chapter-name>a", ".chapter-name>span"],
		category: "comic"
	}, {
		name: "Project Suki",
		url: {
			h: ["www.projectsuki.com", "projectsuki.com"],
			p: "/read/"
		},
		box: [".strip-reader", 1, 1280],
		imgs: () => {
			let [, , mid, cid] = fn.lp.split("/");
			return hr.json("/callpage", {
				body: JSON.stringify({
					bookid: mid,
					chapterid: cid,
					first: true
				}),
				method: "POST"
			}).then(json => {
				let html = q(".strip-reader").one.innerHTML;
				html += json.src;
				let dom = fn.doc(html);
				return [...dom.images];
			});
		},
		button: [4],
		insertImg: [
			["box", 0, ".strip-reader"], 2
		],
		autoDownload: [0],
		next: "a[title='Next chapter']",
		prev: "a[title='Previous chapter']",
		chapters: {
			target: "#chapter-select>option",
			cb: (t, u) => ({
				text: "Chapter " + t.match(/[\d\.]+/).at(0),
				url: fn.wurl(u, fn.lp, 3)
			}),
			sort: "r"
		},
		customTitle: () => fn.title(" | Project Suki"),
		category: "comic"
	}, {
		name: "MangaDemon",
		url: {
			h: ["www.demonicscans.org", "demonicscans.org"],
			p: "/chapter/"
		},
		update: "/lastupdates.php",
		box: [".main-width .chapter-info", 1],
		imgs: ".imgholder:not([src*='free_ads'])",
		button: [4],
		insertImg: [
			["box", 0, ".main-width>*:not(#FullPictureLoadMainImgBox,.chapter-info,center)"], 2
		],
		autoDownload: [0],
		next: "a.nextchap",
		prev: "a.prevchap",
		chapters: {
			node: ".chapters-nav select",
			target: "option"
		},
		checkCurrentChapter: (url) => {
			let cid = fn.lpsa(-2);
			let uid = fn.getUSP("chapter", location.origin + url);
			return cid == uid;
		},
		hide: "#teaser3",
		category: "comic"
	}, {
		name: "Oppai Stream",
		url: {
			h: ["read.oppai.stream"],
			p: "/page"
		},
		init: () => fn.waitEle("#load-images img[data-original-url]"),
		imgs: () => fn.aotoScrollEles({
			scale: "#load-images",
			ele: "#load-images img",
			time: 60000,
			cb: (img) => !!img.currentSrc,
			top: 1
		}).then(() => q("#load-images img").currentSrcs),
		next: "a:has(img[alt^=next])",
		prev: "a:has(img[alt^=prev])",
		chapters: {
			url: ".end-page>a:nth-of-type(2)",
			mode: "f",
			target: ".sort-chapters>a",
			textNode: "h4",
			sort: "r"
		},
		customTitle: () => getTitle([".extra-title>a", ".chapter-select font"]),
		category: "comic"
	}, {
		name: "Niceoppai",
		url: {
			h: "niceoppai.net"
		},
		imgs: "#image-container img[alt]",
		button: [4],
		insertImg: ["#image-container", 2],
		autoDownload: [0],
		next: ".nav_pag .nxt",
		prev: ".nav_pag .pvs",
		chapters: () => q(".cbo_wpm_chp>option", ".nav_chp").map(o => ({
			text: o.text,
			url: fn.wurl(o.value, fn.url, -2)
		})).reverse(),
		customTitle: ["h1>a", "option[selected]"],
		hide: "#sct_top_banner,#image-container~center",
		category: "comic"
	}, {
		name: "Wurmz",
		url: {
			h: ["wurmz.net"],
			p: "/chapter/"
		},
		imgs: ".reader-canvas img",
		button: [4],
		insertImg: [".reader-canvas", 2],
		autoDownload: [0],
		next: "a[aria-label='Chapter berikutnya']",
		prev: "a[aria-label='Chapter sebelumnya']",
		chapters: {
			target: ".reader-nav-select>option",
			cb: (t, u, o) => ({
				text: o.text,
				url: fn.wurl(o.value)
			})
		},
		customTitle: [".sep+a", "option[selected]"],
		category: "comic"
	}, {
		name: "TruyenQQ",
		host: ["truyenqqno.com"],
		url: {
			e: "meta[property='og:site_name'][content^=TruyenQQ]",
			p: "-chap-"
		},
		init: () => {
			fn.wait((_, w) => isFn(w?.jQuery?.fn?.isInViewport)).then(() => fn.rjk());
		},
		box: [".chapter_control", 1],
		imgs: ".chapter_content .page-chapter>img[data-original]",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.remove(".chapter_content>*:not([id^=Full],.chapter_control)"),
		autoDownload: [0],
		next: "a[href]:has(>.fa-arrow-right)",
		prev: "a[href]:has(>.fa-arrow-left)",
		chapters: {
			target: ".chapter_list>option",
			sort: "r"
		},
		customTitle: ".detail-title",
		category: "comic"
	}, {
		name: "FoxTruyen",
		host: ["foxtruyen2.com"],
		url: {
			e: "meta[property='og:site_name'][content=FoxTruyen]",
			p: "-chap-"
		},
		init: () => {
			fn.wait((_, w) => isFn(w?.jQuery?.lazy)).then(() => fn.rjk());
		},
		imgs: ".content_detail_manga>img",
		button: [4],
		insertImg: [".content_detail_manga", 2],
		autoDownload: [0],
		next: ".button-next-prev>a[href]:has(>.bi-arrow-right-short)",
		prev: ".button-next-prev>a[href]:has(>.bi-arrow-left-short)",
		chapters: () => hr.fetchDoc("/frontend/manga/list", {
			headers: {
				"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
				"x-requested-with": "XMLHttpRequest"
			},
			body: new URLSearchParams({
				slug: fn.attr("#slug", "value"),
				id: fn.attr("#book_id", "value"),
				order: fn.attr("#episode_name", "value"),
				token: fn.attr("#csrf-token", "value")
			}),
			method: "POST"
		}).then(dom => q(".chapter-list a", dom).map(a => ({
			text: a.text,
			url: a.href
		})).reverse()),
		customTitle: ".title-detail>h1",
		category: "comic"
	}, {
		name: "TopTruyen",
		host: ["www.toptruyenzone.com"],
		url: {
			e: "meta[property='og:site_name'][content=TopTruyenVN]",
			p: "/chapter-"
		},
		init: () => {
			fn.wait((_, w) => isFn(w?.reloadImg)).then(() => fn.rjk());
		},
		imgs: () => q(".list-image-detail>[id^=page]>img").map(e => e.src),
		button: [4],
		insertImg: [".list-image-detail", 2],
		autoDownload: [0],
		next: "a.next-chapter",
		prev: "a.previous-chapter",
		chapters: {
			target: "#select_chapter>option",
			sort: "r"
		},
		customTitle: [".breadcrumb>li", 1, 2],
		category: "comic"
	}, {
		name: "NewTruyenTranh",
		host: ["newtruyentranh10.com"],
		url: {
			t: "NewTruyenTranh",
			p: "/chapter-"
		},
		init: () => {
			fn.wait((_, w) => isFn(w?.getlistCmt)).then(() => fn.rjk());
		},
		imgs: ".reading-detail>.page-chapter>img",
		button: [4],
		insertImg: [".reading-detail", 2],
		autoDownload: [0],
		next: "#nextChapter:not(.disabled)",
		prev: "#prevChapter:not(.disabled)",
		chapters: {
			target: ".select-chapter>option",
			sort: "r"
		},
		customTitle: ".breadcrumb+h1",
		category: "comic"
	}, {
		name: "MangaToons",
		url: {
			h: "mangatoon.mobi",
			p: "/watch/",
			e: ".episode",
			ee: ".new-episode-lock"
		},
		init: () => fn.waitEle(".pictures img:not(.cover)"),
		imgs: ".pictures img:not(.cover)",
		button: [4],
		insertImg: [".pictures", 2],
		autoDownload: [0],
		next: ".page-icons-next",
		prev: ".page-icons-prev",
		chapters: {
			url: ".top-left a",
			target: ".episode-content-asc .episodes-wrap-new a.episode-item-new",
			textNode: ".episode-title-new:not(.episode-number)"
		},
		customTitle: [".title", ".episode"],
		category: "comic"
	}, {
		name: "Read Manga",
		url: {
			h: "readmanga.cc",
			p: "/chapter-"
		},
		imgs: "div.justify-center>img[alt][loading=eager]",
		button: [4],
		insertImg: ["div.justify-center:has(>img[alt][loading=eager])", 2],
		autoDownload: [0],
		next: "//a[contains(text(),'Next')]",
		prev: "//a[contains(text(),'Previous')]",
		chapters: {
			target: "#chapter-select option",
			cb: (text, u) => ({
				text,
				url: fn.url.replace(/[\d\.]+$/, u)
			}),
			sort: "r"
		},
		customTitle: ["nav>ol>li", 1, 2],
		category: "comic"
	}, {
		name: "MangaPanda/MangaReader",
		url: {
			h: ["www.mangapanda.in", "mangareader.in"],
			p: "-chapter-",
			e: "#arraydata"
		},
		imgs: () => q("#arraydata").text.split(","),
		button: [4],
		insertImg: [".chapter-content-inner", 2],
		autoDownload: [0],
		next: "a.RightArrow",
		prev: "a.LeftArrow.prev",
		chapters: {
			api: () => {
				let args = Code.obj(["args", "load_chapters_selectbox"]);
				return `/ajax-load-chapters-selectbox?mangaID=${args.mangaID}`;
			},
			target: "option",
			sort: "r"
		},
		customTitle: ["h2.chapter-title", 1, 0],
		category: "comic"
	}, {
		name: "Comivex",
		url: {
			h: ["comivex.com"],
			p: "/read/"
		},
		update: "/latest/",
		imgs: "#chapter-images img",
		button: [4],
		insertImg: ["#chapter-images", 2],
		autoDownload: [0],
		next: ".nav-controls>a[aria-label='Next chapter']",
		prev: ".nav-controls>a[aria-label='Previous chapter']",
		chapters: () => q(".nav-select[aria-label='Select chapter']>option").map(o => ({
			text: o.text,
			url: fn.wurl(o.value, fn.url, -2)
		})).reverse(),
		customTitle: () => fn.title(" | Comivex"),
		category: "comic"
	}, {
		name: "Mangayi",
		url: {
			h: ["mangayi.com"],
			p: "/read/"
		},
		box: [".images", 1],
		imgs: ".images img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".images"),
		autoDownload: [0],
		next: ".n-btns>a[aria-label='Next chapter']",
		prev: ".n-btns>a[aria-label='Previous chapter']",
		chapters: {
			wait: ".ch-sel>option",
			node: ".ch-sel",
			target: "option",
			cb: (text, u, o) => ({
				text,
				url: fn.wurl(o.value, fn.url, -2)
			}),
			sort: "r"
		},
		customTitle: [".manga-title", ".chapter-title"],
		category: "comic"
	}, {
		name: "BBATOTO",
		h: ["bbato.com", "xbato.co.uk"],
		url: {
			t: "BATOTO",
			p: "/read/"
		},
		box: [".pages", 1],
		imgs: ".pages img:not([alt=dramatv])",
		button: [4],
		insertImg: [
			["box", 0, ".pages"], 2
		],
		autoDownload: [0],
		next: "//a[contains(text(),'Next Chap')]",
		prev: "//a[contains(text(),'Prev Chap')]",
		chapters: {
			target: "#number-panel a",
			sort: "r"
		},
		customTitle: () => fn.dt({
			d: ["Read", "Online - BATOTO"]
		}),
		category: "comic"
	}, {
		name: "MangaGeko",
		url: {
			h: "www.mgeko.cc",
			p: "/reader/"
		},
		update: "/jumbo/manga/",
		init: () => fn.addMutationObserver(() => fn.remove("#radio_content")),
		imgs: "#chapter-reader img",
		button: [4],
		insertImg: ["#chapter-reader", 2],
		autoDownload: [0],
		next: ".chnav.next[href^='/reader/']",
		prev: ".chnav.prev[href^='/reader/']",
		chapters: {
			node: ".chapternav select",
			target: "option",
			cb: (t, v, e) => ({
				text: t.replace("-eng-li", ""),
				url: e.value ? v : fn.lp
			}),
			sort: "r"
		},
		customTitle: () => fn.title("Manga: "),
		hide: "center:has(>#chapter-reader)>*:not(#chapter-reader),.chapternav+div[style]",
		category: "comic"
	}, {
		name: "ReYume",
		url: {
			h: ["www.re-yume.my.id"],
			p: /^\/\d+\/\d+\/[\w-]+\.html$/i
		},
		imgs: () => fn.waitEle(["#zeist-manga-reader img"]),
		capture: true,
		autoDownload: [0],
		next: "#next-btn",
		prev: "#prev-btn",
		chapters: {
			url: "#series-link",
			mode: "f",
			target: "#chapters a:has(h4)",
			textNode: "h4",
			sort: "r"
		},
		customTitle: ["header h4", "header h4+p"],
		category: "comic"
	}, {
		name: "HotComics",
		host: ["w1.hotcomics.me"],
		url: {
			t: "HotComics",
			p: "/episode"
		},
		box: ["#viewer-img", 1, 800],
		imgs: "#viewer-img img",
		button: [4],
		insertImg: [
			["box", 0, "#viewer-img"], 2
		],
		autoDownload: [0],
		next: "a.vnext:not(.disabled)",
		prev: "a.vprev:not(.disabled)",
		chapters: {
			url: "a.vlist",
			target: "#tab-chapter a",
			textNode: ".num",
			cb: (t, url, a) => {
				url = a.getAttribute("onclick").split("'").at(1);
				return {
					text: "Episode " + url.split("-").at(-2),
					url
				}
			}
		},
		customTitle: () => q(".viewer-title a").one.firstChild.textContent + " - " + fn.gt(".viewer-title a>em"),
		category: "comic"
	}, {
		name: "Ikigai Mangas",
		host: ["zonaikigai.gamesview.shop"],
		url: {
			t: "Ikigai Mangas",
			p: "/capitulo/"
		},
		box: [".flex:has(img[alt^=Página])", 1],
		imgs: "img[alt^=Página]",
		button: [4],
		insertImg: [
			["box", 0, ".flex:has(img[alt^=Página])"], 2
		],
		autoDownload: [0],
		next: "//a[span[text()='Siguiente']]",
		prev: "//a[span[text()='Anterior']]",
		chapters: async () => {
			let dom = await hr.fetchDoc(fn.gu("a:has(.ph--arrow-u-up-left-duotone)"));
			let chapters = q("div:has(>h2)+ul a", dom).all;
			let next = q("a[aria-current=page]+a:not(:has([class]))", dom).one;
			while (!!next) {
				dom = await hr.fetchDoc(next);
				chapters = [...chapters, ...q("div:has(>h2)+ul a", dom).all];
				next = q("a[aria-current=page]+a:not(:has([class]))", dom).one;
			}
			return chapters.map(a => ({
				text: q(".card-title", a).text,
				url: a.pathname
			})).reverse();
		},
		checkCurrentChapter: (url) => url.split("/").at(2) == fn.lpsa(2),
		customTitle: ["a:has(.ph--arrow-u-up-left-duotone) span>span", 0, 1],
		hide: "[id^=teaser]",
		category: "comic"
	}, {
		name: "Yaoi Toon",
		url: {
			h: ["yaoitoon.net"],
			p: "/chapter"
		},
		box: ["#chapter-container", 1],
		imgs: () => {
			fn.sm5();
			let id = fn.lpsa();
			return hr.json(`/ajax/image/list/chap/${id}`).then(({
				html
			}) => {
				let node = fn.html(html);
				return q(".readImg", node);
			});
		},
		button: [4, 2],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#chapter-container"),
		autoDownload: [0],
		next: ".nextBtn:not([disabled])",
		prev: ".prevBtn:not([disabled])",
		chapters: {
			node: ".chapters-select",
			target: "option",
			sort: "r"
		},
		customTitle: ".card h4",
		category: "comic"
	}, {
		name: "OceComic",
		url: {
			h: ["ocecomic.com"],
			p: "/comic/"
		},
		box: [".page.issue", 1],
		imgs: ".page.issue img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".page.issue"),
		autoDownload: [0],
		next: "li:has(>.issue-link.active)+li>a",
		prev: 1,
		chapters: {
			target: ".issue-link",
			sort: "r"
		},
		customTitle: () => fn.title(" | OceComic"),
		category: "comic"
	}, {
		name: "Kiryuu/Natsu/Ikiru",
		url: {
			t: ["Kiryuu", "Natsu", "Ikiru"],
			p: "/chapter-"
		},
		imgs: "section[data-image-data]>img",
		button: [4],
		insertImg: ["section[data-image-data]", 2],
		autoDownload: [0],
		next: "//a[div[p[text()='Next']]][not(starts-with(@href,'#'))]",
		prev: "//a[div[p[text()='Prev']]][not(starts-with(@href,'#'))]",
		chapters: {
			api: () => {
				let url = fn.attr("div[hx-get]", "hx-get");
				let mid = fn.getUSP("manga_id", url);
				let cid = fn.getUSP("chapter_id", url);
				return `/wp-admin/admin-ajax.php?manga_id=${mid}&chapter_id=${cid}&type=manga&action=chapter_selects`;
			},
			target: "div[id^='chapter-lists'] a",
			sort: "r"
		},
		customTitle: "main h1",
		category: "comic"
	}, {
		name: "コミックシーモア",
		url: {
			h: ["hachiraw.win"],
			p: "/chapter/"
		},
		imgs: ".entry-content img",
		button: [4],
		insertImg: [".entry-content", 2],
		endColor: "white",
		next: ".nextchapter",
		prev: ".prevchapter",
		chapters: {
			node: ".chaplist",
			target: "option",
			sort: "r"
		},
		customTitle: () => fn.dt({
			s: ".entry-title",
			d: "&#40;MANGA&#41; "
		}),
		hide: ".simpleToast",
		category: "comic"
	}, {
		name: "NicoManga",
		url: {
			h: ["nicomanga.com"],
			p: "/chapter"
		},
		update: "/manga-list.html",
		box: ["#imgChapter", 1],
		imgs: () => Code.arr(["const images", "_loadImgs"]) || [],
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#imgChapter"),
		autoDownload: [0],
		next: "//a[span[text()='Next chapter']]",
		prev: "//a[span[text()='Previous chapter']]",
		chapters: {
			target: ".chapters-list-sidebar a",
			textAttr: "title",
			sort: "r"
		},
		checkCurrentChapter: (url) => url == fn.gu(".chapter-read"),
		customTitle: [".breadcrumb-item", -2, -1],
		hide: ".ph-inpage-widget,center:has(#unlock-overlay),div:has(>h2),.premium-promo-banner",
		category: "comic"
	}, {
		name: "RNCALATION",
		url: {
			h: ["rncalation.online"],
			p: "/cap/"
		},
		box: [".reader-bar~.flex", 1, 800],
		imgs: ".page-img",
		button: [4],
		insertImg: [
			["box", 0, ".reader-bar~.flex:has(.page-img)"], 2
		],
		autoDownload: [0],
		next: "a.nav-btn:has(svg [points^='9'])",
		prev: "a.nav-btn:has(svg [points^='15'])",
		chapters: {
			target: "#chapter-select>option",
			cb: (text, u, o) => ({
				text,
				url: fn.wurl(o.value)
			}),
			sort: "r"
		},
		category: "comic"
	}, {
		name: "Insanos Manhua",
		url: {
			h: ["insanoslibrary.com"],
			p: "-capitulo-"
		},
		box: [".reader-end-nav", 1],
		imgs: "#reader-container img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#reader-pages,#reader-pages+div[style]"),
		autoDownload: [0],
		next: ".reader-next",
		prev: ".reader-prev",
		chapters: async () => {
			let dom = await hr.fetchDoc(q(".reader-back").one);
			let script = q("#adar-main-js-extra", dom).one;
			let code = await hr.text(script.src);
			let AdarConfig = fn.textToObject(code, "AdarConfig", 1, 1);
			let {
				ajaxUrl,
				nonce
			} = AdarConfig;
			let html = "";
			let page = 1;
			let loop = true;
			while (loop) {
				await hr.json(ajaxUrl, {
					headers: {
						"content-type": "application/x-www-form-urlencoded"
					},
					body: new URLSearchParams({
						action: "adar_load_chapters",
						nonce,
						series_id: document.body.dataset.series,
						page,
						order: "asc"
					}),
					method: "POST"
				}).then(json => {
					loop = json.data.has_more;
					html += json.data.html;
					page++;
				});
			}
			let node = fn.html(html);
			return q(".chapter-row", node).map(a => ({
				text: q(".chapter-row__num", a).text,
				url: a.href
			}));
		},
		customTitle: [".reader-series-name", ".reader-chapter-title"],
		hide: "[id*=adblock]",
		category: "comic"
	}, {
		name: "Ikigai Mangas",
		url: {
			h: ["ikigaicomics.lat"],
			p: "/capitulo/"
		},
		imgs: ".reader-pages img",
		button: [4],
		insertImg: [".reader-pages", 2],
		autoDownload: [0],
		next: "//a[span[text()='Siguiente']]",
		prev: "//a[span[text()='Anterior']]",
		chapters: async () => {
			let curl = q("a:has(.inline-block>span)").url;
			let dom = await hr.fetchDoc(curl);
			let eles = q("[data-caps-list] a", dom).all;
			let pages = q("a[aria-current]", dom);
			if (pages.length) {
				pages = Number(fn.getUSP("pagina", pages.at(-1).search));
				let links = fn.arr(pages - 1, (v, i) => `${curl}?pagina=${i + 2}`);
				let resArr = links.map(hr.fetchDoc);
				await Promise.all(resArr).then(doms => {
					for (dom of doms) {
						eles = [...eles, ...q("[data-caps-list] a", dom).all];
					}
				});
			}
			return eles.map(a => ({
				text: q(".card-title", a).text,
				url: a.href
			})).reverse();
		},
		customTitle: [".inline-block>span", 0, 1],
		category: "comic"
	}, {
		name: "RawKuro",
		url: {
			h: ["rawkuro.net", "mangakoma.net", "www.manhuaplus.org", "manhuaplus.org", "mangakoma01.top", "mangakoma01.net", "raw1001.net", "mangaraw1001.cc", "manhuaplus.top", "mangaraw18.net"],
			st: "CHAPTER_ID"
		},
		box: ["#chapterContent,#image_container", 2],
		imgs: () => {
			fn.sm5();
			let cid = Code.num("CHAPTER_ID");
			return hr.text(`/ajax/image/list/chap/${cid}`, {
				headers: {
					"x-requested-with": "XMLHttpRequest"
				},
				method: "POST"
			}).then(text => {
				text = text.replace("The requested URL returned error: 403", "");
				let json = JSON.parse(text);
				let dom = fn.doc(json.html);
				if (q(".separator", dom).one) {
					let divs = q(".separator", dom).sort((a, b) => a.dataset.index - b.dataset.index);
					return divs.map(e => e.firstElementChild.href).filter(e => !e.includes("rawwkuro.jpg"));
				}
				return q(".page-chapter img:not([data-original$='rawwkuro.jpg'])", dom);
			});
		},
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#chapterContent,#image_container"),
		endColor: "white",
		autoDownload: [0],
		next: "a.nextBtn[href*='/'],a.a_next[href*='/']",
		prev: "a.prevBtn[href*='/'],a.a_prev[href*='/']",
		chapters: {
			node: ".nPL_select,.select-chapter",
			target: "option",
			sort: "r"
		},
		customTitle: "main h1",
		category: "comic"
	}, {
		name: "RawOtaku/JManga/MangaReader/MangaNow/MangaXo",
		host: ["rawotaku.com", "jmanga.casa"],
		url: {
			t: ["Otaku", "jmanga", "Read"],
			h: [/^rawotaku/, /^jmanga/, "mangareader.to", "manganow.to", "mangaxo.com"]
		},
		page: () => fn.clp("/read/") || fn.clp("/chapter-"),
		SPA: true,
		observeURL: "nav",
		init: () => fn.waitEle(["#images-content .page-read", ".chapter-item.active"]),
		imgs: () => {
			let id = q(".chapter-item.active").attr("data-id");
			fn.sm5();
			let api = `/json/chapter?mode=vertical&id=${id}`;
			if (fn.lh.includes("mangareader")) {
				api = `/ajax/image/list/chap/${id}?mode=vertical&quality=high&hozPageSize=1`;
			}
			if (fn.lh.includes("manganow") || fn.lh.includes("mangaxo")) {
				api = `/ajax/image/list/${id}?mode=vertical&hozPageSize=1`;
			}
			return fetch(api).then(res => res?.json()).then(json => {
				fn.hm();
				if (fn.lh.includes("mangareader") || fn.lh.includes("manganow") || fn.lh.includes("mangaxo")) {
					let node = fn.html(json.html);
					return q(".iv-card[data-url]", node);
				}
				return [...fn.doc(json.html).images];
			});
		},
		capture: true,
		autoDownload: [0],
		next: "//li[contains(@class,'chapter-item active')]/preceding-sibling::li[1]/a",
		prev: ".chapter-item.active+li>a",
		chapters: {
			target: "#ja-chapters a,.reading-list a",
			textNode: ".name",
			sort: "r"
		},
		customTitle: () => fn.dt({
			t: fn.gt(".manga-name") + " - " + fn.gt("#dropdown-chapters button")
		}),
		category: "comic"
	}, {
		name: "DFlowScans",
		url: {
			h: "dflow.alwaysdata.net",
			p: "/ReadChapter/"
		},
		box: ["#readerContainer", 1],
		imgs: () => Code.arr("const pages").map(e => e.url),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle("#readerContainer"),
		autoDownload: [0],
		next: "a:has(>.fa-arrow-right).btn-primary",
		prev: "a:has(>.fa-arrow-left ).btn-primary",
		chapters: {
			url: "a:has(>.fa-list)",
			target: "#chapters-section>div>div[style]>div",
			urlNode: "a",
			textNode: "h5",
			sort: "r"
		},
		customTitle: () => fn.title(" - ", 3),
		category: "comic"
	}, {
		name: "MangaFreak",
		url: {
			t: "MangaFreak",
			p: "/Read"
		},
		box: [".slideshow-container", 1],
		imgs: ".slideshow-container img",
		button: [4],
		insertImg: [
			["box", 0, ".slideshow-container"], 2
		],
		autoDownload: [0],
		next: "//div[text()='Next Chapter:']/following-sibling::span[1]/a",
		prev: "//div[text()='Previous Chapter:']/following-sibling::span[1]/a",
		chapters: {
			target: ".chapter_list option"
		},
		customTitle: () => fn.dt({
			d: [
				"Read ",
				" - MangaFreak"
			]
		}),
		category: "comic"
	}, {
		name: "LeerCapitulo",
		host: ["www.leercapitulo.co"],
		url: {
			e: ".chapter-title>a[title=Leercapitulo]",
			p: "/leer/"
		},
		init: () => fn.waitEle("#page_select"),
		imgs: () => q("#page_select option").map(e => e.value),
		button: [4],
		insertImg: [".each-page", 2],
		autoDownload: [0],
		next: "a.next",
		prev: "a.pre",
		chapters: {
			node: "select[rel='chap-select']",
			target: "option",
			sort: "r"
		},
		customTitle: ".bodycontainer h1",
		category: "comic"
	}, {
		name: "ego",
		url: {
			h: ["egotoons.com"],
		},
		page: "/capitulo/",
		SPA: true,
		observeURL: "nav",
		NextJs: true,
		init: () => fn.waitEle("img[alt^='Página']"),
		imgs: () => q("img[alt^='Página']"),
		capture: true,
		autoDownload: [0],
		next: "//a[text()='Próximo']",
		prev: "//a[text()='Anterior']",
		customTitle: "main h1",
		category: "comic"
	}, {
		name: "ZonaTMO",
		url: {
			h: ["zonatmo.org"],
			p: "/view"
		},
		imgs: ".reader-img-wrap>img",
		autoDownload: [0],
		next: "a[title='Cap. anterior']",
		prev: "a[title='Cap. siguiente']",
		chapters: {
			target: "#sb-chapters-list a",
			sort: "r"
		},
		customTitle: () => fn.title(" — ZonaTMO"),
		category: "comic"
	}, {
		name: "N站模板無變數圖名隨機",
		url: {
			h: ["hentaivsmanga.com", "savehentai.info", "www.hentaihardcore.net", "hentai4all.com"],
			e: "#thumbnail-container"
		},
		imgs: () => hr.getImgA("#image-container img", q("#thumbnail-container a").urls),
		thums: "#thumbnail-container img",
		button: [4],
		insertImg: ["#thumbnail-container", 2],
		customTitle: () => fn.getText(["#info h2", "#info h1"]),
		category: "hcomic"
	}, {
		name: "N站模板無變數無縮略圖",
		host: ["multi-manga.today", "hmanga.today", "w1.multi-manga.com"],
		url: {
			h: /multi|manga/,
			e: ".logo img[src*='hitomila']"
		},
		imgs: "#thumbnail-container img",
		button: [4],
		insertImg: ["#thumbnail-container", 2],
		customTitle: () => fn.getText(["#info h2", "#info h1"]),
		category: "hcomic"
	}, {
		name: "N站模板無變數無縮略圖",
		host: ["hentaidatia.com", "nhentai.online", "hentaiyaoi.net", "nhentaiyaoi.net", "hentaibl.com", "nhentai.net.br"],
		url: {
			h: "hentai",
			e: ".post-titulo,.tituloOriginal"
		},
		srcset: ".post-fotos img",
		button: [4],
		insertImg: [".post-fotos", 2],
		customTitle: () => fn.getText([".tituloOriginal", ".post-titulo"]),
		hide: ".anuncios,#onesignal-slidedown-container,.floating-button",
		category: "hcomic"
	}, {
		name: "KuManga",
		url: {
			//h: "www.kumanga.com",
			t: "| KuManga",
			p: "/manga/leer/"
		},
		imgs: () => fn.waitEle(["div[x-data^=imageGallery] img"]),
		button: [4],
		insertImg: ["div[x-data^=imageGallery]", 2],
		autoDownload: [0],
		next: ".chapter_next:not(.disabled)",
		prev: ".chapter_prev:not(.disabled)",
		customTitle: [".t_manga", ".t_cap"],
		category: "comic"
	}, {
		name: "やわらかスピリッツ",
		url: {
			h: ["yawaspi.com"],
			p: "/comic/"
		},
		imgs: () => fn.waitEle([".vertical__inner ul li img"]),
		capture: true,
		autoDownload: [0],
		next: "a.-next",
		prev: "a.-prev",
		customTitle: ["header h2", "header h3"],
		category: "comic"
	}, {
		name: "酷看漫画",
		host: ["www.kukanmanhua.org"],
		url: {
			t: "酷看漫画",
			p: "/chapter/",
			e: "img[data-encrypted]",
			d: "pc"
		},
		imgs: () => q("img[data-encrypted]").attrs("data-encrypted", atob),
		button: [4],
		insertImg: [".comiclist", 2],
		autoDownload: [0],
		next: "//a[text()='下一章']",
		prev: "//a[text()='上一章']",
		chapters: {
			url: ".chapter-btn",
			target: "#detail-list-select a"
		},
		customTitle: [".comic-name", ".title"],
		category: "comic"
	}, {
		name: "酷看漫画",
		host: ["www.kukanmanhua.org"],
		url: {
			t: "酷看漫画",
			p: "/chapter/",
			e: "img[data-encrypted]",
			d: "m"
		},
		imgs: () => q("img[data-encrypted]").attrs("data-encrypted", atob),
		button: [4],
		insertImg: ["#cp_img", 2],
		autoDownload: [0],
		next: "//a[p[text()='下一章']]",
		prev: "//a[p[text()='上一章']]",
		chapters: {
			url: "//a[p[text()='目录']]",
			target: "#detail-list-select a"
		},
		customTitle: () => {
			let {
				book_name,
				chapter_name
			} = Code.obj("bookInfo");
			return book_name + " - " + chapter_name;
		},
		category: "comic"
	}, {
		name: "readData&setComic 格式",
		host: ["say-on.com", "ahgwyd.com", "www.jianyu120.com", "www.jiasenongye.com", "www.one-uplus.com", "www.qize-airline.com"],
		url: {
			st: [/(R|r)eadData/, "setComic"],
			p: "/read/"
		},
		imgs: ".read-content img,#comicContainer img,.pic-ist img",
		autoDownload: [0],
		next: "//a[div[text()='下一话']][contains(@href,'/read/')] | //a[@class='page-next'][contains(@href,'/read/')] | //a[@id='nextButton'][contains(@href,'/read/')]",
		prev: "//a[div[text()='上一话']][contains(@href,'/read/')] | //a[@class='page-prev'][contains(@href,'/read/')] | //a[@id='prevButton'][contains(@href,'/read/')]",
		chapters: {
			target: ".chapter-sidebar a,.list-main a"
		},
		customTitle: () => {
			let {
				comicName,
				readName
			} = Code.obj("[Rr]eadData");
			return comicName + " - " + readName;
		},
		category: "comic"
	}, {
		name: "KuroNavi",
		host: ["kuronavi.one"],
		url: {
			e: "meta[property='og:site_name'][content=kuronavi]",
			p: "/chapter"
		},
		imgs: "#chapter-content .page-chapter>img",
		button: [4],
		insertImg: ["#chapter-content", 2],
		autoDownload: [0],
		next: "//a[button[contains(text(),'次の章')]][contains(@href,'chapter')]",
		prev: "//a[button[contains(text(),'前の章')]][contains(@href,'chapter')]",
		chapters: () => {
			let id = Code.num("comicId");
			return hr.json(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${id}`).then(json => {
				return json.chapters.map(({
					name,
					url
				}) => ({
					text: name,
					url
				})).reverse();
			});
		},
		customTitle: ".sticky-inner-wrapper h1",
		category: "comic"
	}, {
		name: "Japscan",
		url: {
			h: ["japscan.st"]
		},
		box: ["nav~.grid:has(>a>div>img)", 2],
		imgs: "nav~.grid:has(>a>div>img) img",
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: {
			hide: "nav~.grid:has(>a>div>img)"
		},
		next: "//a[text()='Chapitre suivant ›']",
		prev: "//a[text()='‹ Chapitre précédent']",
		chapters: {
			url: "//a[text()='Tous les chapitres']",
			target: "[data-chapter-list] a",
			textNode: "[data-ch-num]",
			cb: (text, u) => ({
				text,
				url: u.replace(/\/\d+$/, "")
			}),
			sort: "r"
		},
		customTitle: ["section a>h1", "section a:has(>h1)+p"],
		category: "comic"
	}, {
		name: "Japscan",
		url: {
			h: ["japscan.st"],
			e: ".reader-stage"
		},
		box: [".reader-stage", 2, 1280],
		imgs: () => hr.getImgA("nav~.grid:has(>a>div>img) img", [fn.lp.replace(/\/\d+$/, "")]),
		button: [4],
		insertImg: ["box", 2],
		insertImgAF: () => fn.hideEle(".reader-stage"),
		next: ".reader-stage~div .flex:has(>a>svg):not(:has(select))>a:text:›",
		prev: ".reader-stage~div .flex:has(>a>svg):not(:has(select))>a:text:‹",
		chapters: {
			url: "header[data-topbar] a",
			target: "[data-chapter-list] a",
			textNode: "[data-ch-num]",
			sort: "r"
		},
		customTitle: ["header[data-topbar] a", 0, 1],
		category: "comic"
	}];
};