From 2cec32f66cab9969dc4afe7bade33e71e5e25108 Mon Sep 17 00:00:00 2001 From: Gianmarco David Date: Sun, 19 Feb 2017 12:14:51 +0100 Subject: [PATCH] Added extensions for mangaeden(en) and perveden(it+en) (#11) * Added mangaeden(it) extension * Not overriding id anymore * Fixed search selector for the case the query has no results * Added mangaeden(en) extension * Removed id override * Added perveden it+en extensions * Minor modifications: today/yesterday management, null safety and code enhancements * Type and status are now multiselect * Genres, types and statuses now are functions * Genres/types are now multiselect and minor modifications * Renamed into Manga Eden, fixed missing cover imgs and checkbox filter now are shown at the end * Changes done on mangaeden(it) has been reflected on mangaeden(en) and perveden(it/en) * Removed unnecessary code and fixed english date format * Added text filter support for categories (from paronos) * Fixed page image url * Added text filter support for categories also in perveden/en (from paronos) --- en-mangaeden/build.gradle | 13 + .../extension/en/mangaeden/Mangaeden.kt | 203 +++ en-perveden/build.gradle | 13 + .../extension/en/perveden/Perveden.kt | 1332 +++++++++++++++++ .../extension/it/mangaeden/Mangaeden.kt | 2 +- it-perveden/build.gradle | 13 + .../extension/it/perveden/Perveden.kt | 400 +++++ settings.gradle | 3 + 8 files changed, 1978 insertions(+), 1 deletion(-) create mode 100644 en-mangaeden/build.gradle create mode 100644 en-mangaeden/src/eu/kanade/tachiyomi/extension/en/mangaeden/Mangaeden.kt create mode 100644 en-perveden/build.gradle create mode 100644 en-perveden/src/eu/kanade/tachiyomi/extension/en/perveden/Perveden.kt create mode 100644 it-perveden/build.gradle create mode 100644 it-perveden/src/eu/kanade/tachiyomi/extension/it/perveden/Perveden.kt diff --git a/en-mangaeden/build.gradle b/en-mangaeden/build.gradle new file mode 100644 index 000000000..761966fa5 --- /dev/null +++ b/en-mangaeden/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: Mangaeden' + pkgNameSuffix = "en.mangaeden" + extClass = '.Mangaeden' + extVersionCode = 1 + extVersionSuffix = 1 + libVersion = '1.0' +} + +apply from: '../common.gradle' diff --git a/en-mangaeden/src/eu/kanade/tachiyomi/extension/en/mangaeden/Mangaeden.kt b/en-mangaeden/src/eu/kanade/tachiyomi/extension/en/mangaeden/Mangaeden.kt new file mode 100644 index 000000000..dc3b4d912 --- /dev/null +++ b/en-mangaeden/src/eu/kanade/tachiyomi/extension/en/mangaeden/Mangaeden.kt @@ -0,0 +1,203 @@ +package eu.kanade.tachiyomi.extension.en.mangaeden + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.HttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +class Mangaeden : ParsedHttpSource() { + + override val name = "Manga Eden" + + override val baseUrl = "http://www.mangaeden.com" + + override val lang = "en" + + override val supportsLatest = true + + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/en/en-directory/?order=3&page=$page", headers) + + override fun latestUpdatesSelector() = searchMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector() + + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/en/en-directory/?order=1&page=$page", headers) + + override fun popularMangaSelector() = searchMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun popularMangaNextPageSelector() = searchMangaNextPageSelector() + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = HttpUrl.parse("$baseUrl/en/en-directory/").newBuilder().addQueryParameter("title", query) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is StatusList -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("status", it) } + is Types -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("type", it) } + is GenreList -> filter.state + .filter { !it.isIgnored() } + .forEach { genre -> url.addQueryParameter(if (genre.isIncluded()) "categoriesInc" else "categoriesExcl", genre.id) } + is TextField -> url.addQueryParameter(filter.key, filter.state) + is OrderBy -> filter.state?.let { + val sortId = it.index + url.addQueryParameter("order", if (it.ascending) "-$sortId" else "$sortId") + } + } + } + url.addQueryParameter("page", page.toString()) + return GET(url.toString(), headers) + } + + override fun searchMangaSelector() = "table#mangaList > tbody > tr:has(td:gt(1))" + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + element.select("td > a").first()?.let { + setUrlWithoutDomain(it.attr("href")) + title = it.text() + } + } + + override fun searchMangaNextPageSelector() = "a:has(span.next)" + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + val infos = document.select("div.rightbox") + + author = infos.select("a[href^=/en/en-directory/?author]").first()?.text() + artist = infos.select("a[href^=/en/en-directory/?artist]").first()?.text() + genre = infos.select("a[href^=/en/en-directory/?categoriesInc]").map { it.text() }.joinToString() + description = document.select("h2#mangaDescription").text() + status = parseStatus(infos.select("h4:containsOwn(Status)").first()?.nextSibling().toString()) + val img = infos.select("div.mangaImage2 > img").first()?.attr("src") + if (!img.isNullOrBlank()) thumbnail_url = img.let { "http:$it" } + } + + private fun parseStatus(status: String) = when { + status.contains("Ongoing", true) -> SManga.ONGOING + status.contains("Completed", true) -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + + override fun chapterListSelector() = "div#leftContent > table > tbody > tr" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + val a = element.select("a[href^=/en/en-manga/]").first() + + setUrlWithoutDomain(a.attr("href")) + name = a?.select("b")?.first()?.text().orEmpty() + date_upload = element.select("td.chapterDate").first()?.text()?.let { parseChapterDate(it.trim()) } ?: 0L + } + + private fun parseChapterDate(date: String): Long = + if ("Today" in date) { + Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else if ("Yesterday" in date) { + Calendar.getInstance().apply { + add(Calendar.DATE, -1) + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else try { + SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH).parse(date).time + } catch (e: ParseException) { + 0L + } + + override fun pageListParse(document: Document): List = mutableListOf().apply { + document.select("option[value^=/en/en-manga/]").forEach { + add(Page(size, "$baseUrl${it.attr("value")}")) + } + } + + override fun imageUrlParse(document: Document): String = document.select("a#nextA.next > img").first()?.attr("src").let { "http:$it" } + + private class NamedId(name: String, val id: Int) : Filter.CheckBox(name) + private class Genre(name: String, val id: String) : Filter.TriState(name) + private class TextField(name: String, val key: String) : Filter.Text(name) + private class OrderBy : Filter.Sort("Order by", arrayOf("Manga title", "Views", "Chapters", "Latest chapter"), + Filter.Sort.Selection(1, false)) + + private class StatusList(statuses: List) : Filter.Group("Stato", statuses) + private class Types(types: List) : Filter.Group("Tipo", types) + private class GenreList(genres: List) : Filter.Group("Genres", genres) + + override fun getFilterList() = FilterList( + TextField("Author", "author"), + TextField("Artist", "artist"), + OrderBy(), + Types(types()), + StatusList(statuses()), + GenreList(genres()) + ) + + private fun types() = listOf( + NamedId("Japanese Manga", 0), + NamedId("Korean Manhwa", 1), + NamedId("Chinese Manhua", 2), + NamedId("Comic", 3), + NamedId("Doujinshi", 4) + ) + + private fun statuses() = listOf( + NamedId("Ongoing", 1), + NamedId("Completed", 2), + NamedId("Suspended", 0) + ) + + private fun genres() = listOf( + Genre("Action", "4e70e91bc092255ef70016f8"), + Genre("Adult", "4e70e92fc092255ef7001b94"), + Genre("Adventure", "4e70e918c092255ef700168e"), + Genre("Comedy", "4e70e918c092255ef7001675"), + Genre("Doujinshi", "4e70e928c092255ef7001a0a"), + Genre("Drama", "4e70e918c092255ef7001693"), + Genre("Ecchi", "4e70e91ec092255ef700175e"), + Genre("Fantasy", "4e70e918c092255ef7001676"), + Genre("Gender Bender", "4e70e921c092255ef700184b"), + Genre("Harem", "4e70e91fc092255ef7001783"), + Genre("Historical", "4e70e91ac092255ef70016d8"), + Genre("Horror", "4e70e919c092255ef70016a8"), + Genre("Josei", "4e70e920c092255ef70017de"), + Genre("Martial Arts", "4e70e923c092255ef70018d0"), + Genre("Mature", "4e70e91bc092255ef7001705"), + Genre("Mecha", "4e70e922c092255ef7001877"), + Genre("Mystery", "4e70e918c092255ef7001681"), + Genre("One Shot", "4e70e91dc092255ef7001747"), + Genre("Psychological", "4e70e919c092255ef70016a9"), + Genre("Romance", "4e70e918c092255ef7001677"), + Genre("School Life", "4e70e918c092255ef7001688"), + Genre("Sci-fi", "4e70e91bc092255ef7001706"), + Genre("Seinen", "4e70e918c092255ef700168b"), + Genre("Shoujo", "4e70e918c092255ef7001667"), + Genre("Shounen", "4e70e918c092255ef700166f"), + Genre("Slice of Life", "4e70e918c092255ef700167e"), + Genre("Smut", "4e70e922c092255ef700185a"), + Genre("Sports", "4e70e91dc092255ef700172e"), + Genre("Supernatural", "4e70e918c092255ef700166a"), + Genre("Tragedy", "4e70e918c092255ef7001672"), + Genre("Webtoons", "4e70ea70c092255ef7006d9c"), + Genre("Yaoi", "4e70e91ac092255ef70016e5"), + Genre("Yuri", "4e70e92ac092255ef7001a57") + ) +} \ No newline at end of file diff --git a/en-perveden/build.gradle b/en-perveden/build.gradle new file mode 100644 index 000000000..3db5c03e9 --- /dev/null +++ b/en-perveden/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: Perveden' + pkgNameSuffix = "en.perveden" + extClass = '.Perveden' + extVersionCode = 1 + extVersionSuffix = 1 + libVersion = '1.0' +} + +apply from: '../common.gradle' diff --git a/en-perveden/src/eu/kanade/tachiyomi/extension/en/perveden/Perveden.kt b/en-perveden/src/eu/kanade/tachiyomi/extension/en/perveden/Perveden.kt new file mode 100644 index 000000000..a810b2866 --- /dev/null +++ b/en-perveden/src/eu/kanade/tachiyomi/extension/en/perveden/Perveden.kt @@ -0,0 +1,1332 @@ +package eu.kanade.tachiyomi.extension.en.perveden + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.HttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +class Perveden : ParsedHttpSource() { + + override val name = "PervEden" + + override val baseUrl = "http://www.perveden.com" + + override val lang = "en" + + override val supportsLatest = true + + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/en/en-directory/?order=3&page=$page", headers) + + override fun latestUpdatesSelector() = searchMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector() + + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/en/en-directory/?order=1&page=$page", headers) + + override fun popularMangaSelector() = searchMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun popularMangaNextPageSelector() = searchMangaNextPageSelector() + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = HttpUrl.parse("$baseUrl/en/en-directory/").newBuilder().addQueryParameter("title", query) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is StatusList -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("status", it) } + is Types -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("type", it) } + is TextField -> url.addQueryParameter(filter.key, filter.state) + is OrderBy -> filter.state?.let { + val sortId = it.index + url.addQueryParameter("order", if (it.ascending) "-$sortId" else "$sortId") + } + is GenreField -> filter.state.toLowerCase(Locale.ENGLISH).split(',', ';').forEach { + val id = genres[it.trim()] + if (id != null) url.addQueryParameter(filter.key, id) + } + } + } + url.addQueryParameter("page", page.toString()) + return GET(url.toString(), headers) + } + + override fun searchMangaSelector() = "table#mangaList > tbody > tr:has(td:gt(1))" + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + element.select("td > a").first()?.let { + setUrlWithoutDomain(it.attr("href")) + title = it.text() + } + } + + override fun searchMangaNextPageSelector() = "a:has(span.next)" + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + val infos = document.select("div.rightbox") + + author = infos.select("a[href^=/en/en-directory/?author]").first()?.text() + artist = infos.select("a[href^=/en/en-directory/?artist]").first()?.text() + genre = infos.select("a[href^=/en/en-directory/?categoriesInc]").map { it.text() }.joinToString() + description = document.select("h2#mangaDescription").text() + status = parseStatus(infos.select("h4:containsOwn(Status)").first()?.nextSibling().toString()) + val img = infos.select("div.mangaImage2 > img").first()?.attr("src") + if (!img.isNullOrBlank()) thumbnail_url = img.let { "http:$it" } + } + + private fun parseStatus(status: String) = when { + status.contains("Ongoing", true) -> SManga.ONGOING + status.contains("Completed", true) -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + + override fun chapterListSelector() = "div#leftContent > table > tbody > tr" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + val a = element.select("a[href^=/en/en-manga/]").first() + + setUrlWithoutDomain(a.attr("href")) + name = a?.select("b")?.first()?.text().orEmpty() + date_upload = element.select("td.chapterDate").first()?.text()?.let { parseChapterDate(it.trim()) } ?: 0L + } + + private fun parseChapterDate(date: String): Long = + if ("Today" in date) { + Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else if ("Yesterday" in date) { + Calendar.getInstance().apply { + add(Calendar.DATE, -1) + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else try { + SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH).parse(date).time + } catch (e: ParseException) { + 0L + } + + override fun pageListParse(document: Document): List = mutableListOf().apply { + document.select("option[value^=/en/en-manga/]").forEach { + add(Page(size, "$baseUrl${it.attr("value")}")) + } + } + + override fun imageUrlParse(document: Document): String = document.select("a#nextA.next > img").first()?.attr("src").let { "http:$it" } + + private class NamedId(name: String, val id: Int) : Filter.CheckBox(name) + private class TextField(name: String, val key: String) : Filter.Text(name) + private class GenreField(name: String, val key: String) : Filter.Text(name) + private class OrderBy : Filter.Sort("Order by", arrayOf("Manga title", "Views", "Chapters", "Latest chapter"), + Filter.Sort.Selection(1, false)) + + private class StatusList(statuses: List) : Filter.Group("Stato", statuses) + private class Types(types: List) : Filter.Group("Tipo", types) + + override fun getFilterList() = FilterList( + TextField("Author", "author"), + TextField("Artist", "artist"), + GenreField("Included genres", "categoriesInc"), + GenreField("Excluded genres", "categoriesExcl"), + OrderBy(), + Types(types()), + StatusList(statuses()) + ) + + private fun types() = listOf( + NamedId("Japanese Manga", 0), + NamedId("Korean Manhwa", 1), + NamedId("Chinese Manhua", 2), + NamedId("Comic", 3), + NamedId("Doujinshi", 4) + ) + + private fun statuses() = listOf( + NamedId("Ongoing", 1), + NamedId("Completed", 2), + NamedId("Suspended", 0) + ) + + private val genres = mapOf( + Pair("+", "53c5967245b9ef2b85e38cfa"), + Pair("100mjack", "56b8ea8a719a160f1970f592"), + Pair("111 touban", "57e2d1af719a1649a0b6f40e"), + Pair("21st century renaissance", "5899939e719a165a8cf59398"), + Pair("4den hiro", "56c2285d719a168abf0cf302"), + Pair("7days", "56c22ad2719a168abf0d1182"), + Pair("action", "4e70ea24c092255ef7004f85"), + Pair("adult", "4e70e91dc092255ef7001727"), + Pair("adventure", "4e70ea24c092255ef7004f86"), + Pair("ahegao", "51793ded45b9efe88c5e59cd"), + Pair("alien", "5591faf0719a16886c3376b0"), + Pair("amputee", "55925592719a16886c347d02"), + Pair("anilingus", "5591faec719a16886c33769e"), + Pair("animal boy", "577e6173719a1672c697a00a"), + Pair("animal ears", "5591faf0719a16886c3376ac"), + Pair("animal girl", "5591fc1f719a16886c337c0a"), + Pair("armpit", "55920eb7719a16886c33b920"), + Pair("autofellatio", "55920a59719a16886c33ac99"), + Pair("bbm / fat man", "577e5fd2719a1614690bd0f5"), + Pair("bbw", "5591fbcc719a16886c337a85"), + Pair("bdsm", "5591fb8f719a16886c337982"), + Pair("band-aid", "55921508719a16886c33c325"), + Pair("bathroom sex", "5591fafe719a16886c3376e4"), + Pair("bestiality", "5591fed8719a16886c3383f7"), + Pair("big areola", "5591fb8d719a16886c337975"), + Pair("big ass", "5591faf4719a16886c3376c4"), + Pair("bikini", "5591fb7b719a16886c337933"), + Pair("birth", "5591fed8719a16886c3383f5"), + Pair("bisexual", "55921d83719a16886c33da43"), + Pair("blackmail", "5591fc6c719a16886c337d77"), + Pair("blindfold", "5591fbaa719a16886c3379f8"), + Pair("blindness", "55923a7c719a16886c3427fb"), + Pair("bloomers", "5591ff70719a16886c3384e5"), + Pair("blowjob", "5591faed719a16886c3376a4"), + Pair("body painting", "55925589719a16886c347ce4"), + Pair("body swap", "55922ee2719a16886c340825"), + Pair("body writing", "559215a4719a16886c33c602"), + Pair("bodysuit", "5591ff70719a16886c3384e9"), + Pair("breast expansion", "559207e0719a16886c33a1dd"), + Pair("breast sucking", "5591faed719a16886c3376a2"), + Pair("bride", "5591fb7b719a16886c337934"), + Pair("bukkake", "5591fb31719a16886c3377f2"), + Pair("bunny ears", "5591fea4719a16886c3383b6"), + Pair("bunnygirl", "5591fd9d719a16886c338136"), + Pair("cbt", "5591fb8e719a16886c33797b"), + Pair("cat ears", "5591fb7a719a16886c33792c"), + Pair("catgirl", "5591ff70719a16886c3384e6"), + Pair("centaur", "559207e0719a16886c33a1dc"), + Pair("cervical penetration", "577e6176719a1672c697a022"), + Pair("chastity belt", "5592087e719a16886c33a520"), + Pair("childhood friend", "5591ffd8719a16886c33867f"), + Pair("chinese dress", "559202f8719a16886c339044"), + Pair("collar", "5591fbab719a16886c3379fb"), + Pair("comedy", "4e70e91dc092255ef7001728"), + Pair("condom", "5591fb32719a16886c3377f6"), + Pair("cow girl", "5591ff70719a16886c3384e7"), + Pair("crossdressing", "5591fb31719a16886c3377ef"), + Pair("crotchless / breastless", "577e5fe7719a161c005866b7"), + Pair("dandere", "55925dbc719a16886c349758"), + Pair("daughter", "5591fd72719a16886c33807c"), + Pair("deepthroat", "5591fb7b719a16886c33792d"), + Pair("defloration", "5591fb0c719a16886c337709"), + Pair("devil", "5591fc5d719a16886c337d2d"), + Pair("diaper", "55928caa719a16886c3536f7"), + Pair("dirty old man", "5591fb1b719a16886c337762"), + Pair("doctor", "55920cbf719a16886c33b290"), + Pair("dog ears", "5591fe05719a16886c33825b"), + Pair("dog girl", "5591fe03719a16886c338257"), + Pair("dojikko", "5591ff70719a16886c3384e4"), + Pair("doll", "55922f89719a16886c340be4"), + Pair("double penetration", "5591fb1b719a16886c337763"), + Pair("drama", "4e70ea23c092255ef7004f2f"), + Pair("drugs", "5591faf0719a16886c3376b4"), + Pair("drunk", "5591faec719a16886c33769c"), + Pair("ecchi", "4e70ea01c092255ef7004653"), + Pair("egg laying", "55920850719a16886c33a40c"), + Pair("elder sister", "5591ff18719a16886c338487"), + Pair("elf", "5591fb73719a16886c33790e"), + Pair("enema", "5591fc6c719a16886c337d7b"), + Pair("exhibitionism", "5591fb0c719a16886c337710"), + Pair("eyepatch", "5591ff19719a16886c338488"), + Pair("face sitting", "5591faee719a16886c3376a5"), + Pair("fairy", "55921560719a16886c33c4c5"), + Pair("fantasy", "4e70ea23c092255ef7004f5e"), + Pair("fingering", "5591faec719a16886c3376a0"), + Pair("fisting", "559208c0719a16886c33a66d"), + Pair("foot fetish", "5591fbd7719a16886c337acb"), + Pair("footjob", "5591fbab719a16886c3379fd"), + Pair("fox ears", "55921632719a16886c33c8fd"), + Pair("fox girl", "55921632719a16886c33c8fe"), + Pair("freckles", "5592019b719a16886c338dde"), + Pair("french kissing", "577e5fd2719a1614690bd100"), + Pair("frotting", "559211ff719a16886c33be47"), + Pair("full color", "5591faf0719a16886c3376b2"), + Pair("fundoshi", "559215a4719a16886c33c600"), + Pair("furry", "5591fe03719a16886c338258"), + Pair("futa on female", "577e5fd1719a1614690bd0e9"), + Pair("futa on male", "5591fc9c719a16886c337e51"), + Pair("futanari on futanari", "5591fd87719a16886c3380de"), + Pair("gangbang", "5591fb90719a16886c337983"), + Pair("gender bender", "4e70e925c092255ef7001957"), + Pair("ghost", "5591fc0a719a16886c337bbe"), + Pair("giantess", "559253c5719a16886c347648"), + Pair("gloves", "577e5fe8719a161c005866bf"), + Pair("gokkun", "5591fbaa719a16886c3379f6"), + Pair("gothic", "55921f79719a16886c33dfa7"), + Pair("group sex", "5591faed719a16886c3376a3"), + Pair("guro", "5591fe3f719a16886c3382d3"), + Pair("hairjob", "559206a7719a16886c339d7f"), + Pair("hairy armpits", "55920591719a16886c3399e3"), + Pair("handjob", "5591fb8e719a16886c33797a"), + Pair("happy sex", "5591faf0719a16886c3376ae"), + Pair("harem", "4e70ea23c092255ef7004f55"), + Pair("hat", "577e627d719a160f53827289"), + Pair("heterochromia", "559200e4719a16886c338af5"), + Pair("historical", "4e70ea23c092255ef7004f5f"), + Pair("horror", "4e70ea26c092255ef70050a9"), + Pair("hotpants", "55920090719a16886c3389ac"), + Pair("huge breasts", "5591fb8f719a16886c337981"), + Pair("huge penis", "5591fb32719a16886c3377f7"), + Pair("human toilet", "577e5fd2719a1614690bd0f8"), + Pair("hypnosis", "5592044f719a16886c33928e"), + Pair("imouto", "5591fb7b719a16886c337936"), + Pair("impregnation", "5591faf0719a16886c3376af"), + Pair("inverted nipples", "5591fef4719a16886c338434"), + Pair("kimono", "5591fed8719a16886c3383f6"), + Pair("kimono / yukata", "577e5fd1719a1614690bd0ec"), + Pair("kunoichi", "55920071719a16886c33892e"), + Pair("kuudere", "55921679719a16886c33c9d5"), + Pair("lactation", "5591faf0719a16886c3376b7"), + Pair("lamia", "55920850719a16886c33a40d"), + Pair("large breasts", "5591faec719a16886c33769d"), + Pair("legal loli", "577e5fe8719a161c005866c0"), + Pair("licking", "5591fb1b719a16886c337760"), + Pair("lowleg", "5591fb8d719a16886c337974"), + Pair("milf", "5591fb8d719a16886c337972"), + Pair("maebari", "55921a27719a16886c33d237"), + Pair("magical girl", "5591fba4719a16886c3379e2"), + Pair("male on futa", "577e6279719a160f53827278"), + Pair("maledom", "5591fbab719a16886c3379f9"), + Pair("martial arts", "4e70ea27c092255ef70050cd"), + Pair("masturbation", "5591fb23719a16886c337799"), + Pair("mature", "4e70e91dc092255ef700172b"), + Pair("mecha", "4e70ea31c092255ef7005410"), + Pair("menstruation", "55921cc6719a16886c33d7da"), + Pair("mermaid", "5592713f719a16886c34df91"), + Pair("military uniform", "5591fba2719a16886c3379cf"), + Pair("mind break", "5591fb0c719a16886c33770b"), + Pair("mind control", "5591fafe719a16886c3376e6"), + Pair("monster", "5591fafd719a16886c3376e2"), + Pair("mother", "5591fc57719a16886c337cff"), + Pair("mouth gag", "5591fc6c719a16886c337d7a"), + Pair("multiple breasts", "559207e0719a16886c33a1da"), + Pair("multiple insertion", "5591fb8e719a16886c337977"), + Pair("multiple penises", "5591fe3f719a16886c3382d4"), + Pair("muscle", "55920071719a16886c33892d"), + Pair("mystery", "4e70ea29c092255ef70051fa"), + Pair("naked apron", "5591fb7a719a16886c33792b"), + Pair("nipple fuck", "55920242719a16886c338ec0"), + Pair("nipple penetration", "577e5e30719a165576d6a2a4"), + Pair("nun", "55920692719a16886c339d4e"), + Pair("nyotaimori", "559a5ebb719a16532b1e67a9"), + Pair("office lady", "5591fb8e719a16886c33797c"), + Pair("onahole", "55920754719a16886c339f5d"), + Pair("onsen", "5591fe04719a16886c338259"), + Pair("oppai loli", "5591fb4e719a16886c337885"), + Pair("otouto", "55920409719a16886c33922e"), + Pair("pajamas", "55920c39719a16886c33afdd"), + Pair("pantyhose", "5591fb7b719a16886c337931"), + Pair("pet girl", "5591fb1b719a16886c33775e"), + Pair("phimosis", "5591fb8d719a16886c337970"), + Pair("piercings", "559203aa719a16886c3391be"), + Pair("police uniform", "55920545719a16886c3397dd"), + Pair("princess", "5591fba2719a16886c3379ce"), + Pair("prostitution", "5591faf4719a16886c3376c5"), + Pair("psychological", "4e70ea01c092255ef7004650"), + Pair("pubic hair", "5591faf0719a16886c3376b1"), + Pair("race queen", "5591fde9719a16886c33822d"), + Pair("rape", "5591fafe719a16886c3376e5"), + Pair("reverse ntr", "577e5fea719a161c005866ca"), + Pair("reverse rape", "5591fb8d719a16886c33796f"), + Pair("robot girl", "5592068d719a16886c339d47"), + Pair("romance", "4e70e9ffc092255ef70045b4"), + Pair("scat", "55920445719a16886c339268"), + Pair("school life", "4e70e925c092255ef7001958"), + Pair("school swimsuit", "5591ff71719a16886c3384eb"), + Pair("school uniform", "5591faf4719a16886c3376c1"), + Pair("sci-fi", "4e70ea26c092255ef70050c0"), + Pair("sex toys", "5591faec719a16886c33769f"), + Pair("shemale", "55920d30719a16886c33b4f6"), + Pair("shimaidon", "577e62ab719a161e140239e3"), + Pair("shoujo ai", "4e70ea23c092255ef7004f52"), + Pair("shounen ai", "4e70ea01c092255ef7004649"), + Pair("sixty-nine", "5591faef719a16886c3376a7"), + Pair("slave", "5591fb1b719a16886c33775c"), + Pair("sleeping", "5591fb5f719a16886c3378ca"), + Pair("slice of life", "4e70e925c092255ef7001959"), + Pair("slime girl", "559205c7719a16886c339b3a"), + Pair("slut", "577e5fe7719a161c005866b8"), + Pair("small penis", "5591fd87719a16886c3380db"), + Pair("smegma", "5591fb8e719a16886c337976"), + Pair("smut", "4e70ea24c092255ef7004f95"), + Pair("spanking", "559200cf719a16886c338ab4"), + Pair("spitroast", "5591fb1c719a16886c337765"), + Pair("sports", "4e70ea2ac092255ef7005231"), + Pair("squirting", "5591faec719a16886c3376a1"), + Pair("stalking", "559201d6719a16886c338e2c"), + Pair("stomach bulge", "5591fb32719a16886c3377f8"), + Pair("straight shota", "5591fb4e719a16886c337884"), + Pair("strap-on", "5591fbba719a16886c337a3c"), + Pair("succubus", "55920135719a16886c338c97"), + Pair("sumata", "5591fbab719a16886c3379fa"), + Pair("supernatural", "4e70ea24c092255ef7004f7c"), + Pair("suppository", "55925035719a16886c346ed3"), + Pair("symbol shaped pupils", "5591ff71719a16886c3384ed"), + Pair("tan", "559203aa719a16886c3391bf"), + Pair("tattoo", "55920607719a16886c339c73"), + Pair("threesome", "577e5fe5719a161c005866a4"), + Pair("time stop", "559267cf719a16886c34bc59"), + Pair("toddler", "5591fba2719a16886c3379d4"), + Pair("torture", "5591ffe8719a16886c3386c1"), + Pair("tragedy", "4e70ea24c092255ef7004f98"), + Pair("transparent clothing", "5591fe10719a16886c33826f"), + Pair("tribadism", "5591ff10719a16886c338474"), + Pair("twins", "5591ffb9719a16886c3385ed"), + Pair("twintails", "5591faf0719a16886c3376ad"), + Pair("urethra insertion", "55c91399719a1679540946f3"), + Pair("vampire", "5591fb31719a16886c3377f1"), + Pair("virginity (male)", "577e5fd2719a1614690bd0f7"), + Pair("vomit", "5591ffe8719a16886c3386c0"), + Pair("vore", "55920850719a16886c33a40f"), + Pair("voyeurism", "5591fb8d719a16886c337973"), + Pair("waitress", "559208c0719a16886c33a66c"), + Pair("wakamezake", "5592dac3719a16886c360852"), + Pair("watersports", "5591fd58719a16886c338032"), + Pair("widow", "559228f7719a16886c33fd86"), + Pair("witch", "55920864719a16886c33a484"), + Pair("yaoi", "4e70ea01c092255ef700464a"), + Pair("yukata", "55920828719a16886c33a357"), + Pair("yuri", "4e70ea01c092255ef700464d"), + Pair("zombie", "559232df719a16886c34163f"), + Pair("abdg encirclement formation", "57d1056f719a1612b7e9d933"), + Pair("abdg houimou", "57d1056f719a1612b7e9d932"), + Pair("abortion", "581fa0fc719a16211afd5940"), + Pair("absorption", "571f61fe719a167a10f0894e"), + Pair("age progression", "56b8e577719a160f1970b4c8"), + Pair("age regression", "56c22b5f719a168abf0d18c4"), + Pair("ahegao", "556467fa719a1686396e957f"), + Pair("aihara", "56e765d9719a16989a47bf5a"), + Pair("aika tsube", "574dd952719a16606128e055"), + Pair("aka usagi", "574dd9cb719a16606128e3db"), + Pair("akamiro", "56c227d5719a168abf0ced93"), + Pair("akaneko", "56c22861719a168abf0cf334"), + Pair("akari yomatsuri", "570cb2c5719a16861b23ebaa"), + Pair("alien girl", "571f27a2719a16067f34afed"), + Pair("all the way through", "56ddf3f6719a16450f8235ce"), + Pair("almarosso", "5731d49c719a160bac0aa2e7"), + Pair("already uploaded", "56b8e498719a160f1970a92f"), + Pair("alsetro", "5769bfff719a167bb7f3c0a4"), + Pair("amata x 96", "56de2d3a719a166fd66fcdca"), + Pair("ambient", "5796066a719a1604964f9402"), + Pair("amino", "573b2be6719a16738c4183df"), + Pair("anal", "4f00e025c09225131600002b"), + Pair("anal birth", "570cb3da719a16861b23f497"), + Pair("andromeda", "56f0bd99719a16856dd2038e"), + Pair("ane naru mono", "57d3fce0719a1648cd56bd79"), + Pair("anegaoka sanchoume", "56e74ad9719a165d4fe1748d"), + Pair("angel", "4f03ae61c092256d81000ad5"), + Pair("animated", "5590cbe7719a1685eace68ab"), + Pair("anorexic", "578d202e719a168c492c2c2e"), + Pair("antans8092", "57c9c52e719a1647b7d6195f"), + Pair("anthology", "56fa05a9719a1669f2a7bed6"), + Pair("ao kurage", "56fa065b719a1669f2a7c39b"), + Pair("aoi dennou", "58969c4a719a166afdaf135d"), + Pair("aomaru", "56c2297d719a168abf0d0026"), + Pair("aomoto sari", "58292fbf719a164668a6bdb0"), + Pair("apron", "4f03f496c092256d81008769"), + Pair("armpit licking", "56b8e8bc719a160f1970de1c"), + Pair("armpit sex", "56b8e742719a160f1970cc46"), + Pair("artbook", "586f0f3d719a1601e2b5c53a"), + Pair("artistcg", "56b8e438719a160f1970a4e0"), + Pair("asage", "56c22d2e719a168abf0d2edd"), + Pair("ashikoki", "4f00e5b1c09225220600012b"), + Pair("ashikoki", "55646787719a1686396e9425"), + Pair("asian girly", "57287dfd719a1639c2c8583b"), + Pair("asphyxiation", "56b8e46a719a160f1970a716"), + Pair("ass expansion", "574e1088719a164c3b023763"), + Pair("assjob", "56b8e891719a160f1970dbe2"), + Pair("aster", "582146e3719a160217cd422a"), + Pair("ato", "56ddf48a719a16450f823bf9"), + Pair("atoko", "5875fb1c719a16738b9f41a8"), + Pair("aunt", "56b8e4e4719a160f1970ad2a"), + Pair("autopaizuri", "57287e03719a1639c2c8588f"), + Pair("ayumi otosaka", "56b8eaa7719a160f1970f6f9"), + Pair("azusa nakajo", "56b8e648719a160f1970becb"), + Pair("bakunyuu", "5445a92945b9ef840fcdaba8"), + Pair("ball sucking", "56c22d38719a168abf0d2f76"), + Pair("balljob", "57bd3ef3719a163e0da0af16"), + Pair("balls expansion", "5731d538719a160bac0aa780"), + Pair("ban daiki", "589a3c70719a161a1b370941"), + Pair("bandages", "56b8e3c7719a160ccaf2ebfe"), + Pair("banjaku", "570c79ed719a1621f04affab"), + Pair("bara", "52e7a50045b9ef44698f7134"), + Pair("bbm", "56b8e337719a1608ab978ef4"), + Pair("bear", "5744ba6e719a162b60f1051d"), + Pair("bee girl", "57287f06719a1639c2c865fc"), + Pair("bemani", "56cb7ed7719a161b35a6a700"), + Pair("beni", "56b8e79c719a160f1970d03b"), + Pair("big areolae", "56b8e49d719a160f1970a96b"), + Pair("big balls", "56b8e4bc719a160f1970ab0e"), + Pair("big breasts", "56b8e33f719a1608ab978f19"), + Pair("big clit", "56b8e43f719a160f1970a516"), + Pair("big nipples", "56b8e3b8719a160ccaf2eae7"), + Pair("big penis", "56b8e3b8719a160ccaf2eae8"), + Pair("big vagina", "575730f9719a167268694230"), + Pair("bike shorts", "56b8e6ac719a160f1970c3c6"), + Pair("biting", "5493f01f45b9ef2e15b4b845"), + Pair("bittsu", "5769c138719a167bb7f3ce84"), + Pair("blind", "56cb61d6719a167c4e9e8dc0"), + Pair("blink", "56c22a9e719a168abf0d0e53"), + Pair("blood", "56b8e600719a160f1970bad4"), + Pair("blowjob face", "56b8e36a719a160ccaf2e5d9"), + Pair("blue keshi", "577ca8e4719a169cd4768b7e"), + Pair("body modification", "56b8e488719a160f1970a884"), + Pair("bodystocking", "57f59b0d719a167b1dbd5cc6"), + Pair("bojo g. gangster", "5875a6c2719a165b3c314143"), + Pair("boku wa mari no naka", "584a253d719a168a1c1bbcc6"), + Pair("bondage", "55023ecd719a1676c2a42957"), + Pair("bondage", "556467e9719a1686396e953c"), + Pair("booty", "56ad63a2719a164dbd1d4b21"), + Pair("brain fuck", "56de2c65719a166fd66fc488"), + Pair("breast feeding", "56b8e710719a160f1970c952"), + Pair("breast reduction", "58799b45719a162e0a414ec9"), + Pair("brother", "56b8e4fd719a160f1970ae8f"), + Pair("bukakke", "4f01ece8c092253ba7006aab"), + Pair("bull", "57bc41cc719a162732aaee12"), + Pair("bullseye", "57033fdd719a16216ffcd111"), + Pair("bunker k", "577c6e00719a1623436efb73"), + Pair("bunny boy", "56b8e98b719a160f1970e904"), + Pair("business suit", "56b8e4a9719a160f1970aa04"), + Pair("butler", "56b8e69f719a160f1970c32e"), + Pair("c60", "574481c6719a163976f9e62c"), + Pair("c62", "5744840e719a163976fa00c1"), + Pair("c63", "57287e49719a1639c2c85c43"), + Pair("cagliostro", "56b8e8bc719a160f1970de1e"), + Pair("calm atmosphere", "56de2be0719a166fd66fbf15"), + Pair("candy-city", "56de2b3a719a166fd66fb967"), + Pair("cannibalism", "56c22743719a168abf0ce659"), + Pair("carmine", "5703402a719a16216ffcd3f2"), + Pair("cashier", "56d4d4cf719a16848b4cc692"), + Pair("cat", "57034142719a16216ffcde22"), + Pair("catboy", "56b8e6aa719a160f1970c3ae"), + Pair("catfight", "5728b748719a16117c8d08c8"), + Pair("cats claw", "56de2d08719a166fd66fcb8a"), + Pair("censored", "5590b046719a167a01f350e2"), + Pair("cervix penetration", "56b8e3b7719a160ccaf2eadc"), + Pair("chaoroushi", "56c22b00719a168abf0d13bd"), + Pair("charie", "56b8e4ec719a160f1970ada2"), + Pair("cheating", "4f00e1c4c0922515ab000185"), + Pair("cheating", "55646753719a1686396e9359"), + Pair("cheerleader", "4f01f2ddc092253ba7007534"), + Pair("chibita", "56f0a0ab719a166ee74a1a0d"), + Pair("chikan", "4f00ee64c092252206000c93"), + Pair("chloroform", "56b8e726719a160f1970cace"), + Pair("christmas", "567af645719a165958294818"), + Pair("chubby", "53ab31aa45b9efd826b4fe7b"), + Pair("chubby", "556467e9719a1686396e953e"), + Pair("chung seiker", "57dfdaa1719a1686deb8aa8e"), + Pair("ciao baby", "56c229a7719a168abf0d0221"), + Pair("circle ao kurage", "56fa065b719a1669f2a7c39c"), + Pair("claris", "56c22b3c719a168abf0d16e5"), + Pair("clemont", "57bceb55719a1687ea2bc3bb"), + Pair("clit growth", "56b8e488719a160f1970a887"), + Pair("clown", "57b99f11719a163fba895493"), + Pair("coach", "56b8e4bc719a160f1970ab0b"), + Pair("color", "4f00e187c0922515ab000135"), + Pair("color", "55646778719a1686396e93f7"), + Pair("comaku", "56cb7ffd719a161b35a6b2ff"), + Pair("commamion", "56ddf3ea719a16450f823539"), + Pair("commanding eagle", "571f6011719a167a10f07a9b"), + Pair("compilation", "56b8e763719a160f1970cdbb"), + Pair("coprophagia", "56b8e61b719a160f1970bc38"), + Pair("corruption", "56b8e580719a160f1970b539"), + Pair("corset", "56b8e3b3719a160ccaf2ea92"), + Pair("cosplay", "5518d301719a168688910203"), + Pair("cosplaying", "56b8e571719a160f1970b466"), + Pair("cousin", "56b8e4f7719a160f1970ae53"), + Pair("cowman", "56de2c69719a166fd66fc4ad"), + Pair("crotch tattoo", "57f000b1719a162d156df4ed"), + Pair("crown", "56b8e8bc719a160f1970de1d"), + Pair("cum bath", "5728b853719a16117c8d0fe8"), + Pair("cum in eye", "56f0a1d4719a166ee74a27ac"), + Pair("cum swap", "56f0a211719a166ee74a2ab3"), + Pair("cunnilingus", "5490dca045b9efa75b8f6627"), + Pair("cunnilingus", "55646787719a1686396e9427"), + Pair("cuntboy", "589f825c719a167f7d0d0d74"), + Pair("cure magical", "57e02edd719a161a6b8ce14f"), + Pair("cure twinkle", "56b8e8cb719a160f1970ded6"), + Pair("cyan", "56cb80ab719a161b35a6ba6b"), + Pair("dai roku seitetsu", "56f0a13f719a166ee74a2064"), + Pair("dainyu", "56f0a203719a166ee74a2a04"), + Pair("dainyu dougumo", "56f0a203719a166ee74a2a05"), + Pair("daken", "57033fdd719a16216ffcd112"), + Pair("dark avengers", "57033fdd719a16216ffcd113"), + Pair("dark nipples", "56c22c00719a168abf0d207d"), + Pair("dark pit", "57bb44b9719a169ef398c2e5"), + Pair("dark sclera", "5849281e719a1634eef403ca"), + Pair("dark skin", "556467fa719a1686396e957d"), + Pair("darkskin", "4f00ea93c0922522060007e1"), + Pair("date naoto", "5794b4cf719a167e4baa78e4"), + Pair("dearka elsman", "56cb6416719a167c4e9eaa5a"), + Pair("decensored", "54ee5fd5719a1670422d15aa"), + Pair("delmo", "57160a73719a1695b38aaa4b"), + Pair("demon", "56b8e8c3719a160f1970de7c"), + Pair("demongirl", "4f03ae61c092256d81000ad6"), + Pair("denjarasu yamada", "58346488719a1688280d6f18"), + Pair("dick growth", "56b8e352719a1608ab978f68"), + Pair("dickgirl on dickgirl", "56d4b9cb719a164632263b74"), + Pair("dickgirl on male", "56ddf4ef719a16450f824176"), + Pair("dicknipples", "56f9ea3e719a164395bc0f2e"), + Pair("dilf", "56b8e3bf719a160ccaf2eb67"), + Pair("dog", "56b8e42f719a160f1970a498"), + Pair("dog boy", "56ddf302719a16450f822bf6"), + Pair("doggie style", "586e121e719a1621d850fb56"), + Pair("doll joints", "56b8e41b719a160f1970a393"), + Pair("double anal", "56b8e3c3719a160ccaf2eba4"), + Pair("double blowjob", "5728ba1d719a16117c8d1db5"), + Pair("double vaginal", "56b8e45b719a160f1970a652"), + Pair("dougi", "56b8e7d9719a160f1970d33f"), + Pair("doujinshi", "56b8e389719a160ccaf2e7b8"), + Pair("dpe", "56c22c6d719a168abf0d2517"), + Pair("dragon", "56c22970719a168abf0cff71"), + Pair("ear fuck", "5769f893719a1672d0b8946a"), + Pair("ebisawa nira", "56b8ea8a719a160f1970f591"), + Pair("edogawa koubou", "57160ace719a1695b38aad2b"), + Pair("edwin black", "56f0a13f719a166ee74a2065"), + Pair("eggs", "56d4b9ba719a164632263a9b"), + Pair("electric shocks", "5773172a719a166f4297dee6"), + Pair("elizabeth bathory", "57033ffd719a16216ffcd21f"), + Pair("emotionless sex", "56b8e4af719a160f1970aa5f"), + Pair("eren", "56cb7f74719a161b35a6ae68"), + Pair("eye penetration", "585e4025719a1636e2d6b84f"), + Pair("eyemask", "56b8e631719a160f1970bd4d"), + Pair("eyo", "56fa0548719a1669f2a7bc17"), + Pair("ezo renge", "56b8e5d8719a160f1970b906"), + Pair("ezo renkon", "56b8e5d8719a160f1970b907"), + Pair("f.o.f", "56f0a18f719a166ee74a2465"), + Pair("face to face", "582fc748719a16491f6a9cdb"), + Pair("fakers manual", "56b8ecee719a167b52e95a1c"), + Pair("fangs", "546fcb0045b9ef8e2468f3e8"), + Pair("fangs", "556467b6719a1686396e94af"), + Pair("farrah", "5885cd1d719a16181d3a77a3"), + Pair("farting", "56b8e61b719a160f1970bc37"), + Pair("father", "56b8e616719a160f1970bbea"), + Pair("felli", "56b8e718719a160f1970c9d4"), + Pair("females only", "56b8e4b8719a160f1970aad4"), + Pair("femdom", "4f00e673c09225220600022b"), + Pair("femdom", "556467b6719a1686396e94ad"), + Pair("feminization", "56b8e3c3719a160ccaf2eba8"), + Pair("ffm theesome", "5728b799719a16117c8d0b77"), + Pair("ffm threesome", "56b8e36a719a160ccaf2e5da"), + Pair("fft threesome", "56b8e43e719a160f1970a512"), + Pair("filming", "56b8e49d719a160f1970a96c"), + Pair("first person perspective", "56cb7f9a719a161b35a6b000"), + Pair("fish", "56f0a193719a166ee74a2489"), + Pair("foot insertion", "570c972e719a16054fd7c7a0"), + Pair("foot licking", "56b8e654719a160f1970bf76"), + Pair("forbidden content", "56b8e736719a160f1970cba9"), + Pair("forced", "4f00db0ec0922505a6000001"), + Pair("forniphilia", "56de2c55719a166fd66fc3db"), + Pair("fox boy", "57287e89719a1639c2c85fc8"), + Pair("frog", "56cb63ac719a167c4e9ea4eb"), + Pair("frottage", "56b8e8ef719a160f1970e0ce"), + Pair("fsweatfsole", "56f0bd03719a16856dd1fd42"), + Pair("fujii rino", "574dd9d6719a16606128e461"), + Pair("fujimoto go", "56b8e717719a160f1970c9c7"), + Pair("fujiwara yuuka", "56f0a0ab719a166ee74a1a0e"), + Pair("ful lcen", "56d4ba37719a164632264108"), + Pair("full body tattoo", "56b8e47a719a160f1970a7de"), + Pair("full censorship", "56b8e36a719a160ccaf2e5d7"), + Pair("fushimori tonkatsu", "56f0a211719a166ee74a2ab4"), + Pair("futanari", "4f00e7d5c0922522060003d9"), + Pair("futanari", "55646784719a1686396e9417"), + Pair("futanari on male", "56b8e425719a160f1970a40a"), + Pair("fuuka kazaguruma", "57e3260e719a165f19a37b75"), + Pair("gag", "56b8e49c719a160f1970a963"), + Pair("galko", "56c22bb8719a168abf0d1cdb"), + Pair("gaping", "56de2c93719a166fd66fc6a7"), + Pair("garter belt", "56b8e372719a160ccaf2e667"), + Pair("gasmask", "56b8e8e6719a160f1970e061"), + Pair("gass. mosa", "56fa06ac719a1669f2a7c628"), + Pair("genderbend", "54815eff45b9efd7b2d893fc"), + Pair("genussmittel", "58443681719a1685174341c9"), + Pair("getty", "5864d7a0719a16871a28e3c4"), + Pair("giant", "57160a50719a1695b38aa911"), + Pair("giantesskatelyn", "5773181c719a166f4297e8d5"), + Pair("giftkuchen", "56e74a59719a165d4fe16ed3"), + Pair("giiza", "56e74bff719a165d4fe18196"), + Pair("ging freecss", "57287fe5719a1639c2c86fa9"), + Pair("girls only", "56e74999719a165d4fe166b8"), + Pair("glasses", "54752d2345b9ef81e12e2ed6"), + Pair("glasses", "556467f4719a1686396e9567"), + Pair("glastonbury1966", "57f85a49719a1625873c85c3"), + Pair("glory hole", "56b8e616719a160f1970bbe9"), + Pair("goblin", "56cb7e28719a161b35a69ff0"), + Pair("gohan oomori", "56f0bd68719a16856dd201a1"), + Pair("goma brothers", "56e74981719a165d4fe16592"), + Pair("gomabura", "56e74981719a165d4fe16593"), + Pair("good job", "57731838719a166f4297e998"), + Pair("gorilla", "577c6d9c719a1623436ef63b"), + Pair("gothic lolita", "56b8e571719a160f1970b467"), + Pair("granddaughter", "56b8e659719a160f1970bfc7"), + Pair("grandfather", "57320c95719a16693cf46b4e"), + Pair("grandmother", "5744bb4b719a162b60f10eac"), + Pair("grop", "57f1522f719a1629aedc66cc"), + Pair("group", "4f00db0ec0922505a6000002"), + Pair("group", "55646756719a1686396e936d"), + Pair("growth", "56cb6226719a167c4e9e9150"), + Pair("gumiyasan", "56c22d61719a168abf0d31bc"), + Pair("guys only", "56d4b8a5719a16463226304c"), + Pair("gyarin", "5769bfff719a167bb7f3c0a5"), + Pair("gyaru", "54fcf7a7719a164793bf7a1e"), + Pair("gyaru", "556467b6719a1686396e94b0"), + Pair("gyaru-oh", "56b8e4a3719a160f1970a9b8"), + Pair("gymshorts", "56d4d649719a16848b4cd847"), + Pair("gyuo", "5863862d719a165217c26fa3"), + Pair("gyuunyuu linda", "5874a9a6719a1624355ffc0a"), + Pair("hachimitsu orange", "577c6deb719a1623436efa80"), + Pair("hachizaki suigin", "56b8e66c719a160f1970c0e1"), + Pair("hadaka", "57731873719a166f4297eb85"), + Pair("hahaoya shikkaku", "5797ac47719a164c635808ea"), + Pair("hairy", "55816856719a167bf31d5409"), + Pair("hakuchuu doudou", "573b65c1719a1629609e728a"), + Pair("halkrom", "57b6a76d719a168b3febaf31"), + Pair("handicapped", "56b8ea6b719a160f1970f3f5"), + Pair("harazumi tami", "56b8eaac719a160f1970f747"), + Pair("hardcore", "5728b748719a16117c8d08c9"), + Pair("hareta", "57035b76719a161297661786"), + Pair("harpy", "56d4b9ba719a164632263a9a"), + Pair("haruha rutei", "56c229f5719a168abf0d0643"), + Pair("haruka haruno", "56b8e63f719a160f1970be30"), + Pair("haruna mahiru", "56b8e567719a160f1970b3eb"), + Pair("hatake wo tagayasu dake", "57035b76719a161297661787"), + Pair("hatakewotagayasudake", "57035b76719a161297661788"), + Pair("hatanaka", "588fb05c719a1638581fd5f3"), + Pair("hatosable", "5744bab3719a162b60f108c8"), + Pair("headphones", "55022186719a1677296ead9a"), + Pair("headphones", "55646787719a1686396e9429"), + Pair("hentai", "4fdb1154c092250751000000"), + Pair("hentai", "5564674c719a1686396e9327"), + Pair("hidesys", "582340fe719a16683a15a8b7"), + Pair("higashi chinta", "57c57c4d719a16706e04fca3"), + Pair("high fly flow", "5760a41e719a161c54371bf7"), + Pair("high score girl", "573b2bfb719a16738c4184cf"), + Pair("highway61", "57f85a49719a1625873c85c4"), + Pair("hijab", "56b8e842719a160f1970d816"), + Pair("himeno katsuragi", "56f0a1e5719a166ee74a2889"), + Pair("hinatamizu", "578b25ed719a164d0a8b3622"), + Pair("hiro hamada", "5728b934719a16117c8d17c4"), + Pair("hiroko", "5728ba01719a16117c8d1cea"), + Pair("hiroshi nohara", "57df85ed719a1691d5f4ab2c"), + Pair("hiura kyono", "57f6982d719a16796a496724"), + Pair("hiyoubeya", "570cb321719a16861b23ee8b"), + Pair("homuraya pleiades", "56d4b957719a16463226368c"), + Pair("honebuto wasshoi", "574e1074719a164c3b023684"), + Pair("honeyamber", "587c3e64719a1612697d86b5"), + Pair("honeycomb ice cream", "577ca714719a169cd4767b32"), + Pair("hong ban-jang", "577317d7719a166f4297e5bb"), + Pair("honoka ayase", "579e43ae719a16855b671346"), + Pair("hori makoto", "57d845b5719a164697a9b291"), + Pair("horse", "56c22acb719a168abf0d1126"), + Pair("horse boy", "56c22921719a168abf0cfbbb"), + Pair("hougen", "571f6213719a167a10f089d0"), + Pair("housewife", "4f00e1c4c0922515ab000186"), + Pair("housewife", "55646756719a1686396e936e"), + Pair("how to", "57d89a0d719a168be7f092c1"), + Pair("hoyoyodou", "56b8e545719a160f1970b250"), + Pair("human cattle", "56b8e580719a160f1970b53a"), + Pair("human on furry", "56d4b874719a164632262e32"), + Pair("human pet", "56b8e85b719a160f1970d96e"), + Pair("humiliation", "4f00e084c0922513160000ae"), + Pair("humiliation", "556467e9719a1686396e953d"), + Pair("husky guy", "577c6d50719a1623436ef37f"), + Pair("hutamizu kirin", "5823e9bc719a168028c14a21"), + Pair("hyouga.", "56b8e3a9719a160ccaf2e9e3"), + Pair("idol", "543d47f145b9ef9a694a9a6c"), + Pair("ike reibun", "57287e29719a1639c2c85a66"), + Pair("ikechika", "5728ba27719a16117c8d1dea"), + Pair("ikeshita maue", "5728ba27719a16117c8d1deb"), + Pair("iku ikuo", "56c22902719a168abf0cfa3d"), + Pair("incest", "4f00e7ffc09225220600042f"), + Pair("inco", "585e401d719a1636e2d6b79d"), + Pair("incomplete", "56b8e661719a160f1970c04e"), + Pair("ineki", "57576739719a166c7f220913"), + Pair("ineminori", "56c22ad2719a168abf0d1183"), + Pair("infantilism", "57572fbf719a16726869335c"), + Pair("inflation", "56b8e337719a1608ab978ef3"), + Pair("inoue kiyoshi", "56b8e79c719a160f1970d03c"), + Pair("insect", "56c22a78719a168abf0d0c4a"), + Pair("insect boy", "577c6d5d719a1623436ef3fb"), + Pair("insect girl", "56b8e8b2719a160f1970dd8f"), + Pair("inseki", "5515d705719a164a9f01c4b4"), + Pair("interview", "562fd0d9719a16275dce2d0d"), + Pair("invisible", "56b8e4d5719a160f1970ac64"), + Pair("iroitotoiro", "57bbed97719a1645baf57432"), + Pair("irori yui", "57287ee2719a1639c2c86419"), + Pair("irrumatio", "53ddd6f345b9ef9287db6532"), + Pair("isolated island oni", "56cb7e75719a161b35a6a2d5"), + Pair("jikansakougeki", "56de2be1719a166fd66fbf1f"), + Pair("joe higashi", "56d4d4e6719a16848b4cc78d"), + Pair("josou seme", "578ccbce719a164e1d0fc074"), + Pair("juder", "57dfda5a719a1686deb8a71a"), + Pair("jurai andou", "58326a48719a1690831fdcfa"), + Pair("juurokurou", "56fa0548719a1669f2a7bc18"), + Pair("juuryoku shiki youheki", "57731939719a166f4297f35f"), + Pair("k dash", "5760a3a0719a161c54371584"), + Pair("k.tomo", "56de2be0719a166fd66fbf16"), + Pair("kagetsu hakamada", "57035caa719a16129766206f"), + Pair("kaitou yuuhi", "57960678719a1604964f9515"), + Pair("kakizaki kousei", "571608ea719a1695b38a9f3b"), + Pair("kaku tatakaeri", "57ad18a0719a1684b32b9d64"), + Pair("kamatsukatei", "56cb6317719a167c4e9e9cd5"), + Pair("kamikage kirino", "56e74bb3719a165d4fe17dc4"), + Pair("kamogawa", "5760a4a5719a161c54372361"), + Pair("kamogawa taiyaki", "570cb224719a16861b23e689"), + Pair("kangaroo", "57d3fccf719a1648cd56bcbc"), + Pair("kaoru ryuzaki", "570cb48f719a16861b23fb85"), + Pair("kappa", "56c2281c719a168abf0cf049"), + Pair("kasai yukiha", "5837b03f719a165b6e109d77"), + Pair("kebiishi", "56b8ead0719a160f1970f915"), + Pair("kemonomimi", "4f00e0c3c0922515ab000001"), + Pair("kemonomimi", "55646784719a1686396e9419"), + Pair("kenichi", "56d4d578719a16848b4cce7a"), + Pair("kenichi saruyama", "57843a0f719a1695c3045ce1"), + Pair("kigisu", "56c22a85719a168abf0d0cf9"), + Pair("kiiroi tamago", "570340ab719a16216ffcd8a0"), + Pair("kijinoko", "56c22a85719a168abf0d0cfa"), + Pair("kikaider reijiro", "5782b3c9719a169f8b21003e"), + Pair("kimcheese", "56b8e567719a160f1970b3ec"), + Pair("kirimochi niwe", "58375bdd719a1644a7ae2c79"), + Pair("kisaragi-ice", "5874fe2a719a1673c7c6fbc2"), + Pair("kissing", "56b8e4d6719a160f1970ac77"), + Pair("kitano megumi", "57e02ede719a161a6b8ce166"), + Pair("kkc", "56f9e9ae719a164395bc09fb"), + Pair("kneepit sex", "578ec60d719a1602471883d2"), + Pair("koborii", "56f9e8ed719a164395bc04ed"), + Pair("kobuta no yakata", "57db3d18719a165182d33df1"), + Pair("kogasaki yuina", "58837e84719a161bb394d487"), + Pair("komyu", "56b8eadf719a160f1970f9e0"), + Pair("konami risa", "57f6982d719a16796a496722"), + Pair("kono subarashii sekai ni shukufuku wo", "57c32dc2719a163e9f75d6db"), + Pair("kotau", "56b8e8b2719a160f1970dd90"), + Pair("kotee", "57ca6ded719a166fb640d2b1"), + Pair("koukyou gikou", "5899939e719a165a8cf59397"), + Pair("kozountoko", "57287e0d719a1639c2c8593a"), + Pair("kreuz", "570cb317719a16861b23ee23"), + Pair("kuriyama natsuki", "5796066a719a1604964f9403"), + Pair("kurumi ohnuma", "56f0a091719a166ee74a18e0"), + Pair("kusogaki teikoku", "57adc14c719a16504d6868c1"), + Pair("kuusuke matsuno", "57287faa719a1639c2c86d39"), + Pair("kyojinkou", "582fc73c719a16491f6a9c66"), + Pair("lab coat", "56b8e951719a160f1970e5c7"), + Pair("langley", "570cb219719a16861b23e627"), + Pair("lapislazuli", "56c22c10719a168abf0d213a"), + Pair("large insertions", "56b8e488719a160f1970a886"), + Pair("lastcrime", "56ddf460719a16450f8239ec"), + Pair("latex", "56b8e385719a160ccaf2e77b"), + Pair("layer cake", "56b8e7d5719a160f1970d30d"), + Pair("leg lock", "56b8e540719a160f1970b1fa"), + Pair("legjob", "57287e3f719a1639c2c85bc1"), + Pair("leone", "56cb80c4719a161b35a6bba6"), + Pair("leotard", "56b8e372719a160ccaf2e669"), + Pair("liangshan bo", "5715d1ca719a16156436fb08"), + Pair("lingerie", "5515d6bf719a164a9f01c49c"), + Pair("lingerie", "556467e2719a1686396e9523"), + Pair("listless time", "583fedab719a168fb1a71f33"), + Pair("living clothes", "56b8e4c4719a160f1970ab86"), + Pair("lizard girl", "57033ffd719a16216ffcd21e"), + Pair("lizard guy", "56fa20f4719a1685ea9a1fc7"), + Pair("log", "57f643cd719a1606a5a83a1f"), + Pair("loli", "550221c7719a1677296eada6"), + Pair("loli seiyouken", "56e749dc719a165d4fe16986"), + Pair("lolicon", "56b8e337719a1608ab978ef2"), + Pair("long tongue", "56b8e732719a160f1970cb78"), + Pair("love hotel", "5728b748719a16117c8d08ca"), + Pair("low bestiality", "56de2b7f719a166fd66fbbcf"), + Pair("low lolicon", "56d4b940719a1646322635a6"), + Pair("low shotacon", "56c22970719a168abf0cff73"), + Pair("lunacy", "56cb80ac719a161b35a6ba7e"), + Pair("m2 goo", "57f643cd719a1606a5a83a20"), + Pair("machine", "56c22893719a168abf0cf53c"), + Pair("maeda momo", "57c970cc719a165d1d1d28e9"), + Pair("maid", "4f00e032c092251316000049"), + Pair("maji", "57e08339719a1625b30f77c0"), + Pair("majikayo", "57e08339719a1625b30f77c1"), + Pair("makunouchi", "57160ace719a1695b38aad22"), + Pair("male on dickgirl", "56ddf4ef719a16450f824177"), + Pair("male on futanari", "56b8e4cf719a160f1970ac10"), + Pair("males only", "56b8e305719a1607fceb7b6d"), + Pair("mamizo", "56d4b86e719a164632262df9"), + Pair("manga", "56b8e376719a160ccaf2e6a0"), + Pair("manikoro", "570c9600719a16054fd7bd81"), + Pair("mannmaru", "5820f260719a1679c9cd5fde"), + Pair("maraschino", "56e74aa7719a165d4fe17276"), + Pair("marika hoshino", "57735129719a165a1294d95f"), + Pair("masheri", "56b8eadf719a160f1970f9df"), + Pair("mashiba kenta", "5792ba8c719a162fe1be0a15"), + Pair("masked face", "56b8e732719a160f1970cb77"), + Pair("mata kara stream", "56cb7e33719a161b35a6a080"), + Pair("matsu no an", "56c22c66719a168abf0d24b6"), + Pair("maya joukawa", "56cb6314719a167c4e9e9cb6"), + Pair("mecha boy", "56cb7ed6719a161b35a6a6f7"), + Pair("mecha girl", "56b8e98b719a160f1970e909"), + Pair("megane", "4f00e587c0922522060000eb"), + Pair("meganekko", "56ddf4b2719a16450f823dc5"), + Pair("megaton express", "56f0a211719a166ee74a2ab5"), + Pair("megumi natsu", "56cb6314719a167c4e9e9cb5"), + Pair("mei hatsume", "57c2308d719a1677ad7e5ad4"), + Pair("meiji chimera", "56f0a0ab719a166ee74a1a0f"), + Pair("meiko", "588c103c719a1649da625aee"), + Pair("melon no hoshiboshi", "56b8e9fa719a160f1970eed1"), + Pair("ment", "583fedab719a168fb1a71f34"), + Pair("merman", "578e71b0719a16407c66330f"), + Pair("metal armor", "56cb7e26719a161b35a69fe3"), + Pair("midget", "57287dca719a1639c2c8565b"), + Pair("midoriiro", "57573162719a16726869469f"), + Pair("mikado", "56c22ac7719a168abf0d10ec"), + Pair("miko", "4f32dab4c0922569dc000cf4"), + Pair("miku izayoi", "579114bc719a166b15a7c009"), + Pair("military", "56b8e337719a1608ab978ef1"), + Pair("milking", "56b8e726719a160f1970cacb"), + Pair("mille", "56d4b96b719a16463226374d"), + Pair("mimit", "57c9c52e719a1647b7d6195e"), + Pair("minigirl", "56b8e504719a160f1970aee1"), + Pair("miniguy", "56b8e47e719a160f1970a809"), + Pair("minotaur", "570c970d719a16054fd7c62e"), + Pair("mio naruse", "56b8e783719a160f1970cefb"), + Pair("misc", "5731d452719a160bac0aa036"), + Pair("mitsuko", "587c3e64719a1612697d86b4"), + Pair("mitsunoho", "56c22c28719a168abf0d222b"), + Pair("miyoshi hiromi", "570c79eb719a1621f04aff9d"), + Pair("miyuki rei", "57035ba5719a1612976618e3"), + Pair("mizugi", "4f00db5ac0922505f1000001"), + Pair("mizuki kanzaki", "573b650c719a1629609e69ac"), + Pair("mmf threesome", "56b8e337719a1608ab978eee"), + Pair("mohorovicic matako", "56cb7e33719a161b35a6a081"), + Pair("momiyama", "57f0fdcf719a163c0daba6a7"), + Pair("momo yaoyorozu", "56cb63ac719a167c4e9ea4ea"), + Pair("momoishi", "5835b618719a168d2c17820f"), + Pair("monoeye", "578d202e719a168c492c2c2f"), + Pair("monophobia", "56c22bf1719a168abf0d1fad"), + Pair("monster girl", "5564675a719a1686396e9386"), + Pair("monstergirl", "4f00e97bc092252206000612"), + Pair("moral degeneration", "56b8e47a719a160f1970a7dd"), + Pair("moralgear", "56cb62ad719a167c4e9e9797"), + Pair("mosaic censor", "56b8e9e9719a160f1970eddb"), + Pair("mosaic censorship", "56b8e3b7719a160ccaf2eadd"), + Pair("mouse boy", "570c970a719a16054fd7c619"), + Pair("mouse girl", "578c778f719a1691573a0c04"), + Pair("mousou colosseum", "5796af0d719a160e752c2fee"), + Pair("mtf threesome", "56b8e631719a160f1970bd4c"), + Pair("multi-work series", "56b8e33f719a1608ab978f1c"), + Pair("multi-works series", "57df85fc719a1691d5f4abc2"), + Pair("multiple arms", "577ca8db719a169cd4768b19"), + Pair("multiple nipples", "57c9c52e719a1647b7d61960"), + Pair("multiple paizuri", "56c22d38719a168abf0d2f75"), + Pair("musae koyama", "57df85ed719a1691d5f4ab2d"), + Pair("muscles", "555a4e8b719a1651bff3d17d"), + Pair("muscles", "556467fa719a1686396e9581"), + Pair("music box", "5728b748719a16117c8d08cb"), + Pair("mute", "571f5fbb719a167a10f077e5"), + Pair("muto", "57c9c52e719a1647b7d6195c"), + Pair("mx2j", "57f8ae8e719a169ba3a6f397"), + Pair("nagata shinichi", "56b8e647719a160f1970bec2"), + Pair("nagisora riku", "5773181c719a166f4297e8d7"), + Pair("nakadashi", "540cdc7345b9ef6cb3231358"), + Pair("nakadashi", "5564674c719a1686396e9328"), + Pair("nakanishi", "586cc09c719a1629f4914d23"), + Pair("nakasone heidi", "5787da56719a1621f2b2042b"), + Pair("nakata mitsuru", "58438dbd719a16586fea74b6"), + Pair("namanamago", "56c22a93719a168abf0d0db4"), + Pair("nanaki nanatarou", "578b7a4e719a164531bffdc0"), + Pair("natsuki kimura", "5769c167719a167bb7f3d098"), + Pair("natsume benkei", "589993a6719a165a8cf59451"), + Pair("navel fuck", "56ddf3f6719a16450f8235cf"), + Pair("nazi", "5892a7bd719a169e79e8ef68"), + Pair("ncp", "56c228cf719a168abf0cf823"), + Pair("necrophilia", "56f0a0b3719a166ee74a1a70"), + Pair("negative 69", "573b2be6719a16738c4183e0"), + Pair("neitz", "56c2297d719a168abf0d0025"), + Pair("neko no oppai", "56c22a4a719a168abf0d09c6"), + Pair("nekoya marble", "56c22abe719a168abf0d1075"), + Pair("nemu", "56b8e8bb719a160f1970de07"), + Pair("nerigom", "5875a6bc719a165b3c3140d3"), + Pair("nerv", "574e136a719a164c3b0258a5"), + Pair("netorare", "4f00e52cc092252206000054"), + Pair("netorare", "55646799719a1686396e945f"), + Pair("netori", "5426add745b9ef6d7a289a24"), + Pair("nicomarch", "56d4b955719a164632263675"), + Pair("niece", "56c22876719a168abf0cf3eb"), + Pair("ninja", "56cb62d9719a167c4e9e9994"), + Pair("ninnindou", "56d4d616719a16848b4cd5b7"), + Pair("nipple birth", "56c22d46719a168abf0d3043"), + Pair("nipple expansion", "5744bafa719a162b60f10af6"), + Pair("no color", "57731994719a166f4297f709"), + Pair("nobuko yokokawa", "573b656c719a1629609e6eee"), + Pair("non-h", "52e7a80f45b9ef5ed98db192"), + Pair("noriko", "5848d3c7719a1685432d1b72"), + Pair("nose hook", "570c96d9719a16054fd7c3c7"), + Pair("not found 05", "58239562719a161ef54929ef"), + Pair("nounanka", "5744bb4b719a162b60f10eae"), + Pair("number10", "56cb63ba719a167c4e9ea59b"), + Pair("nurse", "4f00e587c0922522060000ec"), + Pair("ochako uraraka", "5782b3d2719a169f8b2100b7"), + Pair("ochine", "57bc9658719a167558cbef60"), + Pair("octopus", "56c22a78719a168abf0d0c49"), + Pair("odd", "5836b326719a166af458a4de"), + Pair("ogawa chise", "57db916d719a164187907c15"), + Pair("oil", "56d4b8c9719a16463226317a"), + Pair("okyuuri", "56e74ad9719a165d4fe1748c"), + Pair("old lady", "58501403719a165eaaf83a4d"), + Pair("old man", "56b8e63f719a160f1970be2f"), + Pair("omega destroyer", "56f0a211719a166ee74a2ab6"), + Pair("onani", "568b0083719a1664807dd93a"), + Pair("oni", "56c2278f719a168abf0cea77"), + Pair("ontsu", "58628903719a166e8c8a4aa7"), + Pair("oppai", "4f00e003c092251316000001"), + Pair("oppai", "5564674c719a1686396e9324"), + Pair("oral", "4f00e00cc092251316000016"), + Pair("oral", "5564674c719a1686396e9323"), + Pair("orc", "56b8e4ae719a160f1970aa52"), + Pair("ore monogatari", "56b8e65b719a160f1970bfe3"), + Pair("ore no natsuyasumi", "5731d50d719a160bac0aa63c"), + Pair("oreichigo", "573b6453719a1629609e6128"), + Pair("oretto", "56d4d529719a16848b4ccb05"), + Pair("orgasm denial", "56b8e488719a160f1970a885"), + Pair("osananajimi", "4f03e821c092256d810079c2"), + Pair("osananajimi", "5564678f719a1686396e9441"), + Pair("oshimi shuuzou", "584a253d719a168a1c1bbcc7"), + Pair("oshiri", "52f863de45b9efa6e8b7e98f"), + Pair("oshiri", "556467ee719a1686396e9552"), + Pair("otonano gu-wa", "5760a269719a161c54370917"), + Pair("out of order", "56b8e527719a160f1970b0d1"), + Pair("oyakodon", "5794b4cf719a167e4baa78e6"), + Pair("paipan", "4f01f2e1c092253ba7007537"), + Pair("paizuri", "4f00e05dc09225131600008f"), + Pair("paizuri", "5564674f719a1686396e933e"), + Pair("pandacorya", "57ee0680719a16345f09c67d"), + Pair("pantyjob", "56b8e4b8719a160f1970aad2"), + Pair("parasite", "56d4ba09719a164632263e8f"), + Pair("pasties", "56b8e955719a160f1970e5ef"), + Pair("pattycake", "57f4f25f719a168e357718ed"), + Pair("pecan", "57160ace719a1695b38aad23"), + Pair("pedocchi", "56f0a1ab719a166ee74a25ac"), + Pair("pegging", "53c596d645b9ef2b85e38e9c"), + Pair("pegging", "556467b6719a1686396e94ae"), + Pair("peko pekoyama", "570cb4c6719a16861b23fe45"), + Pair("petrification", "56b8e41b719a160f1970a394"), + Pair("pettanko", "4f00e00cc092251316000017"), + Pair("pettanko", "5564675e719a1686396e939b"), + Pair("phone sex", "56c22a9e719a168abf0d0e57"), + Pair("piercing", "56b8e3c3719a160ccaf2eba5"), + Pair("pig", "56cb7e28719a161b35a69ff1"), + Pair("pig girl", "56c227f4719a168abf0ceeb8"), + Pair("pig man", "56c2282d719a168abf0cf110"), + Pair("pillory", "56c22970719a168abf0cff72"), + Pair("pirate", "5716094b719a1695b38aa1a4"), + Pair("pirokobo", "56c22b7d719a168abf0d1a19"), + Pair("piss drinking", "56c22a9e719a168abf0d0e58"), + Pair("plant girl", "56b8e527719a160f1970b0cd"), + Pair("plico", "56d4b955719a164632263676"), + Pair("pole dancing", "5715d1bc719a16156436fac1"), + Pair("policeman", "56b8e6b2719a160f1970c422"), + Pair("policewoman", "56cb632b719a167c4e9e9dd9"), + Pair("ponkotsudou", "56c228ac719a168abf0cf68f"), + Pair("poor grammar", "56b8e66c719a160f1970c0e0"), + Pair("porunamin c", "584f6b3f719a162148699f10"), + Pair("possession", "56b8e5f5719a160f1970ba8c"), + Pair("poteto dango", "56c22d2e719a168abf0d2ede"), + Pair("praseodym", "56cb7eb8719a161b35a6a5a7"), + Pair("pregnant", "541616f645b9efe716f55844"), + Pair("pregnant", "556467fa719a1686396e9580"), + Pair("prehensile hair", "56c22dc1719a168abf0d365d"), + Pair("priest", "571f5fcd719a167a10f07886"), + Pair("principal kuno", "56de2c76719a166fd66fc545"), + Pair("prolapse", "56b8e907719a160f1970e22e"), + Pair("prostate massage", "56b8e67d719a160f1970c187"), + Pair("pubic stubble", "56e749f3719a165d4fe16a97"), + Pair("public", "4f03a91cc092256d8100008b"), + Pair("public use", "56b8e907719a160f1970e22d"), + Pair("rabbit", "56c228bb719a168abf0cf735"), + Pair("raccoon girl", "56e7498f719a165d4fe1663d"), + Pair("raichi hoshimiya", "56f9e988719a164395bc08fb"), + Pair("rakuen tsuihou", "56b8ead0719a160f1970f916"), + Pair("random", "4f00e050c092251316000078"), + Pair("random", "5564680d719a1686396e95ce"), + Pair("randoseru", "56b8e8a0719a160f1970dcad"), + Pair("rat park", "56b8e7d9719a160f1970d340"), + Pair("raw", "54c81f9045b9efce8d0fd11a"), + Pair("redraw", "56cb63b9719a167c4e9ea57e"), + Pair("reika hayami", "5835b5fe719a168d2c178127"), + Pair("rem", "577ca70a719a169cd4767aff"), + Pair("replaced", "56b8e374719a160ccaf2e68c"), + Pair("reptile", "5792ba8c719a162fe1be0a14"), + Pair("retoree", "56cb80ab719a161b35a6ba6a"), + Pair("rewrite", "56cb62e5719a167c4e9e9a2d"), + Pair("reyshi", "56cb7eb8719a161b35a6a5a8"), + Pair("rian", "573b65c1719a1629609e728b"), + Pair("ricky-tick", "574dd9d6719a16606128e462"), + Pair("rimjob", "56b8e452719a160f1970a5e1"), + Pair("rina fujimoto", "570cb48f719a16861b23fb83"), + Pair("rindoh", "56b8ecee719a167b52e95a1b"), + Pair("ring memo", "56d4d529719a16848b4ccb07"), + Pair("rinko yamato", "56b8e65b719a160f1970bfe4"), + Pair("risa shirakaba", "57035c04719a161297661b21"), + Pair("robot", "56b8e891719a160f1970dbe1"), + Pair("rokuji", "56f0a13f719a166ee74a2063"), + Pair("rumiko chie", "573b66bc719a1629609e8063"), + Pair("ryoattoryo", "582fc748719a16491f6a9cdc"), + Pair("ryokurin", "57b30750719a1606ccdc81a0"), + Pair("ryona", "56b8e600719a160f1970bad3"), + Pair("saimin pikatto house", "5801e90e719a16309717beec"), + Pair("saitou miya", "585a4ba8719a16178f4f0270"), + Pair("saji-pen", "57287fb3719a1639c2c86d9d"), + Pair("sakaki miya", "57f6982d719a16796a496723"), + Pair("sakkat", "573b6507719a1629609e6952"), + Pair("sakura shirou", "56c22861719a168abf0cf335"), + Pair("sakurabobu", "56b8ea1b719a160f1970f07e"), + Pair("saliva", "5716095f719a1695b38aa21e"), + Pair("sample", "56c22ddb719a168abf0d37da"), + Pair("sangokushi puzzle taisen", "577c6fe0719a1623436f0e11"), + Pair("sanryuu kaigishitsu", "5744bac1719a162b60f10949"), + Pair("sashilot", "56b8ea99719a160f1970f639"), + Pair("sautsu", "57bb44da719a169ef398c4ad"), + Pair("scanmark", "56c22b4a719a168abf0d17c5"), + Pair("scar", "56b8e3c7719a160ccaf2ebfd"), + Pair("scarlet beriko", "5864833e719a1612a25cf783"), + Pair("scathach", "57033ffd719a16216ffcd220"), + Pair("schoolboy", "56e74ad4719a165d4fe17449"), + Pair("schoolboy uniform", "56b8e3a9719a160ccaf2e9e2"), + Pair("schoolgirl", "4f00e05dc092251316000090"), + Pair("schoolgirl", "5564674c719a1686396e9326"), + Pair("schoolgirl uniform", "56b8e36c719a160ccaf2e5f9"), + Pair("scrotal lingerie", "573b6438719a1629609e6020"), + Pair("selfcest", "56b8e78d719a160f1970cf78"), + Pair("sendai oni", "574e1095719a164c3b023814"), + Pair("senhime", "570cb38f719a16861b23f230"), + Pair("shared senses", "56cb61f5719a167c4e9e8f1a"), + Pair("shibainu lab", "57d845b5719a164697a9b292"), + Pair("shibari", "4f00e691c092252206000249"), + Pair("shikniful", "56cb8115719a161b35a6bf71"), + Pair("shima shuu", "56b8e4c0719a160f1970ab46"), + Pair("shimapan", "4f00e0c3c0922515ab000002"), + Pair("shimoyake", "56c22a9e719a168abf0d0e54"), + Pair("shinna", "57b30750719a1606ccdc81a1"), + Pair("shino kuribayashi", "56c22b7d719a168abf0d1a1a"), + Pair("shinseidaiki", "57eeaf56719a163380236b8b"), + Pair("shishioan", "57fe48ee719a16206a91c4b7"), + Pair("shitori", "56e74a59719a165d4fe16ed2"), + Pair("shota", "5569ad57719a16102373a69f"), + Pair("shotacon", "56b8e3c3719a160ccaf2eba7"), + Pair("show by rock", "56cb80ab719a161b35a6ba69"), + Pair("shrinking", "56b8e41b719a160f1970a392"), + Pair("sieyarelow", "56b8e7b9719a160f1970d1b8"), + Pair("sinseong modogi", "5715eca8719a161780dbd1b8"), + Pair("sister", "56b8e41b719a160f1970a387"), + Pair("skinsuit", "56b8e80e719a160f1970d5a6"), + Pair("slime", "56b8e7b9719a160f1970d1b7"), + Pair("slug", "56cb7f7e719a161b35a6aedd"), + Pair("small breasts", "56b8e36c719a160ccaf2e5fb"), + Pair("smell", "56b8e3ae719a160ccaf2ea33"), + Pair("smoking", "58501400719a165eaaf83a1a"), + Pair("snake", "5769c001719a167bb7f3c0b0"), + Pair("snake girl", "56b8e527719a160f1970b0cf"), + Pair("snuff", "56b8e337719a1608ab978eef"), + Pair("socks", "545ec3a945b9ef70f033c4fb"), + Pair("socks", "55646787719a1686396e9426"), + Pair("sole dickgirl", "56b8e3b8719a160ccaf2eae9"), + Pair("sole female", "56b8e33f719a1608ab978f1d"), + Pair("sole male", "56b8e33f719a1608ab978f1e"), + Pair("solo action", "56b8e469719a160f1970a70d"), + Pair("sophie houjou", "571f2766719a16067f34ae64"), + Pair("sori", "56cb6317719a167c4e9e9cd4"), + Pair("soul calibur", "57287e49719a1639c2c85c42"), + Pair("southbamboo", "56c22b00719a168abf0d13be"), + Pair("spats", "555165b8719a168965a40ffa"), + Pair("speculum", "56c22de0719a168abf0d3818"), + Pair("spicaya", "587f35b7719a1680ba7f1995"), + Pair("spider", "5876a3dd719a1614eb5ac658"), + Pair("spider girl", "56b8e527719a160f1970b0d0"), + Pair("spread", "569d758e719a1695484b1082"), + Pair("squid boy", "5808d4fa719a1655df48fc14"), + Pair("squid girl", "56b8e7b2719a160f1970d15c"), + Pair("squirrel girl", "56b8e33f719a1608ab978f1b"), + Pair("steward", "5715ecc6719a161780dbd235"), + Pair("stewardess", "570c9628719a16054fd7be1f"), + Pair("stockings", "4f00e032c09225131600004a"), + Pair("stockings", "5564674c719a1686396e9325"), + Pair("stomach deformation", "56b8e337719a1608ab978ef5"), + Pair("story arc", "56b8e370719a160ccaf2e641"), + Pair("stretching", "570c96d9719a16054fd7c3c6"), + Pair("stuck in wall", "56b8e726719a160f1970cacf"), + Pair("student", "4f03c4ddc092256d81003447"), + Pair("student council", "56d4d655719a16848b4cd8ea"), + Pair("studio crimson", "56f0bc75719a16856dd1f6c9"), + Pair("studio onion", "56b8eade719a160f1970f9cb"), + Pair("suguru kamoshida", "588870b0719a165bccf4115d"), + Pair("sunahama nosame", "573b63fb719a1629609e5d9e"), + Pair("sundress", "56b8e7d5719a160f1970d30c"), + Pair("sunglasses", "56b8e376719a160ccaf2e69f"), + Pair("suzuen", "57fe48ee719a16206a91c4b8"), + Pair("swallow sky", "56b8e6aa719a160f1970c3af"), + Pair("sweating", "56b8e305719a1607fceb7b6c"), + Pair("swimsuit", "54c052a445b9efc62468bbed"), + Pair("swimsuit", "55646764719a1686396e93b3"), + Pair("swinging", "56b8e378719a160ccaf2e6af"), + Pair("syoko hoshi", "570cb48f719a16861b23fb84"), + Pair("syounen kouraku", "5715d113719a16156436f75b"), + Pair("syringe", "56b8e337719a1608ab978ef0"), + Pair("syunzo", "56c22be0719a168abf0d1ee3"), + Pair("table masturbation", "56b8e8f8719a160f1970e15e"), + Pair("tadashi hamada", "5728b934719a16117c8d17c5"), + Pair("tagane", "5794b4cf719a167e4baa78e5"), + Pair("taichi yaegashi", "56b8e56e719a160f1970b43b"), + Pair("tail blue", "574dd92b719a16606128de91"), + Pair("tail plug", "57936393719a1660a6b00805"), + Pair("tail yellow", "574dd92b719a16606128de90"), + Pair("tailjob", "56b8e726719a160f1970cacc"), + Pair("tairame", "573b2bc1719a16738c41823a"), + Pair("taji", "57d2028d719a1699d9a55957"), + Pair("takakura row", "58316d23719a162fb6df6091"), + Pair("takanaga hinako", "571f5fcd719a167a10f07887"), + Pair("takano yumi", "57287de7719a1639c2c85733"), + Pair("takayama non", "573b66ac719a1629609e7f3c"), + Pair("takayamanon", "573b66ac719a1629609e7f3d"), + Pair("takeo gouda", "56b8e65b719a160f1970bfe2"), + Pair("takewan", "586e121e719a1621d850fb57"), + Pair("takoyaki yoshi", "57be907c719a1610094a299b"), + Pair("tall girl", "56b8e378719a160ccaf2e6b0"), + Pair("tall man", "56b8e33f719a1608ab978f1a"), + Pair("tamagohan", "585a4ba8719a16178f4f0271"), + Pair("tamokuteki kuukan", "56cb7ead719a161b35a6a532"), + Pair("tankoubon", "56b8e378719a160ccaf2e6ae"), + Pair("tanlines", "4f00e7bdc0922522060003b2"), + Pair("tanlines", "556467fa719a1686396e957e"), + Pair("tanpopo shunmaru", "56c229ec719a168abf0d05cc"), + Pair("tanukine", "56f9ea32719a164395bc0ebc"), + Pair("taoi", "57735090719a165a1294d288"), + Pair("tasu", "5715ec9b719a161780dbd188"), + Pair("tatsuhide", "56e74982719a165d4fe16599"), + Pair("tatsunokosso", "56d4b99f719a164632263958"), + Pair("teacher", "4f00e084c0922513160000af"), + Pair("teacher", "5564674f719a1686396e9340"), + Pair("tejina senpai", "57e37a6c719a166f0f8735af"), + Pair("tekoki", "4f01e19ec092253ba700585f"), + Pair("tentacles", "4f00e120c0922515ab0000a6"), + Pair("terasu", "5731d615719a160bac0aaf4c"), + Pair("the jinshan", "57f59b21719a167b1dbd5d99"), + Pair("thigh high boots", "56b8e41a719a160f1970a384"), + Pair("tiara", "56b8e580719a160f1970b53b"), + Pair("tickling", "56b8e726719a160f1970cacd"), + Pair("tights", "56f9e9ae719a164395bc09fa"), + Pair("tilia", "56cb7e19719a161b35a69f3d"), + Pair("tocori", "56de2bed719a166fd66fbf87"), + Pair("tomboy", "4f00e910c092252206000534"), + Pair("tomboy", "556467ca719a1686396e94e0"), + Pair("tomgirl", "56b8e3c3719a160ccaf2eba6"), + Pair("tomoya aki", "56cb7e0f719a161b35a69ece"), + Pair("tonsuke", "56d4d616719a16848b4cd5b8"), + Pair("tooku no mura", "56e74b98719a165d4fe17c7f"), + Pair("tooyama hirohito", "57be9073719a1610094a2934"), + Pair("tori himemiya", "5884273c719a162bbe3ccd8e"), + Pair("tottoko mtarou", "589c36ab719a1664dd43105f"), + Pair("toudori no su", "5797ac7b719a164c63580b78"), + Pair("toys", "4f00e54ec09225220600009d"), + Pair("toys", "5564680a719a1686396e95c2"), + Pair("tracksuit", "56b8e36c719a160ccaf2e5fa"), + Pair("trampling", "589e853d719a1631d15960a6"), + Pair("trans", "552ad5d6719a165e97ce8d0a"), + Pair("transformation", "56b8e36b719a160ccaf2e5ee"), + Pair("trap", "4f00e041c092251316000061"), + Pair("triple anal", "56d4d5bf719a16848b4cd1b6"), + Pair("triple penetration", "56b8e337719a1608ab978eed"), + Pair("triple vaginal", "5793634e719a1660a6b004d3"), + Pair("try hougen", "571f6213719a167a10f089d1"), + Pair("ts neinenki", "57d7f14c719a162806043c7d"), + Pair("tsuchinoko", "57320cc3719a16693cf46bcd"), + Pair("tsukimoto kizuki", "56c22b35719a168abf0d167f"), + Pair("tsukishima mist", "56b8e647719a160f1970bec1"), + Pair("tsundere", "4f00e5b1c09225220600012c"), + Pair("tsundere", "55646778719a1686396e93f6"), + Pair("ttf threesome", "56b8e8de719a160f1970dfe4"), + Pair("ttm threesome", "56b8e968719a160f1970e6e9"), + Pair("tube", "56b8e4bc719a160f1970ab0f"), + Pair("tunakan", "5760a4a5719a161c54372362"), + Pair("tutor", "56b8e5b1719a160f1970b751"), + Pair("twoframe", "5715d113719a16156436f75c"), + Pair("tyria", "56cb7e19719a161b35a69f3e"), + Pair("ueno tomoki", "577c6deb719a1623436efa82"), + Pair("unbirth", "56b8e527719a160f1970b0ce"), + Pair("uncensored", "4f00e175c0922515ab00011f"), + Pair("uncensored", "55646778719a1686396e93f8"), + Pair("uncle", "56b8e6e7719a160f1970c70b"), + Pair("underwater", "56b8e726719a160f1970caca"), + Pair("unihoge", "5895f386719a163d654bb665"), + Pair("unusual pupils", "56b8e4ad719a160f1970aa47"), + Pair("unusual teeth", "56cb7fee719a161b35a6b278"), + Pair("urination", "56b8e4b5719a160f1970aaa7"), + Pair("usagi no shippo", "56e74982719a165d4fe1659a"), + Pair("usapyon", "56f0bd67719a16856dd20197"), + Pair("usui hon hitori roudoku kai", "56b8e647719a160f1970bec3"), + Pair("uzuki", "56b8e42f719a160f1970a499"), + Pair("vacbed", "56de2b2d719a166fd66fb8f5"), + Pair("vaginal sticker", "586fb7fd719a168eed7908bb"), + Pair("vanilla", "4f00e003c092251316000002"), + Pair("vanilla", "5564674f719a1686396e933f"), + Pair("vila", "57287dd9719a1639c2c856ac"), + Pair("virginity", "56b8e36a719a160ccaf2e5d6"), + Pair("visual she", "5731d5c5719a160bac0aacd7"), + Pair("vivace", "56c22ac7719a168abf0d10ed"), + Pair("vuttiya", "588578bf719a168a49752b65"), + Pair("waiter", "579854ee719a1648fd01151e"), + Pair("waiter", "579854ee719a1648fd01151c"), + Pair("washizuka sho", "571f6011719a167a10f07a9c"), + Pair("watermarked", "57287fad719a1639c2c86d5c"), + Pair("webtoon", "579eec8e719a169e8bb534ce"), + Pair("weight gain", "573b666a719a1629609e7ad9"), + Pair("western", "5590b089719a167a01f35950"), + Pair("wet clothes", "5805894b719a160616b5863f"), + Pair("whip", "56c22cf2719a168abf0d2bd5"), + Pair("wings", "56b8e5d8719a160f1970b905"), + Pair("wolf", "56b8e598719a160f1970b63b"), + Pair("wolf boy", "56cb7f41719a161b35a6abd0"), + Pair("wolf girl", "56b8e65f719a160f1970c026"), + Pair("wooden horse", "56b8e661719a160f1970c04c"), + Pair("worm", "56e766de719a16989a47c8df"), + Pair("wormhole", "56fa053d719a1669f2a7bbd0"), + Pair("wrestling", "56b8e7b2719a160f1970d165"), + Pair("x-ray", "54ee6537719a1680a4d18331"), + Pair("x-ray", "55646787719a1686396e9428"), + Pair("yakan", "57adc14c719a16504d6868c2"), + Pair("yamamoto doujin", "577ca78a719a169cd4767f72"), + Pair("yamori misaki", "570cb497719a16861b23fbff"), + Pair("yandere", "4f00e5c8c092252206000162"), + Pair("yang-do", "58180c3e719a168510b55736"), + Pair("yayoi", "56c22b10719a168abf0d149d"), + Pair("yomogi", "57bd3f1a719a163e0da0b0c9"), + Pair("yoshizuki minoru", "5731d5c5719a160bac0aacd8"), + Pair("yoyokkun", "57ee0678719a16345f09c62f"), + Pair("yshtola", "5716094b719a1695b38aa1a5"), + Pair("yui komori", "570cb224719a16861b23e688"), + Pair("yukijirushi", "586b1ac0719a161ec7d1a9ef"), + Pair("yukino", "57f000d5719a162d156df669"), + Pair("yukowa kari", "56f0a18f719a166ee74a2464"), + Pair("yurarin", "5886ca3e719a167f77f68a2c"), + Pair("yuri", "55646784719a1686396e9418"), + Pair("yuuyake croissant", "585e401d719a1636e2d6b79e"), + Pair("zeitaku zanmai", "56c22b10719a168abf0d149e"), + Pair("zenjidou momiyama", "57f0fdcf719a163c0daba6a8"), + Pair("zero gravity", "5619c9b2719a16502106c0b2"), + Pair("zooey", "5875fb34719a16738b9f43ac") + ) +} \ No newline at end of file diff --git a/it-mangaeden/src/eu/kanade/tachiyomi/extension/it/mangaeden/Mangaeden.kt b/it-mangaeden/src/eu/kanade/tachiyomi/extension/it/mangaeden/Mangaeden.kt index 608b15b06..8b75be2d8 100644 --- a/it-mangaeden/src/eu/kanade/tachiyomi/extension/it/mangaeden/Mangaeden.kt +++ b/it-mangaeden/src/eu/kanade/tachiyomi/extension/it/mangaeden/Mangaeden.kt @@ -130,7 +130,7 @@ class Mangaeden : ParsedHttpSource() { } } - override fun imageUrlParse(document: Document): String = document.select("a#nextA.next > img").first()?.attr("src").let { "http$it" } + override fun imageUrlParse(document: Document): String = document.select("a#nextA.next > img").first()?.attr("src").let { "http:$it" } private class NamedId(name: String, val id: Int) : Filter.CheckBox(name) private class Genre(name: String, val id: String) : Filter.TriState(name) diff --git a/it-perveden/build.gradle b/it-perveden/build.gradle new file mode 100644 index 000000000..3e0001553 --- /dev/null +++ b/it-perveden/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: Perveden' + pkgNameSuffix = "it.perveden" + extClass = '.Perveden' + extVersionCode = 1 + extVersionSuffix = 1 + libVersion = '1.0' +} + +apply from: '../common.gradle' diff --git a/it-perveden/src/eu/kanade/tachiyomi/extension/it/perveden/Perveden.kt b/it-perveden/src/eu/kanade/tachiyomi/extension/it/perveden/Perveden.kt new file mode 100644 index 000000000..6a85ee46c --- /dev/null +++ b/it-perveden/src/eu/kanade/tachiyomi/extension/it/perveden/Perveden.kt @@ -0,0 +1,400 @@ +package eu.kanade.tachiyomi.extension.it.perveden + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.HttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +class Perveden : ParsedHttpSource() { + + override val name = "PervEden" + + override val baseUrl = "http://www.perveden.com" + + override val lang = "it" + + override val supportsLatest = true + + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/it/it-directory/?order=3&page=$page", headers) + + override fun latestUpdatesSelector() = searchMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector() + + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/it/it-directory/?page=$page", headers) + + override fun popularMangaSelector() = searchMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element) + + override fun popularMangaNextPageSelector() = searchMangaNextPageSelector() + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = HttpUrl.parse("$baseUrl/it/it-directory/").newBuilder().addQueryParameter("title", query) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is StatusList -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("status", it) } + is Types -> filter.state + .filter { it.state } + .map { it.id.toString() } + .forEach { url.addQueryParameter("type", it) } + is TextField -> url.addQueryParameter(filter.key, filter.state) + is OrderBy -> filter.state?.let { + val sortId = it.index + url.addQueryParameter("order", if (it.ascending) "-$sortId" else "$sortId") + } + is GenreField -> filter.state.toLowerCase(Locale.ENGLISH).split(',', ';').forEach { + val id = genres[it.trim()] + if (id != null) url.addQueryParameter(filter.key, id) + } + } + } + url.addQueryParameter("page", page.toString()) + return GET(url.toString(), headers) + } + + override fun searchMangaSelector() = "table#mangaList > tbody > tr:has(td:gt(1))" + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + element.select("td > a").first()?.let { + setUrlWithoutDomain(it.attr("href")) + title = it.text() + } + } + + override fun searchMangaNextPageSelector() = "a:has(span.next)" + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + val infos = document.select("div.rightbox") + + author = infos.select("a[href^=/it/it-directory/?author]").first()?.text() + artist = infos.select("a[href^=/it/it-directory/?artist]").first()?.text() + genre = infos.select("a[href^=/it/it-directory/?categoriesInc]").map { it.text() }.joinToString() + description = document.select("h2#mangaDescription").text() + status = parseStatus(infos.select("h4:containsOwn(Stato)").first()?.nextSibling().toString()) + val img = infos.select("div.mangaImage2 > img").first()?.attr("src") + if (!img.isNullOrBlank()) thumbnail_url = img.let { "http:$it" } + } + + private fun parseStatus(status: String) = when { + status.contains("In Corso", true) -> SManga.ONGOING + status.contains("Completato", true) -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + + override fun chapterListSelector() = "div#leftContent > table > tbody > tr" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + val a = element.select("a[href^=/it/it-manga/]").first() + + setUrlWithoutDomain(a?.attr("href").orEmpty()) + name = a?.select("b")?.first()?.text().orEmpty() + date_upload = element.select("td.chapterDate").first()?.text()?.let { parseChapterDate(it.trim()) } ?: 0L + } + + private fun parseChapterDate(date: String): Long = + if ("Oggi" in date) { + Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else if ("Ieri" in date) { + Calendar.getInstance().apply { + add(Calendar.DATE, -1) + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } else try { + SimpleDateFormat("d MMM yyyy", Locale.ITALIAN).parse(date).time + } catch (e: ParseException) { + 0L + } + + override fun pageListParse(document: Document): List = mutableListOf().apply { + document.select("option[value^=/it/it-manga/]").forEach { + add(Page(size, "$baseUrl${it.attr("value")}")) + } + } + + override fun imageUrlParse(document: Document): String = document.select("a#nextA.next > img").first()?.attr("src").let { "http:$it" } + + private class NamedId(name: String, val id: Int) : Filter.CheckBox(name) + private class TextField(name: String, val key: String) : Filter.Text(name) + private class GenreField(name: String, val key: String) : Filter.Text(name) + private class OrderBy : Filter.Sort("Ordina per", arrayOf("Titolo manga", "Visite", "Capitoli", "Ultimo capitolo"), + Filter.Sort.Selection(1, false)) + + private class StatusList(statuses: List) : Filter.Group("Stato", statuses) + private class Types(types: List) : Filter.Group("Tipo", types) + + override fun getFilterList() = FilterList( + TextField("Autore", "author"), + TextField("Artista", "artist"), + GenreField("Generi inclusi", "categoriesInc"), + GenreField("Generi esclusi", "categoriesExcl"), + OrderBy(), + Types(types()), + StatusList(statuses()) + ) + + private fun types() = listOf( + NamedId("Japanese Manga", 0), + NamedId("Korean Manhwa", 1), + NamedId("Chinese Manhua", 2), + NamedId("Comic", 3), + NamedId("Doujinshi", 4) + ) + + private fun statuses() = listOf( + NamedId("In corso", 1), + NamedId("Completato", 2), + NamedId("Sospeso", 0) + ) + + private val genres = mapOf( + Pair("commedia", "4e70ea9ac092255ef70075d8"), + Pair("ecchi", "4e70ea9ac092255ef70075d9"), + Pair("age progression", "5782b043719a16947390104a"), + Pair("ahegao", "577e6f90719a168e7d256a3f"), + Pair("anal", "577e6f90719a168e7d256a3b"), + Pair("angel", "577e724a719a168ef96a74d6"), + Pair("apron", "577e720a719a166f4719a7be"), + Pair("armpit licking", "577e71db719a166f4719a3e7"), + Pair("assjob", "58474a08719a1668eeeea29b"), + Pair("aunt", "577e6f8d719a168e7d256a20"), + Pair("bbw", "5782ae42719a1675f68a6e29"), + Pair("bdsm", "577e723d719a168ef96a7416"), + Pair("bestiality", "57ad8919719a1629a0a327cf"), + Pair("big areolae", "577e7226719a166f4719a9d0"), + Pair("big ass", "577e6f8d719a168e7d256a21"), + Pair("big balls", "577e7267719a168ef96a76ee"), + Pair("big breasts", "577e6f8d719a168e7d256a1c"), + Pair("big clit", "57ef0396719a163dffb8fdff"), + Pair("big nipples", "5782ae42719a1675f68a6e2a"), + Pair("big penis", "577e7267719a168ef96a76ef"), + Pair("bike shorts", "577e7210719a166f4719a820"), + Pair("bikini", "577e6f91719a168e7d256a77"), + Pair("birth", "577e7273719a168ef96a77cf"), + Pair("blackmail", "577e6f91719a168e7d256a78"), + Pair("blindfold", "577e7208719a166f4719a78d"), + Pair("blood", "577e7295719a168ef96a79e6"), + Pair("bloomers", "5782b051719a1694739010ee"), + Pair("blowjob", "577e6f8d719a168e7d256a22"), + Pair("blowjob face", "577e71eb719a166f4719a544"), + Pair("body modification", "577e6f93719a168e7d256a8e"), + Pair("bodystocking", "5782b05c719a169473901151"), + Pair("bodysuit", "577e6f90719a168e7d256a42"), + Pair("bondage", "577e6f90719a168e7d256a45"), + Pair("breast expansion", "577e71c3719a166f4719a235"), + Pair("bukkake", "577e7210719a166f4719a821"), + Pair("bunny girl", "577e7224719a166f4719a9b9"), + Pair("business suit", "577e71e5719a166f4719a4b2"), + Pair("catgirl", "577e71d5719a166f4719a366"), + Pair("centaur", "577e7297719a168ef96a7a06"), + Pair("cervix penetration", "577e7273719a168ef96a77d0"), + Pair("cheating", "577e71b5719a166f4719a13b"), + Pair("cheerleader", "57c0a6de719a1641240e9257"), + Pair("chikan", "5782b0c6719a1679528762ac"), + Pair("chinese dress", "5782b059719a169473901131"), + Pair("chloroform", "577e6f92719a168e7d256a7f"), + Pair("christmas", "5782af2b719a169473900752"), + Pair("clit growth", "57ef0396719a163dffb8fe00"), + Pair("collar", "577e6f93719a168e7d256a8f"), + Pair("condom", "577e71d5719a166f4719a36c"), + Pair("corruption", "577e6f90719a168e7d256a41"), + Pair("cosplaying", "5782b185719a167952876944"), + Pair("cousin", "577e7283719a168ef96a78c3"), + Pair("cow", "5865d767719a162cce299571"), + Pair("cunnilingus", "577e6f8d719a168e7d256a23"), + Pair("dark skin", "577e6f90719a168e7d256a55"), + Pair("daughter", "577e7250719a168ef96a7539"), + Pair("deepthroat", "577e6f90719a168e7d256a3c"), + Pair("defloration", "577e6f92719a168e7d256a82"), + Pair("demon girl", "577e7218719a166f4719a8c8"), + Pair("dick growth", "577e6f93719a168e7d256a90"), + Pair("dickgirl on dickgirl", "5782af0e719a16947390067a"), + Pair("dog girl", "577e7218719a166f4719a8c9"), + Pair("double penetration", "577e6f90719a168e7d256a3d"), + Pair("double vaginal", "577e7226719a166f4719a9d1"), + Pair("drugs", "577e71da719a166f4719a3cb"), + Pair("drunk", "577e7199719a16697b9853ea"), + Pair("elf", "577e6f93719a168e7d256a91"), + Pair("enema", "5782aff7719a169473900d8a"), + Pair("exhibitionism", "577e72a7719a168ef96a7b26"), + Pair("eyemask", "577e7208719a166f4719a78e"), + Pair("facesitting", "577e7230719a166f4719aa8c"), + Pair("females only", "577e6f90719a168e7d256a44"), + Pair("femdom", "577e6f8c719a168e7d256a13"), + Pair("filming", "577e7242719a168ef96a7465"), + Pair("fingering", "577e6f90719a168e7d256a5d"), + Pair("fisting", "57c349e1719a1625b42603f4"), + Pair("foot licking", "5782b152719a16795287677d"), + Pair("footjob", "577e6f8d719a168e7d256a17"), + Pair("freckles", "5782ae42719a1675f68a6e2b"), + Pair("fundoshi", "577e71d9719a166f4719a3bf"), + Pair("furry", "5782ae45719a1675f68a6e49"), + Pair("futanari", "577e6f92719a168e7d256a80"), + Pair("gag", "577e6f90719a168e7d256a56"), + Pair("gaping", "577e7210719a166f4719a822"), + Pair("garter belt", "577e7201719a166f4719a704"), + Pair("glasses", "577e6f90719a168e7d256a5e"), + Pair("gothic lolita", "577e7201719a166f4719a705"), + Pair("group", "577e726e719a168ef96a7764"), + Pair("gyaru", "577e6f91719a168e7d256a79"), + Pair("hairjob", "57bcea9f719a1687ea2bc092"), + Pair("hairy", "577e7250719a168ef96a753a"), + Pair("hairy armpits", "5782b13c719a16795287669c"), + Pair("handjob", "577e71c8719a166f4719a29b"), + Pair("harem", "577e71c3719a166f4719a239"), + Pair("heterochromia", "577e7201719a166f4719a706"), + Pair("hotpants", "585b302d719a1648da4f0389"), + Pair("huge breasts", "577e71d9719a166f4719a3c0"), + Pair("huge penis", "585b302d719a1648da4f038a"), + Pair("human on furry", "577e7203719a166f4719a722"), + Pair("human pet", "577e6f90719a168e7d256a57"), + Pair("humiliation", "577e7210719a166f4719a823"), + Pair("impregnation", "577e6f90719a168e7d256a47"), + Pair("incest", "577e6f93719a168e7d256a92"), + Pair("inflation", "577e7273719a168ef96a77d1"), + Pair("insect girl", "577e71fc719a166f4719a692"), + Pair("inverted nipples", "5813993a719a165f236ddacd"), + Pair("kimono", "577e723d719a168ef96a7417"), + Pair("kissing", "5782ae4f719a1675f68a6ece"), + Pair("lactation", "577e6f93719a168e7d256a93"), + Pair("latex", "577e6f90719a168e7d256a58"), + Pair("layer cake", "577e7230719a166f4719aa8d"), + Pair("leg lock", "57b7c0c2719a169265b768bd"), + Pair("leotard", "579b141e719a16881d14ccfe"), + Pair("lingerie", "577e71fc719a166f4719a693"), + Pair("living clothes", "577e6f90719a168e7d256a49"), + Pair("lizard girl", "5782b127719a1679528765e9"), + Pair("lolicon", "5782af84719a1694739009b5"), + Pair("long tongue", "5782b158719a1679528767d5"), + Pair("machine", "57ef0396719a163dffb8fe01"), + Pair("magical girl", "577e71c3719a166f4719a236"), + Pair("maid", "5782ae3f719a1675f68a6e19"), + Pair("male on dickgirl", "577e7267719a168ef96a76f0"), + Pair("masked face", "57c349e1719a1625b42603f5"), + Pair("masturbation", "577e71b5719a166f4719a13c"), + Pair("mermaid", "578d3c5b719a164fa798c09e"), + Pair("metal armor", "5782b158719a1679528767d6"), + Pair("miko", "577e726e719a168ef96a7765"), + Pair("milf", "577e6f8d719a168e7d256a24"), + Pair("military", "577e6f8d719a168e7d256a18"), + Pair("milking", "577e6f93719a168e7d256a94"), + Pair("mind break", "577e6f90719a168e7d256a4b"), + Pair("mind control", "577e6f90719a168e7d256a4d"), + Pair("monster girl", "577e6f90719a168e7d256a4f"), + Pair("monster girl", "577e6f90719a168e7d256a46"), + Pair("moral degeneration", "577e71da719a166f4719a3cc"), + Pair("mother", "577e71c7719a166f4719a293"), + Pair("mouse girl", "5782ae45719a1675f68a6e4a"), + Pair("multiple breasts", "5782ae45719a1675f68a6e4b"), + Pair("multiple penises", "577e722a719a166f4719aa29"), + Pair("muscle", "577e7250719a168ef96a753c"), + Pair("nakadashi", "577e6f8e719a168e7d256a26"), + Pair("netorare", "577e71c7719a166f4719a294"), + Pair("niece", "5782b10a719a1679528764b5"), + Pair("nurse", "577e6f8d719a168e7d256a1d"), + Pair("oil", "5782af5e719a1694739008b1"), + Pair("onahole", "582324e5719a1674f99b3444"), + Pair("orgasm denial", "577e725d719a168ef96a762f"), + Pair("paizuri", "577e6f90719a168e7d256a3e"), + Pair("pantyhose", "577e6f8d719a168e7d256a19"), + Pair("pantyjob", "577e7276719a168ef96a77f9"), + Pair("parasite", "577e6f90719a168e7d256a50"), + Pair("pasties", "5782b029719a169473900f3b"), + Pair("piercing", "577e6f90719a168e7d256a59"), + Pair("plant girl", "577e71f4719a166f4719a5fa"), + Pair("policewoman", "57af673b719a1655a6ca8b58"), + Pair("ponygirl", "577e6f90719a168e7d256a5a"), + Pair("possession", "5782aff7719a169473900d8b"), + Pair("pregnant", "577e71da719a166f4719a3cd"), + Pair("prolapse", "5782cc79719a165f600844e0"), + Pair("prostitution", "577e7242719a168ef96a7466"), + Pair("pubic stubble", "577e71da719a166f4719a3ce"), + Pair("public use", "5782cc79719a165f600844e1"), + Pair("rape", "577e6f90719a168e7d256a51"), + Pair("rimjob", "577e725f719a168ef96a765e"), + Pair("robot", "5782b144719a1679528766f3"), + Pair("ryona", "577e723e719a168ef96a7424"), + Pair("saliva", "5884ed6f719a1678dfbb2258"), + Pair("scar", "5782b081719a167952876168"), + Pair("school swimsuit", "5782b05f719a169473901177"), + Pair("schoolgirl uniform", "577e7199719a16697b9853e6"), + Pair("selfcest", "5782b152719a16795287677e"), + Pair("sex toys", "577e6f90719a168e7d256a5b"), + Pair("sheep girl", "5782affa719a169473900da2"), + Pair("shemale", "577e7267719a168ef96a76f1"), + Pair("shibari", "577e72a6719a168ef96a7b18"), + Pair("shimapan", "5782aebd719a1694739004c5"), + Pair("sister", "577e6f8c719a168e7d256a14"), + Pair("slave", "577e71b4719a166f4719a138"), + Pair("sleeping", "577e71e5719a166f4719a4b3"), + Pair("slime", "577e6f93719a168e7d256a95"), + Pair("slime girl", "577e6f90719a168e7d256a48"), + Pair("small breasts", "577e6f90719a168e7d256a5f"), + Pair("smell", "577e7210719a166f4719a824"), + Pair("snake girl", "577e721e719a166f4719a94b"), + Pair("sole dickgirl", "582324e5719a1674f99b3445"), + Pair("sole female", "577e6f91719a168e7d256a7a"), + Pair("solo action", "5782afbf719a169473900ba2"), + Pair("spanking", "577e7199719a16697b9853e7"), + Pair("squirting", "577e7250719a168ef96a753d"), + Pair("stockings", "577e6f8d719a168e7d256a1a"), + Pair("stomach deformation", "5782aef2719a169473900606"), + Pair("strap-on", "577e71d5719a166f4719a367"), + Pair("stuck in wall", "5782aecf719a16947390055b"), + Pair("sundress", "577e7216719a166f4719a8a2"), + Pair("sweating", "577e71b5719a166f4719a13d"), + Pair("swimsuit", "577e71d3719a166f4719a342"), + Pair("swinging", "577e7203719a166f4719a723"), + Pair("syringe", "577e71da719a166f4719a3cf"), + Pair("tall girl", "577e71d9719a166f4719a3c1"), + Pair("tanlines", "577e6f91719a168e7d256a7b"), + Pair("teacher", "577e7199719a16697b9853e8"), + Pair("tentacles", "577e6f90719a168e7d256a52"), + Pair("thigh high boots", "577e6f93719a168e7d256a96"), + Pair("tiara", "5782cc74719a165f600844d3"), + Pair("tights", "5782b059719a169473901132"), + Pair("tomboy", "577e7201719a166f4719a6fb"), + Pair("torture", "577e725d719a168ef96a7630"), + Pair("tracksuit", "5782b146719a167952876708"), + Pair("transformation", "577e6f90719a168e7d256a4a"), + Pair("tribadism", "577e6f90719a168e7d256a60"), + Pair("tube", "577e7208719a166f4719a78f"), + Pair("tutor", "5782af34719a1694739007a3"), + Pair("twins", "577e726a719a168ef96a7729"), + Pair("unusual pupils", "577e6f90719a168e7d256a53"), + Pair("urethra insertion", "5877c07f719a163627a2ceb0"), + Pair("urination", "577e7210719a166f4719a825"), + Pair("vaginal sticker", "577e721c719a166f4719a930"), + Pair("vomit", "5782ae45719a1675f68a6e4c"), + Pair("vore", "577e6f8c719a168e7d256a15"), + Pair("voyeurism", "583ca1ef719a161795a60847"), + Pair("waitress", "5782ae3f719a1675f68a6e1a"), + Pair("widow", "5782b13c719a16795287669d"), + Pair("wings", "5782b158719a1679528767d7"), + Pair("witch", "577e6f93719a168e7d256a97"), + Pair("wolf girl", "577e724c719a168ef96a74fd"), + Pair("wrestling", "577e7230719a166f4719aa8e"), + Pair("x-ray", "577e6f90719a168e7d256a40"), + Pair("yandere", "577e7295719a168ef96a79e7"), + Pair("yuri", "577e6f90719a168e7d256a4c") + ) +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 73a19c4c2..8ad3e5b42 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,8 +3,11 @@ include 'en-mangafox', 'en-kissmanga', 'en-mangasee', 'en-readmangatoday', + 'en-mangaeden', + 'en-perveden', 'de-wiemanga', 'it-mangaeden', + 'it-perveden', 'ru-mangachan', 'ru-mintmanga', 'ru-readmanga'