From 0ba38032f7babbfada0d1e4d35a8f2082f64ecd5 Mon Sep 17 00:00:00 2001 From: x4nk1t <47915404+x4nk1t@users.noreply.github.com> Date: Thu, 7 Dec 2023 16:11:59 +0545 Subject: [PATCH 001/109] ResetScans: Change domain (#6513) * ResetScans: Change domain * blacklist muses.org (audio ads) * Update Blacklist.mjs --------- Co-authored-by: MikeZeDev --- src/web/mjs/connectors/ResetScans.mjs | 2 +- src/web/mjs/engine/Blacklist.mjs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/ResetScans.mjs b/src/web/mjs/connectors/ResetScans.mjs index 076776a797..882407c5ee 100644 --- a/src/web/mjs/connectors/ResetScans.mjs +++ b/src/web/mjs/connectors/ResetScans.mjs @@ -7,7 +7,7 @@ export default class ResetScans extends WordPressMadara { super.id = 'resetscans'; super.label = 'Reset Scans'; this.tags = [ 'manga', 'webtoon', 'english' ]; - this.url = 'https://reset-scans.com'; + this.url = 'https://reset-scans.us'; this.queryChapters = 'li.wp-manga-chapter div.li__text > a'; } } diff --git a/src/web/mjs/engine/Blacklist.mjs b/src/web/mjs/engine/Blacklist.mjs index a703698dfa..57cb3b2e32 100644 --- a/src/web/mjs/engine/Blacklist.mjs +++ b/src/web/mjs/engine/Blacklist.mjs @@ -91,6 +91,7 @@ export default class Blacklist { '*://*.mineralscreamrobes.com/*', '*://*.moatads.com/*', '*://*.mobtrks.com/*', + '*://*.muses.org/*', '*://*.nakamasweb.com/*', '*://*.onclasrv.com/*', '*://*.onesignal.com/*', From 5512b3e55ce1482010c5a57659733bd4ca48414c Mon Sep 17 00:00:00 2001 From: x4nk1t <47915404+x4nk1t@users.noreply.github.com> Date: Thu, 7 Dec 2023 23:52:29 +0545 Subject: [PATCH 002/109] Add CypherScans (#6509) * Add Cypher Scans * add logo * Cypher Scans: add trailing --- src/web/img/connectors/cypherscans | Bin 0 -> 10960 bytes src/web/mjs/connectors/CypherScans.mjs | 13 +++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/web/img/connectors/cypherscans create mode 100644 src/web/mjs/connectors/CypherScans.mjs diff --git a/src/web/img/connectors/cypherscans b/src/web/img/connectors/cypherscans new file mode 100644 index 0000000000000000000000000000000000000000..e7e5c159af294017a654cc79f8e2666305b14a78 GIT binary patch literal 10960 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Ò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 Z3NP;Zsj}Z({`u!rNlsn1LfS0oKL7$8H6Z{1 literal 0 HcmV?d00001 diff --git a/src/web/mjs/connectors/CypherScans.mjs b/src/web/mjs/connectors/CypherScans.mjs new file mode 100644 index 0000000000..530d9c5219 --- /dev/null +++ b/src/web/mjs/connectors/CypherScans.mjs @@ -0,0 +1,13 @@ +import WordPressMangastream from './templates/WordPressMangastream.mjs'; + +export default class CypherScans extends WordPressMangastream { + + constructor() { + super(); + super.id = 'cypherscans'; + super.label = 'Cypher Scans'; + this.tags = [ 'manga', 'manhwa', 'manhua', 'english' ]; + this.url = 'https://cypherscans.xyz'; + this.path = '/manga/list-mode/'; + } +} \ No newline at end of file From 23044e696cde9e2d36b453dc0b3495320eadbd98 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 10 Dec 2023 10:39:23 +0000 Subject: [PATCH 003/109] Fix ReaperScans domain (#6521) Fixes https://github.com/manga-download/hakuneko/issues/6519 --- src/web/mjs/connectors/ReaperScans.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/ReaperScans.mjs b/src/web/mjs/connectors/ReaperScans.mjs index 7141640276..f52bb0f539 100644 --- a/src/web/mjs/connectors/ReaperScans.mjs +++ b/src/web/mjs/connectors/ReaperScans.mjs @@ -7,9 +7,9 @@ export default class ReaperScans extends Connector { super.id = 'reaperscans'; super.label = 'Reaper Scans'; this.tags = ['webtoon', 'english']; - this.url = 'https://reaperscans.com'; + this.url = 'https://reapercomics.com'; this.links = { - login: 'https://reaperscans.com/login' + login: 'https://reapercomics.com/login' }; this.path = '/comics'; this.queryMangas = 'a.my-2.text-sm.font-medium.text-white.hover\\3A text-blue-700'; From d80b6f4fa2cf41b34adc06077ed7df55444fcdc0 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 10 Dec 2023 10:41:35 +0000 Subject: [PATCH 004/109] Fix NeoxScan domain (#6502) Fixes https://github.com/manga-download/hakuneko/issues/6500 --- src/web/mjs/connectors/NeoxScan.mjs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/web/mjs/connectors/NeoxScan.mjs b/src/web/mjs/connectors/NeoxScan.mjs index 080a5ecaf0..1118962c6f 100644 --- a/src/web/mjs/connectors/NeoxScan.mjs +++ b/src/web/mjs/connectors/NeoxScan.mjs @@ -7,11 +7,8 @@ export default class NeoxScan extends WordPressMadara { super.id = 'neoxscan'; super.label = 'Neox Scanlator'; this.tags = [ 'manga', 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://neoxscan.net'; + this.url = 'https://nexoscans.com'; this.queryTitleForURI = '.post-title'; this.requestOptions.headers.set('x-referer', this.url); } - canHandleURI(uri) { - return /https?:\/\/neoxscan\.(com|net)/.test(uri.origin); - } } From 33e01f4d5057d6a1562eb05fe10133b364c17636 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 10 Dec 2023 10:42:40 +0000 Subject: [PATCH 005/109] Fix YoungChampion: changed CSS for chapters (#6517) works on other websites too --- src/web/mjs/connectors/YoungChampion.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/YoungChampion.mjs b/src/web/mjs/connectors/YoungChampion.mjs index 2e1e882c85..81ad496f9d 100644 --- a/src/web/mjs/connectors/YoungChampion.mjs +++ b/src/web/mjs/connectors/YoungChampion.mjs @@ -24,7 +24,7 @@ export default class YoungChampion extends Connector { this.queryMangaTitleURI = 'h1.series-h-title span:not([class])'; this.queryManga = 'div.series-box-vertical a'; this.queryMangaTitle = 'h2.title-text'; - this.queryChapter = 'div.series-ep-list a#null-false'; + this.queryChapter = 'div.series-ep-list a[data-href]'; this.queryChapterTitle = 'span.series-ep-list-item-h-text'; } From 4f6365a4f94b36c012e015e9bbd0f799dfb903b7 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 10 Dec 2023 10:43:32 +0000 Subject: [PATCH 006/109] FIX ComicK domain & mangalist (#6518) * FIC ComicK domain * fix manga listing * [comick] remove comment --- src/web/mjs/connectors/ComicK.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/ComicK.mjs b/src/web/mjs/connectors/ComicK.mjs index 25660da3a9..2b359a1d36 100644 --- a/src/web/mjs/connectors/ComicK.mjs +++ b/src/web/mjs/connectors/ComicK.mjs @@ -9,8 +9,8 @@ export default class ComicK extends Connector { super.id = 'comick'; super.label = 'ComicK'; this.tags = [ 'manga', 'english' ]; - this.url = 'https://comick.app'; - this.apiurl = 'https://api.comick.app'; + this.url = 'https://comick.ink'; + this.apiurl = 'https://api.comick.ink'; this.requestOptions.headers.set('x-origin', this.url ); this.requestOptions.headers.set('x-referer', this.apiurl ); @@ -40,7 +40,7 @@ export default class ComicK extends Connector { async _getMangasFromPage(page) { try { - const uri = new URL('/v1.0/search?page=' + page, this.apiurl); + const uri = new URL('/v1.0/search?limit=49&page=' + page, this.apiurl); const request = new Request(uri, this.requestOptions); request.headers.set('x-user-agent', HeaderGenerator.randomUA() ); await this.wait(500); From 33cb737faa5d4d19f047662c5ea579fbf37a47c7 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 10 Dec 2023 10:43:54 +0000 Subject: [PATCH 007/109] FIX TuMangaOnline : change domain (#6389) works like a charm. Relevant commit. https://github.com/manga-download/hakuneko-plugins/commit/4b2a47c0daba9df6d7e47a837a3285ef9f560d5d --- src/web/mjs/connectors/TuMangaOnline.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/TuMangaOnline.mjs b/src/web/mjs/connectors/TuMangaOnline.mjs index 21b09a13d6..0e473c5565 100644 --- a/src/web/mjs/connectors/TuMangaOnline.mjs +++ b/src/web/mjs/connectors/TuMangaOnline.mjs @@ -1,5 +1,5 @@ /* eslint-disable */ import Connector from '../engine/Connector.mjs'; import Manga from '../engine/Manga.mjs'; -const _0x55dc=['\x57\x36\x38\x42\x57\x51\x56\x64\x55\x43\x6b\x79','\x41\x64\x64\x64\x4d\x47\x3d\x3d','\x57\x52\x6a\x52\x57\x37\x47\x4c\x6a\x43\x6f\x45\x72\x53\x6b\x78\x78\x32\x4f\x66','\x57\x50\x42\x63\x4b\x38\x6b\x7a\x62\x66\x52\x64\x4c\x65\x6c\x63\x54\x4d\x43\x59\x6e\x76\x33\x64\x4a\x58\x57\x69\x57\x51\x33\x64\x53\x53\x6b\x73\x57\x35\x70\x64\x53\x38\x6b\x6a\x45\x72\x37\x63\x56\x43\x6b\x54\x57\x37\x70\x63\x4f\x31\x70\x64\x4f\x6d\x6b\x6e\x67\x71\x4a\x64\x49\x38\x6f\x4f\x57\x4f\x31\x70\x74\x48\x70\x63\x52\x59\x30\x3d','\x45\x49\x2f\x64\x4e\x58\x65\x50\x42\x73\x46\x64\x49\x73\x52\x64\x47\x6d\x6f\x65\x67\x38\x6f\x79\x57\x37\x74\x63\x4e\x75\x75\x6e\x57\x36\x65\x50\x57\x52\x54\x6c\x57\x34\x64\x64\x51\x64\x4f\x55\x69\x43\x6f\x4b\x7a\x38\x6b\x7a\x69\x43\x6b\x4e\x57\x52\x43\x4b\x57\x34\x2f\x64\x4c\x38\x6f\x53\x57\x36\x54\x73\x57\x51\x4e\x64\x55\x38\x6f\x39\x66\x6d\x6b\x39\x44\x63\x43\x6c\x57\x36\x52\x64\x4e\x61\x6c\x63\x50\x38\x6f\x62\x57\x50\x62\x31\x64\x47\x37\x63\x49\x43\x6f\x68\x57\x37\x68\x63\x50\x38\x6f\x75\x63\x68\x44\x32\x65\x71\x3d\x3d','\x45\x78\x68\x63\x4a\x61\x3d\x3d','\x70\x43\x6f\x4d\x57\x34\x79\x6a\x77\x53\x6b\x4e\x72\x71\x3d\x3d','\x57\x52\x31\x38\x62\x77\x33\x64\x48\x61\x3d\x3d','\x57\x50\x52\x64\x56\x43\x6f\x47\x45\x74\x71\x3d','\x69\x53\x6b\x57\x57\x35\x66\x47\x57\x37\x74\x64\x4f\x4e\x35\x32\x57\x4f\x56\x64\x48\x6d\x6f\x46\x57\x50\x72\x56\x63\x53\x6b\x55\x7a\x38\x6f\x55\x57\x51\x58\x76\x57\x52\x33\x63\x48\x4c\x56\x63\x4e\x64\x31\x6e\x63\x53\x6b\x6f\x57\x36\x6c\x63\x54\x65\x61\x67\x6e\x30\x42\x64\x54\x66\x37\x64\x49\x33\x70\x63\x51\x76\x68\x63\x4f\x6d\x6b\x67\x69\x53\x6b\x6e\x78\x6d\x6f\x45\x6e\x38\x6b\x65\x6e\x31\x6c\x63\x4a\x77\x75\x56\x57\x35\x2f\x64\x4b\x49\x33\x64\x56\x6d\x6b\x6b\x63\x38\x6f\x63\x73\x6d\x6f\x6f\x64\x6d\x6f\x45\x57\x36\x47\x3d','\x76\x53\x6f\x61\x6e\x47\x3d\x3d','\x6f\x77\x35\x4b\x57\x51\x64\x63\x4e\x57\x3d\x3d','\x44\x38\x6b\x2b\x6f\x68\x48\x2b','\x46\x53\x6b\x45\x57\x37\x43\x52\x72\x47\x47\x75\x46\x53\x6b\x4c\x62\x43\x6f\x5a\x6a\x48\x33\x63\x50\x43\x6b\x48\x44\x5a\x56\x64\x56\x43\x6b\x33\x57\x37\x74\x64\x54\x43\x6f\x69\x41\x68\x47\x58\x57\x34\x78\x64\x4c\x58\x2f\x63\x56\x4d\x48\x72\x57\x51\x62\x69\x43\x65\x74\x64\x4f\x43\x6b\x67\x76\x43\x6b\x48\x57\x4f\x70\x63\x47\x43\x6f\x70\x57\x50\x46\x63\x47\x43\x6f\x7a\x57\x34\x58\x69\x57\x50\x33\x64\x51\x43\x6f\x47\x57\x51\x31\x55\x57\x52\x6d\x57\x42\x4c\x33\x63\x53\x53\x6b\x50\x6b\x43\x6b\x78\x57\x50\x48\x42\x78\x43\x6b\x71','\x61\x38\x6f\x49\x57\x35\x75\x7a\x75\x57\x3d\x3d','\x6e\x77\x58\x42\x57\x51\x6c\x63\x4c\x76\x5a\x64\x52\x71\x3d\x3d','\x57\x36\x5a\x64\x48\x4b\x68\x64\x50\x43\x6f\x71\x57\x52\x6d\x6b','\x57\x4f\x2f\x64\x51\x57\x71\x54\x6c\x61\x7a\x2b\x57\x4f\x79\x3d','\x57\x4f\x34\x46\x45\x61\x3d\x3d','\x74\x38\x6f\x70\x57\x37\x42\x64\x47\x71\x4b\x3d','\x57\x50\x75\x56\x7a\x58\x4c\x58','\x67\x30\x74\x63\x4e\x66\x54\x5a','\x57\x34\x69\x39\x57\x52\x37\x64\x51\x47\x3d\x3d','\x57\x50\x4c\x33\x57\x50\x2f\x64\x4b\x4d\x37\x64\x51\x74\x61\x58\x57\x35\x31\x32\x43\x53\x6f\x32\x57\x50\x76\x39\x46\x61\x38\x44\x70\x53\x6b\x72\x71\x6d\x6f\x77\x72\x53\x6b\x4e\x57\x35\x31\x57\x66\x66\x34\x79\x57\x35\x74\x63\x55\x6d\x6b\x59\x57\x4f\x53\x30\x57\x35\x71\x41\x57\x34\x56\x63\x55\x32\x76\x75\x57\x4f\x4a\x63\x54\x32\x4e\x64\x48\x58\x46\x63\x51\x53\x6f\x35\x57\x52\x61\x6c\x66\x4d\x52\x63\x4e\x53\x6f\x78\x74\x5a\x7a\x71\x44\x49\x5a\x63\x54\x71\x6c\x63\x50\x38\x6b\x75\x57\x37\x6c\x64\x54\x38\x6f\x63','\x79\x74\x30\x67\x57\x37\x4a\x64\x52\x62\x4e\x63\x55\x43\x6b\x38\x77\x58\x62\x61\x71\x53\x6b\x35\x72\x43\x6f\x62\x57\x52\x54\x58\x57\x37\x6e\x30\x57\x4f\x71\x39\x43\x78\x2f\x63\x4e\x43\x6f\x66\x6d\x66\x61\x43\x57\x4f\x75\x3d','\x57\x37\x33\x64\x4b\x30\x4a\x63\x47\x43\x6b\x69','\x57\x4f\x64\x63\x4e\x4e\x6e\x36\x62\x61\x3d\x3d','\x78\x4b\x34\x43\x57\x50\x52\x64\x49\x66\x52\x64\x54\x73\x46\x64\x55\x68\x30\x50\x57\x34\x4c\x37\x57\x51\x56\x63\x4c\x77\x38\x68\x43\x53\x6f\x77\x65\x53\x6f\x2f\x77\x53\x6b\x78\x66\x5a\x74\x63\x53\x6d\x6b\x42\x67\x66\x52\x63\x51\x43\x6f\x59\x77\x38\x6f\x35\x77\x66\x6c\x64\x4e\x4e\x65\x6f\x72\x43\x6b\x79\x57\x4f\x75\x65\x6f\x38\x6f\x48\x6b\x78\x78\x64\x49\x53\x6f\x70\x57\x51\x53\x62\x57\x4f\x78\x64\x4a\x6d\x6f\x6a\x57\x36\x37\x64\x51\x6d\x6b\x55\x57\x36\x74\x63\x51\x6d\x6b\x55\x57\x36\x6d\x39\x57\x35\x6a\x30\x57\x50\x6d\x3d','\x6a\x4d\x4a\x63\x4b\x58\x4a\x63\x53\x38\x6f\x31\x57\x37\x33\x63\x47\x59\x57\x6f\x6e\x43\x6f\x51\x57\x35\x53\x4d\x75\x61\x34\x70\x57\x35\x4c\x35\x57\x35\x64\x63\x4e\x53\x6b\x48\x57\x35\x4f\x63\x75\x33\x58\x72\x57\x52\x37\x63\x55\x43\x6f\x75\x66\x62\x54\x41\x57\x36\x78\x63\x4b\x33\x52\x63\x56\x38\x6f\x69\x57\x52\x6a\x55\x57\x51\x79\x4f\x6c\x73\x74\x64\x53\x47\x46\x63\x4a\x6d\x6f\x32\x57\x52\x71\x70\x57\x51\x30\x62\x44\x72\x6c\x64\x53\x6d\x6b\x58\x57\x51\x33\x64\x55\x6d\x6f\x73\x57\x34\x71\x48\x57\x52\x52\x64\x4f\x30\x4b\x3d','\x61\x53\x6f\x6e\x76\x38\x6f\x6f\x44\x43\x6f\x71\x79\x73\x75\x61\x57\x51\x30\x75\x71\x53\x6f\x59\x61\x65\x4e\x63\x56\x75\x43\x66\x68\x6d\x6f\x75\x6f\x48\x5a\x64\x52\x38\x6f\x2b\x57\x37\x48\x4e\x57\x34\x2f\x64\x53\x43\x6f\x67\x57\x37\x42\x64\x4f\x61\x50\x46\x79\x43\x6f\x6e\x74\x6d\x6f\x79\x46\x6d\x6f\x61\x42\x74\x35\x6b\x67\x53\x6f\x67\x57\x36\x4a\x63\x56\x43\x6f\x61\x57\x36\x64\x63\x48\x33\x4e\x63\x55\x57\x38\x72\x66\x38\x6b\x54\x57\x36\x46\x63\x4f\x59\x78\x64\x54\x65\x68\x63\x56\x53\x6f\x70\x68\x43\x6f\x79','\x57\x35\x31\x58\x57\x51\x74\x63\x4f\x5a\x69\x65\x57\x34\x79\x57\x72\x4b\x6d\x3d','\x57\x34\x38\x75\x57\x35\x65\x3d','\x57\x51\x37\x64\x47\x49\x4f\x34\x6e\x47\x3d\x3d','\x42\x6d\x6f\x69\x68\x6d\x6b\x38\x57\x35\x69\x3d','\x57\x52\x52\x64\x56\x43\x6f\x53\x78\x5a\x56\x63\x4a\x6d\x6b\x31','\x46\x5a\x64\x64\x47\x4c\x33\x64\x4f\x6d\x6f\x61','\x57\x4f\x65\x62\x75\x43\x6f\x72\x71\x47\x3d\x3d','\x57\x50\x2f\x64\x4f\x53\x6f\x52','\x57\x35\x65\x79\x57\x34\x53\x3d','\x57\x35\x5a\x64\x55\x38\x6f\x6c\x57\x51\x4f\x50','\x57\x50\x74\x63\x4d\x4c\x76\x64\x46\x71\x3d\x3d','\x57\x34\x6c\x64\x48\x53\x6f\x54\x57\x4f\x30\x65','\x79\x68\x65\x42\x57\x52\x2f\x64\x4b\x30\x78\x63\x52\x38\x6f\x47\x73\x30\x58\x73\x68\x53\x6b\x51','\x66\x72\x57\x54\x57\x36\x65\x32','\x78\x4d\x42\x63\x4b\x43\x6f\x61\x57\x34\x30\x38\x6a\x61\x3d\x3d','\x57\x34\x79\x79\x57\x34\x5a\x63\x4b\x74\x5a\x63\x4f\x67\x62\x4c\x57\x50\x71\x35\x70\x61\x3d\x3d','\x57\x52\x33\x63\x4b\x68\x35\x72\x6d\x53\x6f\x4e\x57\x4f\x47\x6c\x57\x36\x42\x64\x53\x48\x5a\x64\x53\x43\x6f\x68\x57\x36\x6c\x64\x56\x6d\x6b\x34\x57\x34\x44\x68\x57\x52\x47\x3d','\x57\x4f\x61\x49\x77\x53\x6f\x4a\x57\x4f\x38\x50\x57\x34\x76\x70\x57\x37\x6d\x70\x57\x34\x39\x31\x57\x37\x37\x64\x4c\x43\x6b\x63\x57\x37\x46\x63\x4a\x78\x66\x30\x77\x38\x6b\x39\x57\x36\x72\x70\x57\x50\x76\x57\x7a\x43\x6b\x49\x57\x50\x65\x6f\x57\x52\x5a\x63\x4a\x49\x47\x6f\x57\x36\x2f\x64\x4d\x72\x70\x63\x55\x77\x4c\x78\x57\x34\x37\x64\x47\x67\x4b\x79\x67\x30\x4e\x64\x52\x43\x6f\x64\x57\x37\x5a\x64\x4a\x4b\x70\x64\x4c\x74\x33\x63\x55\x48\x34\x6c\x57\x4f\x75\x50\x62\x5a\x6c\x63\x4b\x38\x6b\x61\x57\x37\x37\x63\x47\x59\x61\x3d','\x57\x34\x66\x34\x57\x52\x78\x64\x50\x48\x33\x64\x4d\x74\x52\x63\x50\x6d\x6b\x79\x57\x37\x56\x64\x55\x4b\x61\x6e\x57\x37\x2f\x63\x56\x63\x52\x64\x47\x38\x6b\x55\x45\x48\x33\x64\x52\x53\x6b\x70\x41\x43\x6f\x35\x65\x38\x6b\x56\x57\x37\x56\x64\x51\x78\x6e\x77\x6d\x38\x6b\x44\x6a\x71\x68\x64\x48\x43\x6b\x68\x79\x43\x6f\x6e\x7a\x75\x37\x64\x4f\x53\x6b\x71\x57\x51\x72\x33\x6c\x4c\x74\x64\x4c\x53\x6f\x36\x57\x51\x42\x64\x52\x59\x42\x63\x50\x65\x4f\x53\x57\x52\x64\x63\x49\x43\x6f\x64\x6c\x6d\x6b\x39\x57\x37\x30\x65\x42\x38\x6f\x58\x57\x52\x79\x3d','\x57\x36\x33\x64\x56\x38\x6f\x74\x57\x51\x6d\x6c\x57\x52\x47\x3d','\x57\x34\x48\x4e\x67\x38\x6b\x4e\x57\x4f\x39\x39\x57\x4f\x57\x42\x57\x52\x39\x6b','\x57\x51\x61\x69\x6a\x38\x6f\x78\x57\x36\x6d\x3d','\x57\x37\x74\x64\x4c\x4e\x4c\x6a\x6d\x4a\x6c\x63\x51\x53\x6f\x71\x6d\x61\x44\x55\x57\x36\x78\x64\x56\x53\x6f\x2b\x71\x53\x6f\x49\x6d\x32\x7a\x72\x6e\x62\x70\x63\x56\x53\x6f\x72\x41\x38\x6b\x4c\x57\x4f\x7a\x53\x57\x52\x72\x70\x57\x37\x70\x63\x4a\x57\x42\x64\x53\x38\x6f\x4b\x57\x35\x42\x64\x56\x38\x6f\x71\x43\x38\x6b\x52\x57\x37\x53\x58\x61\x43\x6f\x59\x65\x68\x37\x63\x4d\x53\x6b\x67\x57\x36\x34\x49\x57\x51\x5a\x63\x4f\x4c\x72\x48\x71\x43\x6b\x34\x44\x77\x52\x64\x4a\x4c\x58\x32\x6f\x78\x33\x63\x50\x74\x53\x3d','\x57\x35\x4a\x64\x4c\x67\x48\x50\x67\x64\x46\x63\x52\x53\x6f\x70\x6d\x72\x79\x30\x57\x4f\x68\x63\x56\x53\x6b\x57\x66\x61\x3d\x3d','\x44\x75\x4b\x58\x45\x33\x30\x3d','\x57\x4f\x65\x62\x45\x43\x6b\x4d\x57\x4f\x61\x52\x65\x71\x3d\x3d','\x61\x57\x71\x55\x57\x34\x75\x6a','\x70\x38\x6b\x54\x57\x52\x37\x63\x48\x32\x4a\x63\x51\x38\x6b\x31\x67\x38\x6f\x61\x57\x36\x46\x64\x54\x53\x6b\x70\x57\x52\x52\x63\x50\x43\x6f\x39\x6e\x43\x6f\x47\x57\x35\x34\x6b\x57\x51\x48\x6d\x57\x34\x78\x63\x51\x43\x6f\x66\x6e\x59\x5a\x64\x51\x47\x79\x75\x57\x50\x6c\x64\x4d\x53\x6f\x65\x67\x53\x6f\x59\x57\x34\x54\x39\x61\x6d\x6b\x51\x65\x4d\x31\x74\x57\x37\x31\x70\x57\x50\x42\x64\x52\x43\x6b\x34\x74\x6d\x6b\x39\x6a\x5a\x61\x3d','\x68\x43\x6b\x45\x57\x34\x4b\x2f\x72\x47\x3d\x3d','\x57\x50\x7a\x34\x57\x36\x33\x63\x56\x53\x6b\x56\x57\x36\x33\x64\x56\x53\x6b\x58\x57\x34\x4a\x63\x48\x38\x6b\x49\x57\x52\x38\x51\x7a\x76\x70\x64\x47\x4e\x7a\x4d\x57\x52\x33\x64\x4b\x73\x6a\x59\x41\x67\x2f\x64\x47\x6d\x6f\x2f\x65\x73\x58\x68\x6c\x6d\x6b\x5a\x57\x36\x52\x64\x51\x6d\x6b\x47\x43\x53\x6b\x73\x57\x34\x79\x36\x57\x35\x78\x63\x4e\x6d\x6b\x6e\x6b\x66\x66\x30\x61\x64\x6a\x2f\x45\x58\x42\x64\x4e\x38\x6f\x38\x78\x53\x6b\x6d\x72\x78\x31\x5a\x57\x52\x33\x63\x4f\x53\x6f\x46\x57\x52\x35\x66\x71\x53\x6b\x30\x45\x57\x3d\x3d','\x57\x52\x68\x64\x4f\x6d\x6f\x43\x57\x50\x74\x64\x4e\x71\x3d\x3d','\x57\x52\x66\x64\x57\x4f\x46\x64\x53\x4c\x71\x3d','\x57\x37\x37\x64\x4a\x68\x74\x63\x4a\x6d\x6b\x41','\x57\x50\x66\x48\x57\x51\x4e\x64\x56\x66\x33\x64\x49\x4a\x6c\x63\x53\x47\x3d\x3d','\x57\x50\x35\x66\x70\x78\x38\x2b\x57\x37\x7a\x74\x72\x31\x64\x63\x4e\x43\x6f\x31\x6f\x43\x6b\x36\x45\x38\x6b\x56\x57\x50\x6d\x56\x65\x78\x74\x63\x51\x53\x6f\x64\x57\x51\x56\x64\x50\x53\x6f\x68\x64\x43\x6f\x57\x57\x34\x54\x59\x78\x72\x68\x64\x48\x64\x68\x64\x48\x68\x31\x6c\x57\x35\x44\x77\x6a\x58\x30\x2b','\x57\x4f\x4e\x64\x51\x43\x6f\x52\x57\x50\x42\x63\x54\x32\x6a\x4f\x57\x36\x2f\x63\x53\x43\x6f\x4a\x57\x37\x5a\x64\x4e\x4e\x46\x63\x4b\x6d\x6b\x2f\x57\x36\x44\x6b\x78\x71\x66\x4f\x65\x68\x65\x4d\x57\x34\x4a\x63\x48\x6d\x6f\x37\x57\x35\x64\x64\x4b\x77\x4e\x63\x4d\x38\x6b\x30\x57\x50\x62\x5a\x57\x36\x4a\x63\x4a\x77\x2f\x64\x49\x6d\x6f\x74\x57\x34\x58\x51\x57\x36\x6a\x71\x57\x35\x79\x64\x64\x66\x35\x39\x65\x4a\x70\x63\x56\x4d\x37\x64\x4d\x6d\x6b\x51\x57\x4f\x75\x62\x77\x6d\x6b\x6f\x57\x52\x52\x63\x47\x59\x47\x45\x67\x6d\x6b\x6b\x71\x71\x3d\x3d','\x57\x51\x64\x63\x52\x68\x50\x6b\x67\x57\x3d\x3d','\x57\x37\x58\x76\x57\x36\x74\x63\x52\x67\x37\x63\x4c\x64\x53\x35\x57\x35\x31\x39\x63\x43\x6b\x69\x57\x50\x75\x61\x44\x57\x79\x77\x6e\x38\x6b\x41\x6f\x38\x6b\x4f\x72\x53\x6f\x41\x57\x4f\x61\x3d','\x57\x36\x6c\x64\x47\x68\x4b\x31\x46\x64\x70\x63\x50\x53\x6f\x4b\x69\x72\x69\x59\x57\x51\x5a\x64\x55\x53\x6b\x33\x65\x43\x6b\x34\x44\x4d\x75\x67\x6d\x58\x52\x63\x53\x6d\x6b\x77\x6c\x53\x6f\x58\x57\x4f\x35\x38\x57\x52\x31\x70\x57\x51\x2f\x64\x4b\x57\x42\x64\x54\x38\x6f\x53\x57\x50\x70\x63\x53\x38\x6b\x76\x70\x53\x6f\x55\x57\x36\x65\x33\x75\x43\x6f\x38\x63\x62\x4a\x64\x4c\x43\x6f\x76\x57\x51\x54\x58\x57\x37\x4a\x63\x51\x4c\x6d\x30\x64\x43\x6b\x32\x6e\x49\x6c\x63\x4a\x57\x57\x49\x46\x63\x2f\x63\x51\x68\x43\x3d','\x69\x32\x48\x46\x57\x51\x2f\x63\x48\x31\x52\x64\x56\x61\x3d\x3d','\x62\x38\x6f\x32\x42\x53\x6f\x4c\x57\x4f\x34\x46\x57\x37\x33\x63\x48\x6d\x6b\x77\x79\x58\x72\x70\x74\x4e\x39\x32\x57\x37\x71\x73\x57\x37\x57\x79\x57\x37\x75\x2f\x72\x6d\x6b\x44\x57\x52\x7a\x78\x57\x50\x74\x63\x52\x38\x6b\x58\x79\x49\x74\x63\x4f\x78\x53\x50\x57\x4f\x37\x64\x52\x75\x64\x64\x54\x6d\x6f\x63\x7a\x65\x50\x49\x57\x36\x46\x63\x4e\x53\x6b\x79\x6e\x38\x6b\x48\x6a\x38\x6b\x39\x57\x34\x61\x30\x57\x51\x5a\x64\x49\x4a\x71\x2f\x57\x50\x66\x2b\x57\x34\x6c\x64\x4f\x57\x43\x30\x57\x35\x42\x64\x4b\x74\x6e\x70','\x6e\x4b\x68\x63\x53\x76\x48\x4e','\x57\x4f\x6a\x44\x57\x50\x2f\x64\x4b\x4d\x37\x64\x51\x74\x61\x58\x57\x35\x31\x32\x43\x53\x6f\x32\x57\x50\x76\x39\x46\x61\x38\x44\x70\x53\x6b\x72\x71\x6d\x6f\x77\x72\x53\x6b\x4e\x57\x4f\x38\x31\x72\x71\x54\x44\x57\x4f\x46\x64\x52\x6d\x6b\x38\x57\x34\x35\x4d\x57\x4f\x7a\x76\x57\x50\x4e\x63\x55\x33\x47\x67\x57\x34\x78\x63\x56\x67\x37\x64\x4d\x75\x33\x64\x52\x38\x6b\x49\x57\x52\x65\x79\x63\x5a\x68\x63\x4e\x38\x6b\x45\x68\x5a\x39\x64\x7a\x59\x42\x64\x52\x57\x5a\x64\x54\x38\x6f\x69\x57\x51\x56\x63\x56\x53\x6f\x78','\x57\x4f\x71\x75\x57\x37\x76\x52\x6c\x57\x3d\x3d','\x66\x58\x31\x69\x57\x50\x33\x64\x47\x76\x74\x63\x50\x78\x78\x63\x56\x73\x53\x48\x57\x34\x34\x2f\x57\x36\x6c\x64\x47\x32\x66\x76\x70\x43\x6b\x62\x66\x43\x6f\x32\x76\x6d\x6f\x71\x75\x4a\x70\x64\x55\x38\x6f\x6b\x78\x57\x33\x64\x47\x53\x6b\x4d\x66\x6d\x6b\x52\x63\x30\x4a\x64\x4e\x47\x4f\x61\x73\x38\x6b\x77\x57\x4f\x65\x6d\x70\x6d\x6b\x30\x7a\x78\x56\x63\x49\x43\x6b\x68\x57\x36\x50\x72\x57\x35\x68\x63\x49\x43\x6b\x42\x57\x36\x70\x63\x50\x6d\x6f\x4e\x57\x52\x46\x64\x56\x6d\x6f\x38\x57\x36\x4f\x47\x57\x4f\x44\x49\x57\x50\x71\x3d','\x57\x50\x7a\x34\x57\x36\x33\x63\x56\x53\x6f\x37\x57\x51\x74\x63\x51\x53\x6f\x39\x57\x4f\x33\x64\x4c\x6d\x6b\x34\x57\x52\x65\x66\x69\x58\x4a\x63\x47\x4e\x4f\x38\x57\x37\x2f\x64\x4c\x5a\x34\x5a\x7a\x78\x74\x64\x48\x6d\x6b\x56\x77\x68\x43\x76\x43\x38\x6b\x36\x57\x37\x64\x64\x54\x6d\x6b\x34\x6a\x6d\x6b\x42\x57\x4f\x44\x4f\x57\x35\x74\x63\x48\x53\x6b\x6c\x41\x75\x54\x49\x68\x77\x47\x4e\x45\x58\x70\x63\x4c\x53\x6f\x4d\x74\x38\x6f\x42\x61\x65\x65\x2b\x57\x52\x78\x64\x51\x38\x6b\x69\x57\x36\x7a\x62\x73\x43\x6b\x34\x45\x61\x3d\x3d','\x57\x4f\x37\x64\x52\x43\x6f\x50\x57\x34\x78\x64\x53\x57\x3d\x3d','\x57\x51\x4b\x55\x57\x34\x47\x57\x64\x43\x6f\x65\x7a\x53\x6b\x67\x75\x77\x54\x46','\x57\x51\x57\x51\x6a\x6d\x6f\x6d\x57\x36\x69\x3d','\x75\x53\x6b\x4b\x69\x47\x3d\x3d','\x57\x51\x66\x59\x6f\x73\x48\x4f','\x57\x4f\x69\x39\x77\x53\x6f\x30\x74\x68\x4e\x64\x4d\x57\x3d\x3d','\x57\x51\x42\x63\x55\x72\x4c\x72\x70\x47\x3d\x3d','\x57\x50\x78\x63\x4e\x63\x74\x64\x47\x6d\x6f\x64\x57\x51\x33\x63\x49\x76\x39\x58\x57\x51\x6c\x63\x53\x32\x4e\x63\x4d\x31\x4f\x67\x57\x36\x5a\x63\x51\x5a\x65\x46\x57\x50\x4a\x64\x53\x53\x6f\x6d\x57\x51\x78\x64\x48\x53\x6f\x53\x6b\x77\x2f\x63\x54\x72\x46\x64\x53\x71\x57\x67\x77\x43\x6b\x59\x57\x37\x42\x63\x4a\x38\x6f\x58\x57\x52\x48\x64\x79\x43\x6b\x44\x57\x34\x46\x63\x55\x43\x6b\x72\x66\x66\x71\x52\x57\x51\x7a\x73\x73\x73\x6a\x49\x69\x38\x6f\x32\x57\x34\x71\x79\x57\x51\x71\x7a\x57\x35\x5a\x63\x53\x53\x6f\x7a\x57\x50\x2f\x63\x4f\x67\x69\x3d','\x69\x53\x6b\x46\x57\x36\x30\x37\x63\x31\x58\x45\x46\x53\x6f\x51\x71\x6d\x6b\x58\x41\x4c\x37\x64\x52\x6d\x6b\x33\x6d\x4d\x33\x63\x4f\x43\x6b\x35\x57\x36\x5a\x63\x56\x43\x6b\x7a\x45\x57\x4b\x42\x57\x34\x78\x64\x4c\x58\x2f\x63\x56\x4d\x48\x72\x57\x51\x62\x69\x43\x65\x74\x64\x4f\x43\x6b\x67\x76\x43\x6b\x48\x57\x4f\x70\x63\x47\x43\x6f\x70\x57\x50\x46\x63\x47\x43\x6f\x7a\x57\x34\x58\x69\x57\x50\x33\x64\x51\x43\x6f\x47\x57\x51\x31\x55\x57\x36\x34\x57\x6b\x58\x68\x64\x4f\x43\x6f\x53\x6b\x43\x6f\x6d\x57\x52\x69\x70\x62\x6d\x6f\x61','\x57\x51\x69\x6c\x57\x36\x6e\x4c\x63\x71\x53\x66\x57\x34\x4b\x37\x57\x51\x7a\x57\x57\x34\x65\x7a\x70\x76\x70\x63\x4c\x71\x3d\x3d','\x7a\x66\x69\x6a\x79\x4d\x38\x3d','\x57\x4f\x38\x5a\x6f\x43\x6f\x76\x57\x36\x65\x3d','\x73\x38\x6f\x4c\x57\x36\x5a\x64\x49\x64\x5a\x64\x56\x38\x6f\x35\x78\x53\x6f\x61\x57\x50\x78\x63\x53\x38\x6f\x45\x57\x36\x2f\x64\x4f\x6d\x6b\x55\x79\x43\x6f\x55\x57\x35\x6a\x58\x57\x37\x71\x70\x57\x51\x47\x3d','\x57\x51\x70\x64\x56\x43\x6f\x7a\x57\x37\x37\x64\x4a\x61\x3d\x3d','\x74\x38\x6b\x4b\x6b\x38\x6b\x4a','\x57\x36\x57\x4d\x71\x53\x6f\x55\x63\x4e\x56\x64\x52\x43\x6b\x69\x57\x4f\x4e\x64\x4b\x43\x6f\x4f\x42\x38\x6b\x6b\x57\x35\x4c\x7a\x57\x4f\x78\x64\x49\x43\x6b\x39\x57\x50\x66\x46\x57\x37\x76\x4f\x75\x61\x44\x52\x57\x51\x71\x76\x57\x4f\x75\x32\x57\x37\x2f\x63\x4d\x43\x6f\x76\x57\x50\x56\x63\x51\x43\x6f\x36\x57\x51\x70\x63\x4b\x5a\x4b\x61\x57\x52\x76\x36\x6e\x73\x72\x53\x6c\x72\x72\x43\x57\x50\x64\x64\x51\x4a\x69\x77\x57\x4f\x64\x64\x4c\x38\x6f\x32\x57\x52\x47\x79\x57\x34\x57\x50\x57\x35\x30\x52\x77\x72\x6e\x36\x75\x71\x3d\x3d','\x57\x50\x56\x64\x51\x57\x65\x37\x69\x74\x66\x66\x57\x4f\x74\x64\x54\x4e\x72\x68\x57\x52\x74\x63\x56\x38\x6f\x47','\x45\x66\x4b\x57\x42\x4d\x6c\x64\x4f\x49\x2f\x64\x53\x47\x3d\x3d','\x57\x51\x42\x64\x4a\x74\x65\x63\x69\x71\x3d\x3d','\x61\x6d\x6f\x32\x45\x43\x6f\x70\x6a\x72\x61\x6b\x42\x38\x6b\x42\x57\x51\x6a\x53\x76\x31\x52\x64\x4f\x6d\x6b\x47\x57\x35\x4a\x63\x50\x73\x64\x63\x49\x38\x6b\x68\x66\x31\x4e\x64\x47\x38\x6b\x5a\x63\x30\x71\x45\x57\x51\x43\x54\x78\x31\x4a\x63\x49\x78\x58\x4c\x57\x37\x74\x64\x4b\x43\x6b\x79\x42\x53\x6b\x4d\x45\x6d\x6f\x2b\x42\x4c\x68\x63\x50\x6d\x6f\x41\x43\x62\x4a\x64\x4e\x74\x6c\x63\x47\x38\x6b\x54\x66\x38\x6b\x41\x6e\x78\x4c\x69\x69\x6d\x6f\x63\x44\x6d\x6b\x34\x42\x53\x6f\x4d\x57\x37\x72\x4d','\x79\x53\x6b\x66\x69\x43\x6b\x4d\x57\x34\x71\x3d','\x66\x4c\x38\x4e\x57\x35\x52\x63\x4d\x61\x3d\x3d','\x57\x51\x52\x64\x49\x38\x6f\x71\x57\x37\x4e\x64\x51\x57\x3d\x3d','\x57\x50\x42\x63\x49\x75\x4c\x35\x6a\x71\x3d\x3d','\x6c\x33\x33\x63\x4b\x57\x3d\x3d','\x57\x34\x34\x53\x57\x36\x78\x63\x54\x38\x6f\x31\x57\x37\x64\x64\x50\x43\x6b\x72\x57\x34\x6c\x63\x47\x38\x6f\x39\x57\x36\x30\x59\x6b\x47\x37\x63\x49\x78\x50\x4e\x57\x52\x74\x64\x4a\x73\x61\x2f\x7a\x33\x6c\x64\x48\x43\x6f\x51\x66\x4d\x65\x73\x44\x43\x6b\x57\x57\x36\x5a\x63\x55\x38\x6b\x35\x6d\x38\x6b\x71\x57\x35\x79\x36\x57\x34\x70\x63\x4b\x6d\x6b\x6b\x43\x30\x62\x49\x64\x64\x76\x31\x69\x66\x42\x63\x4d\x6d\x6f\x56\x69\x6d\x6b\x6c\x74\x61\x62\x39\x57\x37\x64\x64\x4f\x38\x6b\x70\x57\x52\x79\x61\x64\x53\x6f\x58\x6e\x47\x3d\x3d','\x57\x34\x31\x51\x68\x43\x6b\x50\x57\x35\x34\x3d','\x42\x53\x6f\x62\x57\x34\x56\x64\x4f\x61\x38\x3d','\x6d\x38\x6b\x63\x57\x36\x57\x36\x78\x58\x6d\x76\x70\x43\x6f\x53\x73\x53\x6b\x50','\x6e\x6d\x6b\x64\x65\x53\x6b\x5a\x57\x51\x4f\x4a\x41\x43\x6b\x30\x41\x43\x6f\x74\x74\x43\x6f\x68\x57\x50\x4c\x4e\x57\x34\x46\x63\x48\x6d\x6f\x6d\x6d\x49\x57\x3d','\x57\x50\x72\x79\x57\x37\x71\x64\x6e\x71\x3d\x3d','\x57\x4f\x47\x45\x57\x36\x4f\x3d','\x57\x34\x75\x49\x64\x53\x6b\x52\x57\x34\x4f\x50\x57\x52\x61\x39\x57\x50\x38\x70\x57\x4f\x57\x36\x57\x52\x64\x63\x47\x43\x6f\x64\x57\x52\x37\x64\x47\x5a\x47\x36\x68\x6d\x6b\x39\x57\x52\x61\x68\x57\x35\x62\x57\x6a\x53\x6f\x51\x57\x35\x62\x45\x57\x50\x70\x64\x48\x78\x72\x74\x57\x36\x56\x63\x4c\x76\x33\x63\x52\x77\x6e\x67\x57\x35\x46\x63\x49\x5a\x4c\x4c\x75\x31\x33\x64\x52\x43\x6f\x43\x57\x50\x4e\x64\x4c\x4b\x2f\x64\x49\x67\x46\x64\x56\x62\x6d\x6c\x57\x4f\x44\x2b\x73\x77\x4e\x64\x47\x43\x6f\x67\x57\x37\x4a\x63\x4e\x5a\x4b\x3d','\x76\x57\x71\x6e\x57\x34\x64\x63\x54\x78\x35\x63\x57\x34\x53\x77\x46\x47\x3d\x3d','\x57\x34\x43\x46\x62\x38\x6f\x4c\x57\x34\x48\x45\x45\x67\x42\x63\x4c\x67\x4e\x64\x56\x43\x6b\x4b\x65\x76\x64\x63\x4c\x6d\x6b\x49\x63\x38\x6b\x69\x57\x50\x56\x63\x56\x76\x38\x5a\x57\x36\x74\x64\x51\x53\x6b\x5a\x57\x52\x43\x77\x57\x35\x52\x63\x56\x4d\x4e\x63\x50\x6d\x6f\x54\x57\x34\x4c\x2f\x57\x35\x50\x44\x79\x6d\x6b\x4a\x57\x36\x5a\x64\x4b\x53\x6f\x50\x62\x4d\x37\x63\x4e\x5a\x74\x63\x4b\x32\x70\x63\x54\x4a\x65\x39\x57\x34\x47\x74\x71\x43\x6b\x74\x73\x67\x42\x63\x49\x53\x6b\x4b\x57\x36\x46\x63\x54\x6d\x6f\x75\x6a\x63\x56\x64\x49\x61\x3d\x3d','\x45\x31\x61\x52\x44\x71\x3d\x3d','\x57\x37\x6c\x64\x55\x68\x4c\x4e\x63\x71\x3d\x3d','\x6f\x67\x4e\x63\x4b\x33\x72\x42','\x57\x51\x37\x63\x53\x6d\x6b\x44\x57\x36\x76\x63\x57\x37\x39\x31\x77\x77\x31\x69\x74\x73\x33\x63\x4d\x57\x56\x63\x4b\x43\x6f\x70\x77\x78\x6c\x63\x47\x67\x4a\x63\x52\x64\x65\x46\x46\x53\x6f\x53\x61\x43\x6b\x44\x73\x73\x78\x63\x4c\x43\x6b\x36\x65\x4d\x61\x56\x73\x6d\x6f\x43\x6e\x6d\x6b\x4a\x77\x38\x6b\x38\x67\x6d\x6f\x48\x69\x43\x6f\x32\x44\x75\x74\x63\x56\x53\x6b\x62\x57\x50\x4a\x64\x4a\x43\x6f\x65\x57\x36\x39\x42\x67\x59\x66\x55\x68\x43\x6f\x53\x6d\x64\x6c\x64\x48\x63\x6d\x5a\x57\x52\x34\x3d','\x57\x4f\x5a\x63\x4e\x77\x47\x46\x62\x6d\x6f\x55\x57\x4f\x4f\x6e\x57\x37\x68\x64\x52\x66\x52\x63\x53\x38\x6f\x63\x57\x37\x52\x64\x53\x53\x6b\x54\x57\x52\x39\x38\x57\x50\x69\x74\x68\x4b\x69\x78\x57\x50\x74\x63\x4c\x38\x6b\x34\x6a\x38\x6f\x72\x57\x35\x7a\x69\x6c\x4d\x5a\x63\x47\x75\x6c\x63\x4c\x78\x52\x64\x52\x62\x30\x58\x57\x35\x5a\x64\x56\x43\x6f\x6d\x57\x36\x47\x36\x57\x34\x7a\x58\x57\x50\x50\x4c\x57\x35\x37\x64\x52\x53\x6b\x74\x61\x4a\x54\x34\x57\x35\x5a\x63\x52\x66\x61\x56\x66\x38\x6f\x4c\x57\x36\x64\x63\x50\x77\x4e\x63\x48\x71\x3d\x3d','\x75\x31\x79\x4e\x44\x75\x42\x64\x54\x59\x74\x64\x53\x48\x65\x3d','\x57\x4f\x6e\x71\x66\x47\x6e\x53','\x69\x4e\x31\x6f\x57\x51\x33\x63\x4a\x30\x52\x64\x53\x71\x3d\x3d','\x57\x37\x72\x33\x6e\x38\x6b\x49\x57\x34\x66\x55\x57\x4f\x71\x47\x57\x52\x31\x64\x57\x4f\x79\x37\x57\x52\x53\x3d','\x57\x4f\x6d\x6e\x45\x38\x6f\x52\x57\x50\x57\x42\x69\x64\x6c\x63\x4d\x74\x56\x63\x54\x6d\x6f\x4a\x77\x71\x74\x63\x4c\x6d\x6f\x4a\x64\x6d\x6b\x62\x57\x36\x64\x64\x56\x48\x44\x59\x57\x52\x74\x63\x56\x53\x6f\x32\x57\x36\x76\x2f\x57\x36\x5a\x63\x48\x4a\x4a\x64\x49\x38\x6b\x55\x57\x50\x31\x33\x57\x50\x38\x70\x6d\x53\x6f\x53\x57\x52\x37\x64\x4d\x38\x6f\x59\x6c\x67\x37\x63\x4e\x5a\x74\x63\x4b\x32\x70\x63\x54\x4a\x65\x39\x57\x34\x47\x74\x71\x43\x6b\x74\x73\x67\x42\x63\x49\x53\x6b\x4b\x57\x36\x46\x64\x56\x43\x6b\x73\x6c\x64\x52\x63\x51\x57\x3d\x3d','\x57\x51\x33\x63\x55\x59\x50\x74\x64\x61\x3d\x3d','\x69\x4e\x39\x6d','\x57\x52\x54\x47\x6a\x67\x37\x64\x49\x47\x3d\x3d','\x77\x47\x72\x47\x57\x4f\x68\x64\x55\x5a\x79\x78\x57\x4f\x4f\x77\x43\x30\x57\x65\x73\x74\x56\x64\x4b\x6d\x6b\x57\x57\x34\x72\x6a\x61\x6d\x6f\x4f\x6b\x38\x6b\x55\x57\x50\x46\x64\x4d\x53\x6b\x4b\x67\x43\x6b\x71\x45\x53\x6b\x74\x57\x51\x46\x63\x55\x38\x6f\x49\x43\x75\x48\x5a\x6e\x38\x6f\x75\x6f\x43\x6f\x72\x57\x4f\x38\x55\x78\x67\x78\x63\x4e\x57\x68\x64\x53\x6d\x6f\x43\x42\x38\x6f\x6f\x71\x57\x43\x6e\x57\x52\x70\x64\x47\x57\x37\x63\x54\x43\x6b\x4f\x57\x35\x2f\x63\x55\x71\x53\x4f\x69\x6d\x6f\x31\x57\x35\x71\x3d','\x57\x52\x6c\x63\x56\x66\x7a\x53\x41\x71\x3d\x3d','\x57\x51\x2f\x64\x4e\x38\x6f\x41\x57\x35\x4a\x64\x48\x47\x3d\x3d','\x57\x51\x71\x35\x57\x4f\x64\x63\x53\x78\x57\x42\x57\x35\x71\x5a\x66\x71\x43\x79\x57\x36\x38\x73\x6c\x63\x4e\x64\x4c\x43\x6b\x2f\x57\x50\x30\x7a\x79\x38\x6b\x41\x78\x43\x6b\x66\x57\x35\x46\x63\x49\x67\x7a\x2f\x76\x43\x6f\x70\x73\x4e\x35\x41\x6a\x6d\x6f\x41\x62\x58\x37\x63\x4b\x4a\x64\x63\x47\x38\x6b\x68\x74\x53\x6f\x43\x63\x67\x47\x56\x70\x77\x56\x63\x4c\x4e\x74\x64\x55\x53\x6b\x6a\x57\x35\x70\x63\x53\x5a\x65\x57\x57\x51\x66\x38\x57\x4f\x2f\x63\x50\x61\x64\x64\x50\x6d\x6b\x6a\x57\x50\x5a\x64\x47\x61\x3d\x3d','\x64\x71\x66\x6a\x57\x34\x4a\x63\x49\x58\x2f\x64\x55\x33\x68\x63\x53\x74\x48\x2b\x57\x4f\x57\x50\x57\x51\x42\x64\x4e\x63\x6a\x61\x46\x53\x6f\x77\x71\x43\x6b\x57\x64\x38\x6f\x66\x76\x63\x6c\x64\x56\x43\x6b\x6d\x68\x31\x70\x63\x56\x38\x6f\x4a\x72\x53\x6b\x4d\x71\x47\x78\x63\x4e\x30\x31\x66','\x42\x43\x6f\x4f\x57\x36\x2f\x64\x4b\x49\x33\x64\x55\x6d\x6f\x48\x44\x6d\x6b\x71\x57\x52\x70\x63\x56\x38\x6f\x61\x57\x37\x74\x64\x54\x47\x3d\x3d','\x41\x43\x6b\x44\x6a\x43\x6b\x31\x57\x37\x47\x3d','\x65\x71\x6d\x6c\x57\x34\x4f\x54','\x57\x4f\x75\x64\x57\x51\x68\x63\x49\x73\x75\x3d','\x66\x38\x6b\x33\x57\x52\x44\x31\x57\x37\x57\x3d','\x57\x4f\x6e\x68\x57\x35\x47\x4a\x61\x47\x3d\x3d','\x57\x51\x42\x64\x4c\x43\x6f\x77\x73\x48\x57\x3d','\x57\x36\x4a\x64\x4d\x64\x38\x46\x44\x53\x6b\x52\x57\x34\x31\x4f\x57\x51\x4e\x63\x56\x66\x6c\x63\x54\x6d\x6b\x65\x57\x37\x4a\x64\x54\x53\x6b\x39\x57\x52\x6a\x66\x57\x4f\x6d\x74\x68\x71\x7a\x6d\x57\x51\x52\x64\x4e\x53\x6b\x39\x6c\x38\x6f\x50\x57\x4f\x34\x6f\x7a\x74\x70\x64\x4a\x74\x78\x63\x48\x66\x78\x63\x4f\x68\x31\x30\x57\x50\x2f\x63\x51\x43\x6f\x66\x57\x36\x47\x4e\x57\x35\x48\x58\x57\x34\x66\x70\x57\x35\x37\x64\x52\x53\x6b\x74\x61\x4a\x54\x34\x57\x35\x5a\x63\x52\x66\x61\x56\x73\x53\x6f\x2b\x57\x34\x52\x63\x50\x77\x4e\x63\x48\x71\x3d\x3d','\x57\x37\x52\x63\x53\x6d\x6b\x4b\x67\x32\x70\x64\x47\x6d\x6f\x4d\x67\x32\x44\x6b\x57\x34\x5a\x64\x50\x67\x74\x64\x51\x75\x58\x42\x71\x53\x6b\x66\x57\x36\x39\x36\x73\x71\x70\x64\x47\x58\x74\x63\x53\x6d\x6f\x59\x6a\x47\x34\x6b\x57\x51\x52\x63\x52\x53\x6b\x65\x57\x4f\x43\x6f\x57\x50\x50\x59\x72\x47\x72\x52\x57\x50\x34\x64\x41\x43\x6b\x73\x46\x38\x6b\x42\x42\x38\x6b\x2b\x77\x4e\x75\x6c\x57\x36\x79\x61\x78\x4a\x6c\x64\x4c\x6d\x6b\x6d\x71\x4c\x66\x2b\x57\x51\x37\x64\x4e\x53\x6f\x4c\x6f\x38\x6f\x54','\x64\x61\x4f\x30\x57\x34\x74\x63\x4f\x32\x69\x41\x57\x35\x35\x65\x6a\x47\x6a\x68\x63\x67\x2f\x64\x4d\x43\x6f\x59\x57\x50\x4b\x30\x77\x38\x6f\x33\x69\x38\x6f\x2b\x57\x4f\x6c\x63\x4e\x38\x6b\x57\x66\x6d\x6b\x70\x6d\x43\x6b\x70\x57\x52\x42\x64\x51\x6d\x6b\x56\x69\x61\x7a\x4c\x70\x53\x6f\x4b\x62\x53\x6f\x34\x57\x34\x38\x5a\x68\x67\x2f\x63\x4e\x72\x52\x64\x53\x43\x6f\x6c\x73\x6d\x6b\x64\x68\x61\x6e\x63\x57\x51\x64\x64\x4d\x61\x4e\x63\x55\x43\x6f\x30\x57\x50\x70\x64\x54\x61\x61\x6c\x69\x6d\x6b\x50\x57\x4f\x47\x3d','\x6d\x43\x6f\x78\x43\x6d\x6f\x6f\x72\x47\x3d\x3d','\x6f\x6d\x6b\x41\x57\x34\x79\x39\x77\x57\x3d\x3d','\x45\x49\x2f\x63\x47\x4a\x53\x50\x42\x73\x46\x64\x49\x73\x52\x64\x47\x6d\x6f\x65\x67\x38\x6f\x79\x57\x37\x74\x63\x4e\x75\x75\x6e\x57\x36\x65\x50\x57\x52\x54\x6c\x57\x34\x64\x63\x52\x4e\x39\x36\x79\x53\x6b\x53\x42\x38\x6b\x69\x71\x53\x6f\x50\x57\x37\x57\x51\x57\x4f\x46\x63\x48\x43\x6b\x50\x57\x51\x31\x42\x57\x4f\x70\x64\x55\x38\x6f\x39\x66\x6d\x6b\x39\x44\x63\x43\x6c\x57\x36\x52\x64\x4e\x61\x6c\x63\x50\x38\x6b\x43\x57\x50\x61\x32\x74\x31\x52\x64\x49\x53\x6b\x70\x57\x37\x4e\x64\x4f\x53\x6b\x67\x77\x4a\x47\x4b\x67\x61\x3d\x3d','\x57\x51\x53\x59\x78\x43\x6b\x6e\x57\x4f\x34\x3d','\x57\x36\x4e\x64\x48\x67\x52\x64\x52\x43\x6f\x63','\x6e\x53\x6f\x75\x7a\x6d\x6f\x34\x72\x71\x3d\x3d','\x57\x37\x71\x41\x78\x6d\x6f\x37\x63\x61\x3d\x3d','\x57\x37\x42\x64\x56\x31\x48\x41\x68\x61\x3d\x3d','\x77\x4a\x6e\x69\x57\x52\x78\x64\x4d\x72\x39\x45\x57\x35\x37\x64\x4d\x57\x30\x68\x57\x52\x4e\x64\x53\x48\x2f\x63\x53\x43\x6b\x43\x45\x4b\x2f\x63\x4a\x75\x64\x64\x55\x49\x78\x63\x48\x61\x69\x4b\x44\x53\x6b\x2f\x6f\x43\x6b\x5a\x57\x52\x57\x49\x68\x74\x76\x30\x57\x51\x47\x68\x57\x34\x61\x51\x66\x59\x37\x63\x4c\x73\x62\x47\x71\x74\x58\x4c\x57\x50\x4a\x63\x51\x4d\x68\x64\x4d\x38\x6f\x74\x57\x51\x4c\x6e\x63\x30\x52\x63\x54\x53\x6b\x57\x71\x38\x6f\x63\x75\x43\x6b\x62\x66\x63\x50\x71','\x57\x36\x4f\x58\x77\x47\x3d\x3d','\x57\x4f\x4b\x53\x79\x38\x6b\x30\x57\x52\x34\x3d','\x62\x77\x72\x48\x57\x51\x5a\x63\x4f\x61\x3d\x3d','\x44\x63\x37\x63\x4b\x53\x6f\x71\x57\x34\x34\x51\x69\x53\x6b\x47\x72\x61\x3d\x3d','\x57\x52\x66\x77\x68\x72\x62\x6f\x6c\x43\x6f\x74\x71\x38\x6f\x45\x57\x4f\x33\x63\x4a\x62\x5a\x63\x4e\x43\x6f\x57\x63\x57\x3d\x3d','\x62\x6d\x6f\x41\x57\x35\x30\x39\x76\x61\x3d\x3d','\x57\x4f\x4a\x64\x56\x47\x61\x49\x70\x71\x3d\x3d','\x57\x52\x2f\x64\x55\x43\x6f\x39','\x57\x51\x30\x70\x57\x35\x76\x69\x61\x61\x3d\x3d','\x6d\x4d\x6a\x62\x57\x52\x64\x63\x4b\x4b\x56\x64\x52\x6d\x6f\x2f\x64\x31\x38\x73','\x57\x4f\x43\x35\x76\x43\x6f\x33\x73\x61\x3d\x3d','\x70\x38\x6b\x54\x57\x52\x37\x63\x48\x32\x4a\x63\x51\x38\x6b\x31\x67\x38\x6f\x61\x57\x36\x46\x64\x54\x53\x6b\x70\x57\x52\x52\x63\x50\x43\x6f\x39\x6e\x43\x6b\x39\x57\x50\x6e\x61\x57\x37\x47\x65\x57\x35\x33\x64\x51\x38\x6b\x6a\x46\x76\x70\x63\x52\x31\x76\x61\x57\x50\x56\x64\x47\x43\x6f\x55\x67\x53\x6f\x59\x57\x34\x54\x39\x61\x6d\x6b\x51\x74\x32\x71\x3d','\x68\x38\x6f\x51\x74\x31\x68\x64\x4d\x47\x3d\x3d','\x57\x34\x71\x39\x57\x51\x56\x64\x55\x38\x6b\x50\x57\x36\x68\x64\x55\x61\x3d\x3d','\x46\x31\x56\x64\x49\x76\x31\x75\x76\x63\x56\x63\x56\x53\x6f\x78\x57\x4f\x64\x64\x47\x67\x6c\x64\x56\x38\x6b\x38\x78\x59\x74\x63\x55\x49\x37\x64\x49\x38\x6f\x7a\x62\x38\x6b\x33\x57\x50\x68\x64\x4c\x6d\x6b\x6e\x6e\x43\x6b\x6c\x57\x51\x35\x46\x6f\x43\x6f\x73\x57\x34\x5a\x63\x4f\x66\x6c\x63\x53\x53\x6b\x42\x6e\x68\x4a\x63\x51\x66\x6a\x36\x61\x43\x6b\x4b\x57\x51\x6a\x43\x57\x51\x4c\x62\x41\x78\x33\x64\x53\x43\x6f\x58\x6b\x4d\x44\x61\x57\x34\x30\x6b\x57\x34\x78\x64\x4b\x66\x75\x38\x57\x35\x58\x63\x6f\x64\x6d\x3d','\x70\x32\x79\x62\x57\x51\x56\x63\x4c\x66\x5a\x64\x56\x38\x6b\x38\x78\x72\x7a\x61\x64\x53\x6f\x57\x63\x38\x6b\x6b\x57\x52\x75\x32\x57\x36\x53\x50\x57\x37\x35\x64\x6a\x73\x33\x64\x4c\x6d\x6b\x68\x7a\x71\x72\x7a\x57\x4f\x33\x63\x4f\x33\x66\x2f\x57\x37\x69\x32\x6b\x6d\x6f\x73\x6c\x72\x54\x71\x6a\x43\x6b\x68\x57\x51\x6c\x63\x52\x53\x6f\x69\x77\x43\x6b\x76\x57\x36\x2f\x64\x4d\x65\x78\x64\x48\x38\x6f\x6d\x57\x52\x66\x58\x57\x37\x53\x2b\x43\x38\x6f\x48\x6e\x31\x57\x44\x57\x37\x33\x63\x50\x43\x6f\x31\x57\x51\x47\x3d','\x57\x52\x47\x37\x57\x51\x5a\x63\x52\x64\x4f\x3d','\x57\x4f\x7a\x75\x67\x71\x62\x4f\x6e\x38\x6f\x62','\x57\x35\x6a\x4e\x63\x38\x6b\x32\x57\x34\x50\x36\x57\x50\x65\x47\x57\x51\x6e\x42\x57\x4f\x79\x36\x57\x52\x64\x63\x48\x47\x3d\x3d','\x66\x43\x6f\x73\x57\x37\x4a\x64\x49\x6d\x6f\x38\x57\x50\x69\x6e','\x6c\x4e\x33\x63\x4c\x4c\x57\x3d','\x57\x36\x5a\x63\x54\x6d\x6f\x33\x57\x50\x74\x64\x47\x43\x6b\x6f\x64\x53\x6f\x4d\x6f\x61\x3d\x3d','\x57\x36\x2f\x64\x55\x4b\x52\x64\x47\x6d\x6f\x45','\x68\x31\x4a\x63\x4a\x4e\x6a\x68','\x69\x32\x65\x6c','\x6e\x53\x6f\x71\x45\x53\x6f\x79\x79\x71\x3d\x3d','\x57\x52\x6c\x63\x52\x38\x6f\x65\x57\x36\x4a\x63\x51\x47\x66\x4a\x57\x52\x5a\x63\x4d\x38\x6f\x4f\x57\x4f\x46\x63\x4f\x68\x46\x64\x52\x43\x6b\x30\x57\x36\x35\x62\x76\x61\x4f\x74\x42\x4e\x66\x42\x57\x50\x75\x3d','\x7a\x38\x6f\x6c\x67\x6d\x6b\x59\x57\x37\x61\x3d','\x57\x52\x74\x63\x53\x4d\x54\x70\x75\x61\x3d\x3d','\x57\x34\x71\x39\x57\x52\x4e\x64\x51\x38\x6b\x50\x57\x36\x52\x63\x51\x53\x6f\x59\x57\x4f\x2f\x64\x4c\x6d\x6b\x5a\x57\x52\x38\x66\x69\x58\x74\x63\x4e\x33\x6a\x4c\x57\x52\x52\x63\x48\x4d\x65\x3d','\x57\x52\x68\x64\x54\x38\x6f\x4a\x73\x63\x52\x63\x4a\x6d\x6b\x5a\x61\x58\x4b\x66\x57\x50\x34\x3d','\x57\x4f\x64\x64\x4f\x61\x61\x37\x6d\x61\x3d\x3d','\x6d\x38\x6b\x46\x57\x36\x43\x4f\x78\x57\x71\x4a\x6d\x43\x6f\x32\x73\x38\x6b\x2b\x42\x65\x4e\x64\x54\x38\x6f\x54\x61\x4b\x33\x63\x4d\x47\x3d\x3d','\x68\x53\x6b\x6b\x57\x4f\x54\x31\x57\x37\x30\x3d','\x57\x50\x33\x64\x4d\x53\x6f\x59\x76\x48\x4e\x63\x4e\x61\x3d\x3d','\x57\x4f\x62\x57\x57\x51\x33\x64\x55\x65\x4f\x3d','\x57\x52\x2f\x63\x4e\x63\x74\x64\x47\x6d\x6f\x64\x57\x51\x33\x63\x49\x76\x39\x58\x57\x51\x6c\x63\x53\x32\x4e\x63\x4d\x31\x4f\x67\x57\x36\x5a\x63\x51\x5a\x65\x46\x57\x50\x4a\x64\x53\x53\x6f\x6d\x57\x51\x78\x64\x48\x53\x6b\x47\x79\x63\x68\x64\x56\x48\x4e\x63\x53\x4b\x62\x70\x67\x53\x6f\x35\x57\x37\x37\x63\x48\x53\x6f\x51\x57\x34\x61\x67\x6b\x38\x6f\x79\x57\x4f\x74\x64\x52\x43\x6b\x7a\x75\x71\x7a\x35\x57\x36\x4b\x61\x71\x64\x4c\x69\x69\x38\x6f\x32\x57\x34\x71\x79\x57\x51\x71\x7a\x57\x35\x5a\x63\x53\x53\x6f\x7a\x57\x50\x2f\x63\x4f\x67\x69\x3d','\x57\x50\x52\x64\x56\x48\x57\x4e\x6d\x61\x3d\x3d','\x64\x5a\x47\x45\x66\x38\x6f\x65','\x68\x38\x6f\x6e\x77\x38\x6f\x73\x7a\x71\x3d\x3d','\x70\x43\x6b\x6d\x57\x36\x57\x55\x73\x47\x3d\x3d','\x57\x35\x72\x52\x64\x53\x6b\x56\x57\x34\x4f\x3d','\x57\x4f\x2f\x63\x4b\x31\x35\x43\x41\x71\x3d\x3d','\x57\x51\x38\x32\x74\x38\x6f\x31\x77\x59\x56\x64\x4e\x63\x57\x68\x57\x37\x5a\x63\x55\x66\x4b\x66\x70\x53\x6b\x2f\x57\x52\x31\x51\x46\x53\x6f\x71\x74\x43\x6b\x71\x57\x37\x62\x68\x64\x6d\x6b\x6e\x77\x43\x6f\x79\x75\x76\x64\x63\x4c\x38\x6f\x55\x6e\x38\x6b\x4b\x57\x37\x54\x50\x76\x43\x6f\x37\x57\x4f\x4e\x64\x47\x6d\x6f\x44\x42\x58\x66\x63\x45\x6d\x6f\x41\x70\x71\x4a\x64\x50\x38\x6f\x36\x57\x52\x6c\x63\x49\x71\x42\x63\x47\x38\x6b\x5a\x57\x52\x78\x63\x4d\x47\x72\x30\x57\x35\x54\x73\x44\x53\x6f\x31\x57\x36\x54\x6f','\x57\x52\x50\x79\x61\x4b\x42\x64\x4b\x71\x3d\x3d','\x57\x52\x72\x52\x57\x37\x65\x4b\x61\x38\x6f\x63\x78\x6d\x6b\x53\x73\x4e\x61\x79\x45\x4b\x75\x4a','\x45\x66\x47\x32\x42\x78\x6d\x3d','\x57\x50\x79\x43\x63\x47\x66\x52\x69\x6d\x6f\x61\x76\x53\x6f\x79','\x73\x53\x6b\x70\x63\x53\x6b\x69\x57\x35\x4b\x3d','\x65\x57\x7a\x42\x57\x35\x64\x63\x4d\x71\x3d\x3d','\x6b\x49\x30\x74\x57\x35\x38\x73','\x57\x34\x34\x79\x57\x34\x56\x64\x4b\x49\x33\x63\x4f\x78\x66\x48\x57\x4f\x4b\x5a\x69\x6d\x6b\x46\x57\x37\x66\x39\x79\x71\x38\x3d','\x6a\x6d\x6f\x56\x78\x76\x56\x64\x51\x75\x6d\x66\x57\x51\x6a\x48\x42\x74\x69\x5a\x57\x4f\x5a\x64\x4d\x57\x65\x4c\x6b\x43\x6f\x52\x57\x37\x68\x63\x49\x64\x4a\x64\x50\x6d\x6f\x41\x42\x38\x6f\x74\x57\x36\x33\x63\x50\x53\x6f\x73\x6d\x47\x75\x6a\x57\x34\x76\x34\x57\x36\x6a\x73\x57\x4f\x5a\x63\x55\x38\x6b\x75\x46\x6d\x6b\x67\x57\x4f\x61\x53\x57\x50\x68\x63\x53\x30\x58\x4d\x6d\x62\x70\x63\x56\x73\x33\x64\x56\x6d\x6b\x32\x77\x38\x6f\x49\x79\x4e\x7a\x47\x62\x47\x64\x64\x53\x43\x6f\x56\x66\x32\x53\x30','\x57\x4f\x64\x63\x4b\x4d\x4c\x6d\x6c\x57\x3d\x3d','\x6a\x4a\x4f\x50\x57\x35\x38\x43','\x67\x6d\x6f\x67\x43\x6d\x6f\x31\x43\x47\x3d\x3d','\x67\x38\x6f\x33\x79\x43\x6f\x6c\x45\x66\x35\x6d\x6e\x6d\x6b\x42\x57\x51\x6a\x38\x45\x66\x5a\x64\x56\x6d\x6b\x57\x57\x35\x64\x63\x53\x4c\x70\x64\x49\x6d\x6f\x64\x77\x47\x3d\x3d','\x74\x6d\x6b\x43\x65\x53\x6f\x46\x42\x53\x6f\x6e\x42\x47\x3d\x3d','\x44\x38\x6b\x72\x69\x43\x6b\x46\x57\x35\x38\x3d','\x76\x38\x6f\x78\x6b\x43\x6b\x61','\x57\x37\x42\x64\x48\x4c\x68\x64\x54\x6d\x6f\x71\x57\x52\x69\x6e\x73\x4e\x75\x33\x57\x35\x4e\x63\x4f\x6d\x6b\x79\x76\x57\x3d\x3d','\x57\x35\x79\x6d\x57\x36\x4e\x63\x54\x64\x30\x3d','\x62\x38\x6f\x32\x42\x53\x6f\x4c\x57\x4f\x34\x46\x57\x37\x33\x63\x48\x6d\x6b\x77\x79\x58\x72\x70\x64\x74\x43\x33\x57\x51\x72\x67\x57\x52\x4b\x67\x57\x36\x6e\x4c\x66\x6d\x6b\x71\x57\x51\x31\x6e\x57\x50\x5a\x64\x51\x43\x6b\x42\x6c\x67\x68\x64\x54\x4e\x54\x72\x57\x36\x70\x63\x47\x73\x4a\x63\x4f\x6d\x6b\x77\x6e\x64\x47\x4e\x57\x52\x42\x64\x49\x38\x6f\x44\x7a\x6d\x6f\x31\x6c\x38\x6b\x30\x57\x35\x53\x45\x57\x51\x5a\x64\x49\x4a\x71\x2f\x57\x50\x66\x2b\x57\x4f\x56\x63\x50\x58\x30\x30\x57\x50\x2f\x63\x4e\x33\x43\x6b','\x69\x6d\x6b\x45\x6d\x53\x6b\x34\x57\x51\x43\x3d','\x68\x47\x4b\x2f\x57\x35\x71\x4d','\x57\x34\x50\x34\x67\x38\x6b\x57\x63\x73\x56\x63\x49\x67\x72\x63\x57\x37\x5a\x64\x52\x62\x62\x69\x45\x38\x6f\x53\x57\x36\x30\x52\x6d\x6d\x6b\x6e\x64\x43\x6f\x66\x57\x35\x4f\x38\x71\x43\x6f\x45\x6a\x6d\x6f\x79\x62\x72\x2f\x63\x4c\x38\x6b\x51\x43\x53\x6f\x4f\x57\x52\x4f\x57\x76\x43\x6b\x34\x57\x34\x42\x63\x4a\x53\x6b\x6f\x6b\x4c\x6a\x6b\x67\x38\x6b\x6f\x44\x66\x37\x63\x4f\x53\x6f\x36\x57\x35\x52\x64\x56\x78\x6c\x64\x53\x38\x6b\x5a\x57\x36\x46\x64\x4e\x31\x75\x48\x57\x50\x34\x62\x69\x53\x6b\x4d\x57\x36\x76\x4b','\x57\x34\x56\x64\x4c\x75\x52\x63\x4a\x38\x6b\x4c','\x57\x35\x54\x6e\x6e\x66\x75\x2b\x57\x37\x7a\x74\x72\x31\x64\x63\x4e\x43\x6f\x31\x6f\x43\x6b\x36\x45\x38\x6b\x56\x57\x50\x6e\x39\x76\x64\x37\x64\x52\x38\x6b\x61\x57\x37\x2f\x64\x52\x53\x6b\x6a\x73\x6d\x6b\x4e\x57\x34\x53\x78\x64\x30\x70\x63\x49\x32\x70\x64\x4a\x68\x4f\x2f\x57\x4f\x6a\x4d\x42\x31\x50\x49\x45\x63\x79\x55\x78\x30\x78\x64\x56\x38\x6b\x61\x77\x6d\x6b\x55\x67\x43\x6b\x6b\x6f\x4b\x74\x64\x4b\x72\x68\x63\x55\x57\x65\x42\x57\x4f\x4a\x64\x4a\x43\x6b\x4e\x57\x51\x35\x62\x76\x71\x3d\x3d','\x67\x38\x6b\x46\x66\x43\x6b\x38\x57\x52\x57\x3d','\x57\x52\x71\x75\x43\x74\x6e\x6a','\x57\x51\x6d\x44\x74\x38\x6b\x64\x57\x4f\x57\x3d','\x57\x37\x70\x64\x47\x77\x72\x57','\x57\x50\x68\x63\x49\x68\x6e\x77\x69\x47\x3d\x3d','\x76\x53\x6b\x43\x65\x53\x6f\x42\x43\x53\x6f\x64\x42\x63\x39\x68\x57\x36\x38\x42\x72\x43\x6f\x35','\x57\x52\x50\x33\x6c\x4b\x52\x64\x4b\x57\x3d\x3d','\x57\x50\x4e\x64\x52\x43\x6f\x6d\x78\x4a\x43\x3d','\x57\x35\x62\x58\x57\x34\x4e\x64\x4f\x4e\x58\x6d\x57\x50\x66\x58\x72\x4b\x35\x6d\x57\x51\x4f\x73\x41\x67\x42\x63\x4b\x6d\x6f\x53\x57\x50\x31\x78\x6c\x6d\x6b\x74\x72\x53\x6f\x2f\x57\x4f\x78\x64\x48\x5a\x61\x32\x65\x43\x6b\x6b\x73\x4a\x39\x41\x41\x43\x6b\x42\x73\x76\x4e\x64\x4b\x5a\x64\x64\x4a\x38\x6f\x6f\x68\x43\x6b\x69\x62\x67\x48\x2f\x43\x73\x37\x64\x4c\x59\x46\x63\x56\x38\x6b\x6a\x57\x34\x33\x64\x4c\x4d\x66\x50\x57\x51\x65\x39\x57\x34\x68\x64\x4f\x61\x64\x63\x54\x6d\x6f\x69\x57\x34\x2f\x63\x4c\x61\x3d\x3d','\x57\x4f\x4c\x71\x64\x4b\x52\x64\x49\x43\x6b\x4e\x57\x52\x52\x64\x47\x59\x71\x6c\x57\x34\x64\x63\x4b\x38\x6b\x68\x68\x71\x62\x4e\x75\x57\x30\x62\x57\x37\x47\x3d','\x57\x4f\x62\x30\x57\x52\x4a\x64\x53\x62\x74\x63\x48\x33\x2f\x64\x53\x6d\x6b\x6c\x57\x37\x78\x64\x50\x31\x61\x6a\x57\x34\x37\x63\x49\x30\x68\x64\x48\x6d\x6f\x55\x6c\x33\x74\x63\x4f\x53\x6f\x41\x6c\x43\x6b\x38\x71\x6d\x6b\x4e\x57\x37\x5a\x63\x51\x4a\x69\x66\x43\x6d\x6f\x43\x79\x75\x74\x64\x47\x53\x6b\x6f\x79\x43\x6f\x73\x7a\x72\x42\x63\x51\x53\x6f\x63\x57\x51\x4f\x4c\x41\x57\x46\x63\x48\x53\x6b\x31\x57\x36\x4a\x63\x56\x67\x70\x64\x4b\x77\x76\x42\x57\x50\x52\x63\x4b\x38\x6f\x64\x42\x38\x6f\x59\x57\x52\x6e\x71\x6b\x53\x6b\x2f\x57\x36\x69\x3d','\x6c\x62\x66\x49\x69\x74\x42\x63\x54\x4d\x70\x63\x54\x30\x69\x78\x57\x52\x61\x33\x57\x35\x62\x72\x57\x50\x54\x49\x57\x51\x4e\x63\x4b\x4b\x48\x77\x71\x43\x6f\x57\x57\x50\x65\x69\x73\x61\x38\x4f\x57\x52\x62\x5a\x57\x35\x74\x64\x54\x6d\x6b\x2b\x76\x53\x6b\x6c\x74\x59\x46\x63\x4a\x43\x6f\x79\x57\x34\x38\x68\x57\x34\x4a\x63\x55\x53\x6b\x41\x74\x66\x42\x63\x48\x62\x50\x63\x63\x38\x6f\x43\x57\x50\x35\x30\x72\x6d\x6f\x75\x57\x52\x68\x63\x54\x38\x6f\x35\x71\x78\x2f\x64\x54\x68\x75\x30\x57\x4f\x50\x5a','\x61\x43\x6f\x4d\x79\x43\x6f\x6f\x45\x71\x50\x64\x6e\x6d\x6f\x76\x57\x36\x43\x30\x6c\x65\x46\x64\x50\x53\x6b\x54\x57\x34\x37\x64\x56\x76\x42\x63\x49\x38\x6b\x6f\x67\x61\x3d\x3d','\x57\x51\x76\x54\x57\x36\x75\x49\x66\x43\x6b\x6c\x63\x6d\x6f\x78\x63\x64\x31\x72\x71\x75\x71\x2f\x71\x65\x46\x64\x49\x4e\x74\x64\x53\x38\x6f\x4c\x76\x53\x6b\x2f\x42\x4e\x4b\x66\x57\x37\x79\x4d\x75\x31\x44\x39\x57\x52\x74\x64\x53\x38\x6b\x50\x57\x52\x71\x52\x70\x71\x46\x64\x4c\x38\x6f\x57\x79\x77\x79\x38\x77\x53\x6f\x77\x57\x37\x42\x64\x4c\x6d\x6f\x5a\x77\x6d\x6b\x4a\x57\x50\x75\x56\x63\x49\x39\x39\x7a\x63\x68\x64\x54\x71\x34\x56\x75\x6d\x6b\x67\x6c\x38\x6b\x59\x70\x61\x3d\x3d','\x57\x36\x68\x63\x54\x6d\x6b\x41\x57\x35\x78\x63\x4a\x38\x6b\x66\x63\x53\x6b\x59\x6e\x78\x5a\x63\x4f\x6d\x6b\x71\x57\x50\x53\x4b\x70\x43\x6b\x73\x57\x51\x57\x63\x57\x35\x46\x64\x56\x57\x53\x47\x62\x6d\x6f\x30\x66\x38\x6f\x7a\x57\x52\x2f\x63\x55\x61\x5a\x64\x4e\x43\x6f\x2b\x6b\x49\x52\x64\x53\x59\x31\x7a\x72\x31\x44\x78\x45\x6d\x6f\x56\x45\x43\x6b\x43\x68\x61\x33\x63\x56\x64\x57\x52\x57\x35\x42\x64\x4f\x53\x6f\x42\x62\x43\x6f\x64\x65\x75\x7a\x78\x57\x35\x6a\x65\x57\x50\x72\x4b\x66\x38\x6b\x77\x57\x37\x33\x64\x4d\x71\x3d\x3d','\x73\x38\x6f\x6c\x75\x38\x6f\x39\x57\x36\x35\x56\x6c\x6d\x6f\x78\x6a\x53\x6b\x44\x61\x38\x6b\x63\x57\x35\x4f\x5a\x57\x4f\x4a\x64\x4c\x53\x6f\x4b\x77\x32\x39\x39\x57\x4f\x47\x6a\x57\x50\x74\x64\x47\x4d\x76\x72\x78\x43\x6b\x67\x57\x35\x37\x64\x56\x38\x6b\x72\x57\x51\x4a\x63\x47\x30\x4e\x64\x48\x66\x33\x63\x54\x49\x48\x43\x57\x36\x53\x69\x77\x71\x56\x63\x4e\x6d\x6f\x77\x77\x62\x79\x54\x57\x52\x65\x30\x67\x72\x7a\x6a\x57\x36\x47\x78\x57\x51\x42\x64\x4a\x73\x75\x30\x57\x36\x68\x63\x52\x6d\x6f\x4d\x6d\x59\x75\x3d','\x57\x35\x65\x39\x57\x52\x4e\x64\x4e\x38\x6b\x35\x57\x37\x46\x64\x50\x43\x6b\x58\x57\x35\x4a\x63\x47\x6d\x6f\x39\x57\x34\x38\x71\x70\x58\x75\x3d','\x57\x34\x6c\x64\x48\x73\x65\x46\x6c\x43\x6b\x62\x57\x34\x31\x4f\x57\x51\x4e\x63\x56\x66\x6c\x63\x54\x6d\x6b\x65\x57\x52\x42\x63\x53\x38\x6f\x51\x57\x52\x69\x31\x57\x35\x66\x43\x75\x65\x38\x46\x57\x36\x2f\x64\x4c\x53\x6b\x31\x46\x43\x6b\x53\x57\x35\x31\x62\x6b\x77\x78\x63\x49\x64\x4e\x64\x4a\x75\x68\x64\x52\x77\x76\x30\x57\x4f\x33\x63\x51\x6d\x6b\x6a\x57\x52\x54\x55\x57\x34\x47\x4c\x57\x34\x6d\x31\x57\x50\x56\x64\x4f\x6d\x6f\x68\x74\x75\x34\x4f\x57\x4f\x5a\x64\x51\x71\x6a\x6d\x63\x38\x6b\x54\x57\x4f\x2f\x63\x52\x77\x64\x63\x48\x71\x3d\x3d','\x67\x43\x6f\x50\x78\x62\x37\x64\x55\x61\x35\x7a\x57\x36\x75\x30\x44\x4e\x79\x31\x57\x50\x78\x64\x4b\x71\x47\x59\x41\x6d\x6b\x5a\x57\x37\x68\x63\x4c\x5a\x5a\x64\x52\x53\x6b\x70\x7a\x43\x6f\x67\x57\x51\x52\x63\x56\x53\x6b\x42\x69\x61\x79\x45\x57\x50\x79\x49\x57\x36\x65\x78\x57\x4f\x2f\x63\x56\x43\x6b\x6f\x42\x43\x6b\x44\x57\x34\x6d\x51\x57\x50\x68\x63\x50\x65\x58\x39\x42\x4c\x68\x64\x4f\x67\x74\x64\x53\x43\x6f\x7a\x77\x38\x6b\x57\x6a\x59\x43\x31\x71\x31\x70\x63\x50\x43\x6b\x38\x67\x71\x3d\x3d','\x57\x52\x2f\x64\x55\x43\x6f\x31','\x69\x6d\x6b\x71\x57\x50\x4c\x52\x57\x36\x75\x3d','\x57\x51\x33\x64\x53\x53\x6f\x48\x44\x72\x61\x3d','\x68\x43\x6f\x64\x75\x76\x4a\x64\x4b\x61\x3d\x3d','\x57\x50\x4e\x64\x54\x43\x6f\x5a','\x64\x6d\x6f\x53\x57\x35\x4b\x70\x73\x38\x6b\x4d\x72\x6d\x6b\x2f\x57\x37\x64\x64\x4d\x32\x43\x3d','\x57\x36\x53\x49\x75\x43\x6f\x6a','\x57\x51\x52\x63\x50\x48\x44\x75\x6a\x71\x3d\x3d','\x57\x51\x79\x70\x68\x53\x6f\x6c\x57\x36\x53\x3d','\x57\x34\x5a\x64\x56\x6d\x6b\x76\x57\x50\x42\x63\x51\x4e\x58\x4f\x57\x52\x74\x63\x4d\x38\x6f\x4a\x57\x37\x5a\x64\x4e\x4e\x46\x63\x4b\x6d\x6b\x2f\x57\x36\x44\x6b\x78\x71\x66\x4f\x65\x68\x65\x4d\x57\x34\x4a\x63\x48\x6d\x6f\x37\x57\x35\x64\x64\x4b\x77\x4e\x63\x4d\x38\x6b\x30\x57\x35\x57\x32\x57\x52\x5a\x63\x4a\x73\x70\x63\x47\x43\x6f\x72\x57\x34\x69\x2b\x57\x37\x38\x65\x57\x50\x54\x46\x72\x30\x34\x58\x61\x78\x64\x64\x53\x49\x46\x64\x4a\x43\x6b\x59\x57\x4f\x75\x45\x65\x6d\x6b\x6d\x57\x51\x46\x64\x4d\x78\x6a\x44\x67\x6d\x6b\x6d\x65\x47\x3d\x3d','\x62\x6d\x6b\x6c\x57\x36\x75\x62\x43\x57\x3d\x3d','\x57\x50\x37\x64\x56\x43\x6f\x75\x57\x50\x5a\x64\x4d\x38\x6b\x61\x64\x53\x6b\x51\x46\x67\x46\x63\x52\x38\x6b\x59\x57\x4f\x58\x51\x42\x53\x6f\x78\x57\x36\x54\x79\x57\x35\x4e\x64\x50\x57\x3d\x3d','\x57\x51\x42\x64\x53\x43\x6f\x49\x76\x78\x6c\x64\x54\x6d\x6f\x4d\x71\x65\x31\x6b\x57\x34\x5a\x64\x50\x67\x74\x64\x51\x75\x58\x42\x71\x53\x6b\x66\x57\x36\x39\x36\x73\x71\x70\x64\x47\x58\x74\x63\x53\x6d\x6f\x59\x6a\x47\x34\x6b\x57\x36\x42\x64\x51\x38\x6f\x71\x57\x4f\x44\x43\x57\x35\x38\x48\x65\x30\x47\x2f\x57\x50\x34\x45\x41\x43\x6b\x6e\x66\x6d\x6f\x70\x6c\x53\x6b\x4b\x77\x4e\x65\x64\x57\x51\x62\x70\x64\x68\x2f\x64\x4e\x43\x6b\x63\x65\x72\x71\x53\x57\x36\x46\x63\x4e\x38\x6b\x50\x43\x53\x6b\x33','\x57\x4f\x72\x39\x57\x34\x47\x77\x66\x47\x3d\x3d','\x57\x35\x54\x6e\x6e\x66\x75\x2b\x57\x37\x7a\x74\x72\x31\x64\x63\x4e\x43\x6f\x31\x6f\x43\x6b\x36\x45\x38\x6b\x56\x57\x50\x6d\x56\x65\x73\x42\x64\x52\x38\x6b\x73\x57\x37\x37\x63\x4f\x38\x6b\x75\x77\x43\x6f\x2b\x57\x50\x6d\x36\x64\x58\x68\x64\x4d\x74\x68\x64\x4a\x68\x72\x6c\x57\x34\x4f\x76\x6c\x4b\x58\x54\x41\x31\x6a\x6b\x65\x57\x5a\x63\x53\x43\x6f\x66\x77\x6d\x6f\x39\x78\x6d\x6f\x79\x42\x61\x68\x63\x47\x58\x68\x64\x55\x75\x31\x75\x57\x34\x56\x63\x48\x53\x6f\x49\x57\x36\x50\x62\x66\x61\x3d\x3d','\x57\x4f\x47\x2b\x57\x34\x35\x41\x70\x71\x3d\x3d','\x57\x50\x57\x79\x57\x36\x6e\x31\x79\x30\x7a\x6c\x57\x4f\x4b\x35\x57\x4f\x66\x58\x57\x34\x30\x76\x64\x67\x74\x64\x55\x30\x64\x63\x4f\x32\x64\x64\x55\x53\x6f\x79\x62\x63\x4b\x68\x57\x34\x70\x63\x4f\x38\x6b\x56\x57\x34\x50\x63\x41\x71\x54\x69\x75\x6d\x6b\x70\x57\x4f\x4e\x64\x47\x43\x6b\x4e\x69\x48\x78\x63\x4e\x4d\x50\x7a\x57\x52\x38\x5a\x45\x64\x61\x75\x57\x36\x6d\x66\x57\x50\x5a\x64\x4a\x53\x6f\x41\x57\x34\x4b\x77\x57\x34\x39\x39\x65\x31\x70\x64\x4e\x76\x44\x47\x6e\x43\x6f\x72\x67\x71\x3d\x3d','\x57\x52\x47\x64\x41\x6d\x6b\x58\x57\x51\x75\x46\x6e\x49\x68\x64\x4c\x74\x4f\x3d','\x57\x4f\x74\x63\x4e\x4b\x31\x76\x43\x6d\x6b\x51\x79\x43\x6f\x74','\x6f\x38\x6f\x73\x57\x36\x68\x64\x51\x43\x6f\x2b','\x6f\x74\x65\x31\x70\x53\x6f\x33','\x57\x51\x64\x63\x49\x68\x66\x58\x41\x61\x3d\x3d','\x6b\x6d\x6b\x37\x67\x76\x4a\x64\x56\x48\x66\x76\x57\x51\x57\x38\x6d\x32\x79\x59\x57\x4f\x33\x64\x4d\x30\x48\x78\x6b\x43\x6f\x33\x57\x37\x68\x64\x4d\x4e\x33\x63\x54\x38\x6b\x70\x69\x38\x6b\x68\x57\x36\x70\x64\x53\x53\x6b\x42\x7a\x4b\x4c\x6d\x57\x50\x7a\x32\x57\x51\x34\x78\x57\x34\x6c\x64\x56\x6d\x6f\x61\x6e\x6d\x6b\x44\x57\x4f\x62\x4c\x57\x35\x2f\x64\x54\x57\x4b\x2b\x6f\x58\x4a\x63\x54\x63\x33\x63\x50\x38\x6b\x43\x64\x53\x6b\x57\x6c\x4d\x58\x47\x71\x65\x2f\x63\x4f\x38\x6b\x49\x67\x73\x50\x33','\x70\x38\x6b\x54\x57\x52\x37\x63\x48\x32\x4a\x63\x51\x38\x6b\x31\x67\x38\x6f\x61\x57\x36\x46\x64\x54\x53\x6b\x70\x57\x52\x52\x63\x50\x43\x6f\x39\x6e\x43\x6b\x39\x57\x35\x69\x6b\x57\x52\x4c\x43\x57\x35\x78\x63\x55\x43\x6f\x6d\x79\x65\x46\x63\x50\x65\x66\x62\x57\x35\x70\x63\x4e\x43\x6b\x62\x61\x6d\x6f\x59\x57\x50\x4b\x34\x75\x38\x6f\x2f\x61\x5a\x62\x67\x57\x50\x53\x6f\x57\x35\x4a\x63\x51\x53\x6f\x54\x64\x43\x6f\x36\x79\x4d\x6d\x57\x68\x38\x6f\x6f\x75\x6d\x6f\x52\x65\x71\x46\x64\x53\x73\x50\x4a\x45\x57\x5a\x64\x56\x43\x6f\x45','\x62\x77\x4a\x63\x4d\x4b\x76\x6b\x6a\x77\x42\x63\x4d\x78\x37\x63\x48\x43\x6b\x77\x73\x61\x3d\x3d','\x57\x35\x57\x7a\x71\x61\x70\x63\x4e\x43\x6f\x55\x57\x37\x56\x63\x4a\x32\x31\x72\x57\x4f\x78\x64\x53\x6d\x6f\x69\x68\x71\x54\x31\x65\x63\x4b\x43\x57\x36\x75\x33\x45\x64\x56\x63\x4b\x58\x33\x63\x49\x71\x5a\x64\x4e\x6d\x6b\x62\x57\x35\x71\x4b\x57\x52\x61\x6b\x6d\x38\x6f\x31\x67\x30\x70\x64\x48\x6d\x6f\x79\x68\x33\x30\x6d\x62\x78\x7a\x43\x57\x51\x6a\x59\x57\x4f\x68\x64\x56\x6d\x6f\x53\x57\x36\x6c\x64\x4f\x4c\x42\x63\x4d\x4e\x4a\x64\x55\x53\x6b\x4e\x57\x35\x78\x64\x4c\x31\x43\x71\x57\x52\x4c\x4b\x76\x71\x3d\x3d','\x57\x35\x65\x6e\x57\x35\x70\x63\x4d\x5a\x4f\x3d','\x69\x53\x6b\x69\x57\x37\x6d\x38\x74\x48\x69\x75\x65\x43\x6f\x4f\x75\x43\x6b\x59\x79\x66\x70\x64\x51\x57\x3d\x3d','\x41\x4d\x5a\x63\x4b\x53\x6f\x57\x57\x34\x4b\x53\x6f\x61\x3d\x3d'];(function(_0x4fa08e,_0x55dc58){const _0x7cd523=function(_0x2aaac4){while(--_0x2aaac4){_0x4fa08e['push'](_0x4fa08e['shift']());}},_0x39430d=function(){const _0x3e3f83={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x2c81df,_0x536e11,_0x4dbdb2,_0x594199){_0x594199=_0x594199||{};let _0x12907e=_0x536e11+'='+_0x4dbdb2;let _0x49a496=0x0;for(let _0x5a58d7=0x0,_0xf17a49=_0x2c81df['length'];_0x5a58d7<_0xf17a49;_0x5a58d7++){const _0x31e1a0=_0x2c81df[_0x5a58d7];_0x12907e+=';\x20'+_0x31e1a0;const _0x45462d=_0x2c81df[_0x31e1a0];_0x2c81df['push'](_0x45462d);_0xf17a49=_0x2c81df['length'];_0x45462d!==!![]&&(_0x12907e+='='+_0x45462d);}_0x594199['cookie']=_0x12907e;},'removeCookie':function(){return'dev';},'getCookie':function(_0x4676e4,_0x5905b6){_0x4676e4=_0x4676e4||function(_0x14214b){return _0x14214b;};const _0x56f0e5=_0x4676e4(new RegExp('(?:^|;\x20)'+_0x5905b6['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));const _0x395eb4=function(_0x27ee91,_0x4c8b4f){_0x27ee91(++_0x4c8b4f);};_0x395eb4(_0x7cd523,_0x55dc58);return _0x56f0e5?decodeURIComponent(_0x56f0e5[0x1]):undefined;}};const _0x254071=function(){const _0x4a82d9=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x4a82d9['test'](_0x3e3f83['removeCookie']['toString']());};_0x3e3f83['updateCookie']=_0x254071;let _0x26aa13='';const _0x3e745a=_0x3e3f83['updateCookie']();if(!_0x3e745a)_0x3e3f83['setCookie'](['*'],'counter',0x1);else _0x3e745a?_0x26aa13=_0x3e3f83['getCookie'](null,'counter'):_0x3e3f83['removeCookie']();};_0x39430d();}(_0x55dc,0x1b2));const _0x7cd5=function(_0x4fa08e,_0x55dc58){_0x4fa08e=_0x4fa08e-0x0;let _0x7cd523=_0x55dc[_0x4fa08e];if(_0x7cd5['dOsPPH']===undefined){var _0x39430d=function(_0x254071){const _0x26aa13='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',_0x3e745a=String(_0x254071)['replace'](/=+$/,'');let _0x2c81df='';for(let _0x536e11=0x0,_0x4dbdb2,_0x594199,_0x12907e=0x0;_0x594199=_0x3e745a['charAt'](_0x12907e++);~_0x594199&&(_0x4dbdb2=_0x536e11%0x4?_0x4dbdb2*0x40+_0x594199:_0x594199,_0x536e11++%0x4)?_0x2c81df+=String['fromCharCode'](0xff&_0x4dbdb2>>(-0x2*_0x536e11&0x6)):0x0){_0x594199=_0x26aa13['indexOf'](_0x594199);}return _0x2c81df;};const _0x3e3f83=function(_0x49a496,_0x5a58d7){let _0xf17a49=[],_0x31e1a0=0x0,_0x45462d,_0x4676e4='',_0x5905b6='';_0x49a496=_0x39430d(_0x49a496);for(let _0x395eb4=0x0,_0x14214b=_0x49a496['length'];_0x395eb4<_0x14214b;_0x395eb4++){_0x5905b6+='%'+('00'+_0x49a496['charCodeAt'](_0x395eb4)['toString'](0x10))['slice'](-0x2);}_0x49a496=decodeURIComponent(_0x5905b6);let _0x56f0e5;for(_0x56f0e5=0x0;_0x56f0e5<0x100;_0x56f0e5++){_0xf17a49[_0x56f0e5]=_0x56f0e5;}for(_0x56f0e5=0x0;_0x56f0e5<0x100;_0x56f0e5++){_0x31e1a0=(_0x31e1a0+_0xf17a49[_0x56f0e5]+_0x5a58d7['charCodeAt'](_0x56f0e5%_0x5a58d7['length']))%0x100;_0x45462d=_0xf17a49[_0x56f0e5];_0xf17a49[_0x56f0e5]=_0xf17a49[_0x31e1a0];_0xf17a49[_0x31e1a0]=_0x45462d;}_0x56f0e5=0x0;_0x31e1a0=0x0;for(let _0x27ee91=0x0;_0x27ee91<_0x49a496['length'];_0x27ee91++){_0x56f0e5=(_0x56f0e5+0x1)%0x100;_0x31e1a0=(_0x31e1a0+_0xf17a49[_0x56f0e5])%0x100;_0x45462d=_0xf17a49[_0x56f0e5];_0xf17a49[_0x56f0e5]=_0xf17a49[_0x31e1a0];_0xf17a49[_0x31e1a0]=_0x45462d;_0x4676e4+=String['fromCharCode'](_0x49a496['charCodeAt'](_0x27ee91)^_0xf17a49[(_0xf17a49[_0x56f0e5]+_0xf17a49[_0x31e1a0])%0x100]);}return _0x4676e4;};_0x7cd5['qKMjOX']=_0x3e3f83,_0x7cd5['EYKzzh']={},_0x7cd5['dOsPPH']=!![];}const _0x2aaac4=_0x7cd5['EYKzzh'][_0x4fa08e];if(_0x2aaac4===undefined){if(_0x7cd5['UICQIv']===undefined){const _0x4c8b4f=function(_0x4a82d9){this['umUHSW']=_0x4a82d9;this['nPYKVm']=[0x1,0x0,0x0];this['ngSdvX']=function(){return'newState';};this['iLAquG']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['eWpSkX']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4c8b4f['prototype']['nDftyQ']=function(){const _0x50f5ac=new RegExp(this['iLAquG']+this['eWpSkX']),_0x5d6ff5=_0x50f5ac['test'](this['ngSdvX']['toString']())?--this['nPYKVm'][0x1]:--this['nPYKVm'][0x0];return this['gpEAQq'](_0x5d6ff5);},_0x4c8b4f['prototype']['gpEAQq']=function(_0x366e75){if(!Boolean(~_0x366e75))return _0x366e75;return this['NVLixh'](this['umUHSW']);},_0x4c8b4f['prototype']['NVLixh']=function(_0x4b7620){for(let _0x349ccf=0x0,_0x5e8f76=this['nPYKVm']['length'];_0x349ccf<_0x5e8f76;_0x349ccf++){this['nPYKVm']['push'](Math['round'](Math['random']()));_0x5e8f76=this['nPYKVm']['length'];}return _0x4b7620(this['nPYKVm'][0x0]);},new _0x4c8b4f(_0x7cd5)['nDftyQ'](),_0x7cd5['UICQIv']=!![];}_0x7cd523=_0x7cd5['qKMjOX'](_0x7cd523,_0x55dc58),_0x7cd5['EYKzzh'][_0x4fa08e]=_0x7cd523;}else _0x7cd523=_0x2aaac4;return _0x7cd523;};const _0x4dbdb2=function(){const _0x49527b={};_0x49527b[_0x7cd5('\x30\x78\x34\x32','\x55\x43\x62\x6b')]=_0x7cd5('\x30\x78\x37','\x28\x51\x58\x34');_0x49527b[_0x7cd5('\x30\x78\x63\x66','\x4e\x74\x56\x55')]=_0x7cd5('\x30\x78\x34','\x6b\x5d\x46\x67');_0x49527b[_0x7cd5('\x30\x78\x30','\x33\x49\x69\x59')]=function(_0x326256,_0x3ce71b){return _0x326256!==_0x3ce71b;};_0x49527b[_0x7cd5('\x30\x78\x65\x65','\x66\x30\x59\x68')]=_0x7cd5('\x30\x78\x64\x63','\x6b\x5d\x46\x67');_0x49527b[_0x7cd5('\x30\x78\x37\x32','\x4f\x37\x58\x34')]=_0x7cd5('\x30\x78\x32\x66','\x4f\x37\x58\x34');_0x49527b[_0x7cd5('\x30\x78\x62\x63','\x31\x2a\x40\x77')]=_0x7cd5('\x30\x78\x66\x61','\x4c\x6e\x4e\x48');_0x49527b[_0x7cd5('\x30\x78\x35','\x40\x2a\x4a\x6e')]=_0x7cd5('\x30\x78\x39\x62','\x65\x53\x66\x23');_0x49527b[_0x7cd5('\x30\x78\x63\x34','\x45\x64\x70\x4d')]=_0x7cd5('\x30\x78\x34\x33','\x50\x41\x58\x26');const _0x407bf6=_0x49527b;let _0x338570=!![];return function(_0x2c1e24,_0x2fd9ed){const _0x47914e={};_0x47914e[_0x7cd5('\x30\x78\x39\x36','\x64\x35\x63\x74')]=_0x407bf6[_0x7cd5('\x30\x78\x34\x32','\x55\x43\x62\x6b')];_0x47914e[_0x7cd5('\x30\x78\x37\x31','\x61\x4f\x31\x4f')]=_0x407bf6[_0x7cd5('\x30\x78\x37\x38','\x42\x63\x6e\x38')];_0x47914e[_0x7cd5('\x30\x78\x37\x33','\x4e\x74\x56\x55')]=function(_0x442223,_0x33eb1b){return _0x407bf6[_0x7cd5('\x30\x78\x38\x32','\x68\x31\x64\x63')](_0x442223,_0x33eb1b);};_0x47914e[_0x7cd5('\x30\x78\x62\x37','\x6b\x5d\x46\x67')]=_0x407bf6[_0x7cd5('\x30\x78\x31','\x4e\x74\x56\x55')];_0x47914e[_0x7cd5('\x30\x78\x32\x37','\x43\x78\x73\x51')]=_0x407bf6[_0x7cd5('\x30\x78\x36\x61','\x54\x48\x5b\x49')];_0x47914e[_0x7cd5('\x30\x78\x36','\x43\x30\x7a\x44')]=function(_0x5758ac,_0x233a4f){return _0x407bf6[_0x7cd5('\x30\x78\x65\x66','\x36\x5d\x24\x4b')](_0x5758ac,_0x233a4f);};_0x47914e[_0x7cd5('\x30\x78\x39\x31','\x31\x4e\x5a\x6a')]=_0x407bf6[_0x7cd5('\x30\x78\x61\x65','\x6d\x68\x43\x70')];_0x47914e[_0x7cd5('\x30\x78\x64\x39','\x33\x4d\x57\x79')]=_0x407bf6[_0x7cd5('\x30\x78\x33\x30','\x41\x73\x76\x56')];const _0x159bd4=_0x47914e;if(_0x407bf6[_0x7cd5('\x30\x78\x66\x37','\x4b\x63\x21\x49')](_0x407bf6[_0x7cd5('\x30\x78\x31\x62','\x63\x4d\x44\x56')],_0x407bf6[_0x7cd5('\x30\x78\x31\x34','\x43\x30\x7a\x44')])){function _0x9fe8ef(){const _0xb37529=_0x2fd9ed[_0x7cd5('\x30\x78\x32\x30','\x64\x35\x63\x74')](_0x2c1e24,arguments);_0x2fd9ed=null;return _0xb37529;}}else{const _0xb11900=_0x338570?function(){if(_0x159bd4[_0x7cd5('\x30\x78\x34\x39','\x31\x4e\x5a\x6a')](_0x159bd4[_0x7cd5('\x30\x78\x37\x66','\x40\x2a\x4a\x6e')],_0x159bd4[_0x7cd5('\x30\x78\x63\x31','\x42\x63\x6e\x38')])){if(_0x2fd9ed){if(_0x159bd4[_0x7cd5('\x30\x78\x65\x31','\x64\x35\x63\x74')](_0x159bd4[_0x7cd5('\x30\x78\x37\x65','\x31\x2a\x40\x77')],_0x159bd4[_0x7cd5('\x30\x78\x31\x61','\x47\x79\x33\x5e')])){const _0x4dfe79=_0x2fd9ed[_0x7cd5('\x30\x78\x66\x38','\x31\x2a\x40\x77')](_0x2c1e24,arguments);return _0x2fd9ed=null,_0x4dfe79;}else{function _0x107ac9(){const _0x4c2859=test[_0x7cd5('\x30\x78\x34\x36','\x4b\x63\x21\x49')](_0x159bd4[_0x7cd5('\x30\x78\x62','\x55\x43\x62\x6b')])()[_0x7cd5('\x30\x78\x38','\x39\x63\x6e\x64')](_0x159bd4[_0x7cd5('\x30\x78\x34\x34','\x2a\x49\x5a\x47')]);return!_0x4c2859[_0x7cd5('\x30\x78\x37\x34','\x28\x51\x58\x34')](_0x536e11);}}}}else{function _0x4e6821(){if(_0x2fd9ed){const _0x54ac9b=_0x2fd9ed[_0x7cd5('\x30\x78\x39\x63','\x34\x52\x50\x54')](_0x2c1e24,arguments);return _0x2fd9ed=null,_0x54ac9b;}}}}:function(){};return _0x338570=![],_0xb11900;}};}(),_0x536e11=_0x4dbdb2(this,function(){const _0x34ae2a={};_0x34ae2a[_0x7cd5('\x30\x78\x66\x65','\x2a\x49\x5a\x47')]=function(_0x11b949,_0x49db57){return _0x11b949!==_0x49db57;};_0x34ae2a[_0x7cd5('\x30\x78\x35\x34','\x28\x43\x66\x77')]=_0x7cd5('\x30\x78\x63\x65','\x35\x47\x65\x48');_0x34ae2a[_0x7cd5('\x30\x78\x63\x30','\x6b\x5d\x46\x67')]=_0x7cd5('\x30\x78\x61\x63','\x31\x4e\x5a\x6a');_0x34ae2a[_0x7cd5('\x30\x78\x32\x65','\x25\x6a\x4c\x6e')]=_0x7cd5('\x30\x78\x33\x61','\x66\x30\x59\x68');_0x34ae2a[_0x7cd5('\x30\x78\x65\x32','\x71\x68\x78\x66')]=_0x7cd5('\x30\x78\x61\x31','\x43\x78\x73\x51');_0x34ae2a[_0x7cd5('\x30\x78\x35\x36','\x43\x30\x7a\x44')]=function(_0x9d3481){return _0x9d3481();};const _0x5b029c=_0x34ae2a;const _0x557201=function(){if(_0x5b029c[_0x7cd5('\x30\x78\x38\x35','\x56\x5b\x7a\x43')](_0x5b029c[_0x7cd5('\x30\x78\x36\x36','\x39\x63\x6e\x64')],_0x5b029c[_0x7cd5('\x30\x78\x62\x66','\x77\x5b\x4f\x43')])){const _0x51ccb9=_0x557201[_0x7cd5('\x30\x78\x66\x62','\x62\x36\x76\x71')](_0x5b029c[_0x7cd5('\x30\x78\x39\x61','\x5b\x4f\x28\x68')])()[_0x7cd5('\x30\x78\x63\x36','\x4f\x38\x5b\x64')](_0x5b029c[_0x7cd5('\x30\x78\x35\x30','\x4c\x6e\x4e\x48')]);return!_0x51ccb9[_0x7cd5('\x30\x78\x32\x35','\x40\x2a\x4a\x6e')](_0x536e11);}else{function _0x1988fd(){title=title[_0x7cd5('\x30\x78\x33\x32','\x42\x63\x6e\x38')](separator)[0x0][_0x7cd5('\x30\x78\x31\x30\x36','\x4e\x74\x56\x55')]();}}};return _0x5b029c[_0x7cd5('\x30\x78\x34\x65','\x23\x71\x5e\x28')](_0x557201);});_0x536e11();class TuMangaOnline extends Connector{constructor(){const _0xaad3b8={};_0xaad3b8[_0x7cd5('\x30\x78\x65\x35','\x50\x41\x58\x26')]=_0x7cd5('\x30\x78\x38\x38','\x62\x36\x76\x71');_0xaad3b8[_0x7cd5('\x30\x78\x64\x62','\x43\x30\x7a\x44')]=_0x7cd5('\x30\x78\x32\x32','\x66\x30\x59\x68');_0xaad3b8[_0x7cd5('\x30\x78\x34\x62','\x4f\x38\x5b\x64')]=_0x7cd5('\x30\x78\x31\x39','\x6d\x68\x43\x70');_0xaad3b8[_0x7cd5('\x30\x78\x32\x31','\x66\x30\x59\x68')]=_0x7cd5('\x30\x78\x62\x36','\x61\x4f\x31\x4f');_0xaad3b8[_0x7cd5('\x30\x78\x66\x30','\x35\x47\x65\x48')]=_0x7cd5('\x30\x78\x31\x35','\x68\x31\x64\x63')+_0x7cd5('\x30\x78\x34\x30','\x2a\x49\x5a\x47');_0xaad3b8[_0x7cd5('\x30\x78\x66\x34','\x62\x36\x76\x71')]=_0x7cd5('\x30\x78\x32\x33','\x38\x76\x2a\x55');_0xaad3b8[_0x7cd5('\x30\x78\x36\x39','\x62\x36\x76\x71')]=_0x7cd5('\x30\x78\x33\x33','\x38\x76\x2a\x55');_0xaad3b8[_0x7cd5('\x30\x78\x31\x63','\x64\x35\x63\x74')]=_0x7cd5('\x30\x78\x64\x35','\x45\x64\x70\x4d');_0xaad3b8[_0x7cd5('\x30\x78\x32\x39','\x25\x6a\x4c\x6e')]=_0x7cd5('\x30\x78\x64\x33','\x6d\x68\x43\x70');_0xaad3b8[_0x7cd5('\x30\x78\x39\x34','\x5a\x25\x53\x63')]=_0x7cd5('\x30\x78\x64\x34','\x62\x36\x76\x71');const _0x40245a=_0xaad3b8,_0x347f6c=_0x40245a[_0x7cd5('\x30\x78\x31\x30\x32','\x71\x68\x78\x66')][_0x7cd5('\x30\x78\x66','\x31\x2a\x40\x77')]('\x7c');let _0x4446bc=0x0;while(!![]){switch(_0x347f6c[_0x4446bc++]){case'\x30':this[_0x7cd5('\x30\x78\x63\x39','\x4c\x6e\x4e\x48')]=_0x40245a[_0x7cd5('\x30\x78\x32\x34','\x47\x79\x33\x5e')];continue;case'\x31':super();continue;case'\x32':this[_0x7cd5('\x30\x78\x31\x30\x34','\x45\x64\x70\x4d')][_0x7cd5('\x30\x78\x36\x65','\x33\x49\x69\x59')][_0x7cd5('\x30\x78\x38\x34','\x43\x78\x73\x51')](_0x40245a[_0x7cd5('\x30\x78\x31\x30','\x29\x79\x36\x51')],this[_0x7cd5('\x30\x78\x63\x32','\x4e\x74\x56\x55')]);continue;case'\x33':const _0x18c024={};_0x18c024[_0x7cd5('\x30\x78\x36\x63','\x4b\x63\x21\x49')]=_0x40245a[_0x7cd5('\x30\x78\x36\x35','\x33\x4d\x57\x79')];_0x18c024[_0x7cd5('\x30\x78\x38\x62','\x43\x78\x73\x51')]=_0x40245a[_0x7cd5('\x30\x78\x63\x35','\x61\x4f\x31\x4f')];_0x18c024[_0x7cd5('\x30\x78\x39','\x31\x2a\x40\x77')]=_0x40245a[_0x7cd5('\x30\x78\x32\x63','\x34\x52\x50\x54')];_0x18c024[_0x7cd5('\x30\x78\x37\x64','\x43\x78\x73\x51')]=0x0;_0x18c024[_0x7cd5('\x30\x78\x34\x31','\x39\x63\x6e\x64')]=0x1388;_0x18c024[_0x7cd5('\x30\x78\x38\x36','\x43\x30\x7a\x44')]=0x1f4;const _0x24c877={};_0x24c877[_0x7cd5('\x30\x78\x62\x62','\x5a\x25\x53\x63')]=_0x18c024;this[_0x7cd5('\x30\x78\x38\x66','\x56\x5b\x7a\x43')]=_0x24c877;continue;case'\x34':super['\x69\x64']=_0x40245a[_0x7cd5('\x30\x78\x62\x34','\x5a\x25\x53\x63')];continue;case'\x35':super[_0x7cd5('\x30\x78\x31\x36','\x33\x4d\x57\x79')]=_0x40245a[_0x7cd5('\x30\x78\x65\x64','\x33\x49\x69\x59')];continue;case'\x36':this[_0x7cd5('\x30\x78\x34\x37','\x36\x5d\x24\x4b')]=[_0x40245a[_0x7cd5('\x30\x78\x33\x35','\x39\x63\x6e\x64')],_0x40245a[_0x7cd5('\x30\x78\x61\x37','\x4c\x6e\x4e\x48')]];continue;}break;}}async[_0x7cd5('\x30\x78\x33\x37','\x33\x4d\x57\x79')](){await super[_0x7cd5('\x30\x78\x34\x63','\x5b\x4f\x28\x68')]();await this[_0x7cd5('\x30\x78\x63\x64','\x5a\x25\x53\x63')](0x9c4);}async[_0x7cd5('\x30\x78\x62\x33','\x4c\x6e\x4e\x48')](_0x1d6837){const _0x68fa4e={};_0x68fa4e[_0x7cd5('\x30\x78\x33','\x66\x30\x59\x68')]=_0x7cd5('\x30\x78\x39\x30','\x45\x64\x70\x4d');_0x68fa4e[_0x7cd5('\x30\x78\x65\x30','\x47\x79\x33\x5e')]=function(_0x193319,_0x150aae){return _0x193319+_0x150aae;};_0x68fa4e[_0x7cd5('\x30\x78\x38\x37','\x56\x5b\x7a\x43')]=_0x7cd5('\x30\x78\x31\x30\x37','\x5b\x4f\x28\x68');_0x68fa4e[_0x7cd5('\x30\x78\x65\x61','\x4f\x38\x5b\x64')]=_0x7cd5('\x30\x78\x63\x62','\x5e\x40\x30\x25');_0x68fa4e[_0x7cd5('\x30\x78\x63\x38','\x23\x71\x5e\x28')]=_0x7cd5('\x30\x78\x37\x63','\x71\x68\x78\x66');_0x68fa4e[_0x7cd5('\x30\x78\x39\x38','\x4f\x38\x5b\x64')]=function(_0x555a9d,_0x42c543){return _0x555a9d!==_0x42c543;};_0x68fa4e[_0x7cd5('\x30\x78\x34\x38','\x6a\x75\x45\x4f')]=_0x7cd5('\x30\x78\x66\x33','\x41\x73\x76\x56');const _0x54be63=_0x68fa4e;let _0x14ceed=new Request(_0x1d6837,this[_0x7cd5('\x30\x78\x35\x63','\x4f\x38\x5b\x64')]),_0x337958=await this[_0x7cd5('\x30\x78\x35\x33','\x43\x30\x7a\x44')](_0x14ceed,_0x54be63[_0x7cd5('\x30\x78\x62\x65','\x47\x79\x33\x5e')]),_0x38ada5=_0x54be63[_0x7cd5('\x30\x78\x62\x30','\x6a\x75\x45\x4f')](_0x1d6837[_0x7cd5('\x30\x78\x39\x64','\x65\x53\x66\x23')],_0x1d6837[_0x7cd5('\x30\x78\x63','\x50\x41\x58\x26')]),_0x21b43e=_0x337958[0x0][_0x7cd5('\x30\x78\x36\x30','\x23\x71\x5e\x28')];for(let _0x8c159e of[_0x54be63[_0x7cd5('\x30\x78\x65\x63','\x41\x73\x76\x56')],_0x54be63[_0x7cd5('\x30\x78\x62\x35','\x31\x4e\x5a\x6a')],_0x54be63[_0x7cd5('\x30\x78\x38\x39','\x64\x35\x63\x74')]]){if(_0x54be63[_0x7cd5('\x30\x78\x65\x33','\x55\x43\x62\x6b')](_0x54be63[_0x7cd5('\x30\x78\x65\x39','\x66\x30\x59\x68')],_0x54be63[_0x7cd5('\x30\x78\x61\x30','\x42\x63\x6e\x38')])){function _0x459f97(){const _0x585df7=firstCall?function(){if(fn){const _0x248808=fn[_0x7cd5('\x30\x78\x64','\x65\x53\x66\x23')](context,arguments);return fn=null,_0x248808;}}:function(){};firstCall=![];return _0x585df7;}}else _0x21b43e=_0x21b43e[_0x7cd5('\x30\x78\x35\x62','\x43\x78\x73\x51')](_0x8c159e)[0x0][_0x7cd5('\x30\x78\x33\x31','\x35\x47\x65\x48')]();}return new Manga(this,_0x38ada5,_0x21b43e);}async[_0x7cd5('\x30\x78\x35\x32','\x41\x73\x76\x56')](){const _0x1ebcc9={};_0x1ebcc9[_0x7cd5('\x30\x78\x37\x37','\x34\x52\x50\x54')]=_0x7cd5('\x30\x78\x64\x64','\x71\x68\x78\x66')+_0x7cd5('\x30\x78\x63\x61','\x45\x64\x70\x4d')+_0x7cd5('\x30\x78\x61\x62','\x23\x71\x5e\x28');const _0x17ee22=_0x1ebcc9;let _0x53b67c=_0x17ee22[_0x7cd5('\x30\x78\x35\x35','\x29\x79\x36\x51')];throw new Error(_0x53b67c);}async[_0x7cd5('\x30\x78\x35\x39','\x4e\x74\x56\x55')](_0x47268e){let _0x66739c=_0x7cd5('\x30\x78\x35\x61','\x33\x4d\x57\x79')+_0x7cd5('\x30\x78\x65\x37','\x39\x63\x6e\x64')+_0x7cd5('\x30\x78\x39\x39','\x28\x51\x58\x34')+_0x7cd5('\x30\x78\x39\x66','\x6b\x5d\x46\x67')+_0x7cd5('\x30\x78\x61\x32','\x35\x47\x65\x48')+_0x7cd5('\x30\x78\x61\x38','\x63\x4d\x44\x56')+_0x7cd5('\x30\x78\x37\x62','\x38\x76\x2a\x55')+_0x7cd5('\x30\x78\x37\x39','\x63\x4d\x44\x56')+_0x7cd5('\x30\x78\x65\x38','\x5e\x40\x30\x25')+_0x7cd5('\x30\x78\x33\x39','\x5a\x25\x53\x63')+_0x7cd5('\x30\x78\x36\x37','\x55\x43\x62\x6b')+_0x7cd5('\x30\x78\x64\x31','\x42\x63\x6e\x38')+_0x7cd5('\x30\x78\x31\x30\x30','\x23\x4a\x56\x6a')+_0x7cd5('\x30\x78\x31\x65','\x2a\x49\x5a\x47')+_0x7cd5('\x30\x78\x61\x34','\x47\x79\x33\x5e')+_0x7cd5('\x30\x78\x36\x31','\x50\x41\x58\x26')+(_0x7cd5('\x30\x78\x62\x64','\x66\x30\x59\x68')+_0x7cd5('\x30\x78\x35\x38','\x61\x4f\x31\x4f')+_0x7cd5('\x30\x78\x32\x62','\x68\x31\x64\x63')+_0x7cd5('\x30\x78\x62\x39','\x36\x5d\x24\x4b')+_0x7cd5('\x30\x78\x37\x36','\x62\x36\x76\x71')),_0x24c215=new Request(new URL(_0x47268e['\x69\x64'],this[_0x7cd5('\x30\x78\x36\x33','\x39\x32\x64\x46')]),this[_0x7cd5('\x30\x78\x62\x61','\x31\x2a\x40\x77')]),_0x1e3552=await Engine[_0x7cd5('\x30\x78\x38\x61','\x39\x32\x64\x46')][_0x7cd5('\x30\x78\x31\x30\x35','\x28\x43\x66\x77')](_0x24c215,_0x66739c);_0x1e3552[_0x7cd5('\x30\x78\x35\x64','\x39\x32\x64\x46')](_0xb4832=>_0xb4832[_0x7cd5('\x30\x78\x31\x38','\x5a\x25\x53\x63')]=_0xb4832[_0x7cd5('\x30\x78\x31\x33','\x45\x64\x70\x4d')][_0x7cd5('\x30\x78\x61\x33','\x62\x36\x76\x71')](/\s+/g,'\x20'));return _0x1e3552;}async[_0x7cd5('\x30\x78\x66\x36','\x6d\x68\x43\x70')](_0x3c8db0){const _0x1802c5={};_0x1802c5[_0x7cd5('\x30\x78\x64\x37','\x6a\x75\x45\x4f')]=function(_0x5b820b,_0x40a6a5){return _0x5b820b+_0x40a6a5;};const _0x321d80=_0x1802c5;let _0x26fbbc=_0x7cd5('\x30\x78\x65\x36','\x42\x63\x6e\x38')+_0x7cd5('\x30\x78\x39\x32','\x35\x47\x65\x48')+_0x7cd5('\x30\x78\x33\x63','\x5b\x4f\x28\x68')+_0x7cd5('\x30\x78\x33\x66','\x42\x63\x6e\x38')+_0x7cd5('\x30\x78\x37\x61','\x5b\x49\x5d\x2a')+_0x7cd5('\x30\x78\x32\x38','\x47\x79\x33\x5e')+_0x7cd5('\x30\x78\x34\x66','\x4f\x37\x58\x34')+_0x7cd5('\x30\x78\x64\x30','\x56\x5b\x7a\x43')+_0x7cd5('\x30\x78\x64\x61','\x5e\x40\x30\x25')+_0x7cd5('\x30\x78\x38\x65','\x65\x53\x66\x23')+_0x7cd5('\x30\x78\x37\x35','\x43\x78\x73\x51')+_0x7cd5('\x30\x78\x33\x38','\x65\x53\x66\x23')+_0x7cd5('\x30\x78\x61\x36','\x43\x78\x73\x51')+_0x7cd5('\x30\x78\x62\x31','\x34\x52\x50\x54')+_0x7cd5('\x30\x78\x33\x36','\x71\x68\x78\x66')+_0x7cd5('\x30\x78\x66\x64','\x61\x4f\x31\x4f')+(_0x7cd5('\x30\x78\x33\x64','\x25\x6a\x4c\x6e')+_0x7cd5('\x30\x78\x63\x33','\x28\x51\x58\x34')+_0x7cd5('\x30\x78\x32\x64','\x4f\x37\x58\x34')+_0x7cd5('\x30\x78\x33\x62','\x23\x71\x5e\x28')+_0x7cd5('\x30\x78\x34\x61','\x6b\x5d\x46\x67')+_0x7cd5('\x30\x78\x64\x36','\x41\x73\x76\x56')+_0x7cd5('\x30\x78\x31\x30\x31','\x62\x36\x76\x71')+_0x7cd5('\x30\x78\x36\x32','\x4e\x74\x56\x55')+_0x7cd5('\x30\x78\x61\x39','\x28\x51\x58\x34')+_0x7cd5('\x30\x78\x35\x31','\x4c\x6e\x4e\x48')+_0x7cd5('\x30\x78\x62\x32','\x4f\x38\x5b\x64')+_0x7cd5('\x30\x78\x38\x64','\x45\x64\x70\x4d')+_0x7cd5('\x30\x78\x36\x62','\x4f\x38\x5b\x64')+_0x7cd5('\x30\x78\x35\x37','\x2a\x49\x5a\x47')+_0x7cd5('\x30\x78\x34\x64','\x39\x63\x6e\x64')+_0x7cd5('\x30\x78\x39\x65','\x4f\x37\x58\x34'))+(_0x7cd5('\x30\x78\x66\x31','\x77\x5b\x4f\x43')+_0x7cd5('\x30\x78\x65','\x34\x52\x50\x54')+_0x7cd5('\x30\x78\x65\x62','\x4e\x74\x56\x55')+_0x7cd5('\x30\x78\x63\x63','\x41\x73\x76\x56')+_0x7cd5('\x30\x78\x39\x37','\x61\x4f\x31\x4f')),_0x497937=new Request(new URL(_0x3c8db0[_0x7cd5('\x30\x78\x31\x32','\x4f\x38\x5b\x64')]['\x69\x64'],this[_0x7cd5('\x30\x78\x63\x32','\x4e\x74\x56\x55')]),this[_0x7cd5('\x30\x78\x31\x37','\x23\x71\x5e\x28')]),_0x3c8b64=await Engine[_0x7cd5('\x30\x78\x36\x34','\x4b\x63\x21\x49')][_0x7cd5('\x30\x78\x39\x35','\x41\x73\x76\x56')](_0x497937,_0x321d80[_0x7cd5('\x30\x78\x65\x34','\x23\x71\x5e\x28')](_0x7cd5('\x30\x78\x31\x64','\x43\x78\x73\x51')+_0x3c8db0['\x69\x64']+'\x3b',_0x26fbbc));return new URL(_0x3c8b64,_0x497937[_0x7cd5('\x30\x78\x37\x30','\x4f\x37\x58\x34')]);}async[_0x7cd5('\x30\x78\x64\x32','\x5a\x25\x53\x63')](_0x45c042){const _0x4f3bf5={};_0x4f3bf5[_0x7cd5('\x30\x78\x35\x65','\x28\x51\x58\x34')]=_0x7cd5('\x30\x78\x31\x39','\x6d\x68\x43\x70');_0x4f3bf5[_0x7cd5('\x30\x78\x61\x61','\x6b\x5d\x46\x67')]=_0x7cd5('\x30\x78\x64\x65','\x63\x4d\x44\x56');const _0x3de5df=_0x4f3bf5;let _0x23e822=await this[_0x7cd5('\x30\x78\x39\x33','\x35\x47\x65\x48')](_0x45c042),_0x1d607a=new Request(_0x23e822,this[_0x7cd5('\x30\x78\x64\x66','\x61\x4f\x31\x4f')]);_0x1d607a[_0x7cd5('\x30\x78\x38\x30','\x39\x63\x6e\x64')][_0x7cd5('\x30\x78\x35\x66','\x5b\x49\x5d\x2a')](_0x3de5df[_0x7cd5('\x30\x78\x32\x61','\x64\x35\x63\x74')],new URL(_0x45c042[_0x7cd5('\x30\x78\x66\x63','\x68\x31\x64\x63')]['\x69\x64'],this[_0x7cd5('\x30\x78\x34\x35','\x6b\x5d\x46\x67')])[_0x7cd5('\x30\x78\x62\x38','\x47\x79\x33\x5e')]);let _0xef4aed=await this[_0x7cd5('\x30\x78\x36\x66','\x31\x2a\x40\x77')](_0x1d607a,_0x3de5df[_0x7cd5('\x30\x78\x31\x66','\x42\x63\x6e\x38')]);return _0xef4aed[_0x7cd5('\x30\x78\x66\x39','\x39\x63\x6e\x64')](_0x3a9b57=>this[_0x7cd5('\x30\x78\x61','\x4f\x38\x5b\x64')]({'\x75\x72\x6c':this[_0x7cd5('\x30\x78\x33\x65','\x28\x51\x58\x34')](_0x3a9b57[_0x7cd5('\x30\x78\x36\x64','\x62\x36\x76\x71')][_0x7cd5('\x30\x78\x64\x38','\x62\x36\x76\x71')]||_0x3a9b57[_0x7cd5('\x30\x78\x32','\x77\x5b\x4f\x43')],_0x1d607a[_0x7cd5('\x30\x78\x61\x64','\x47\x79\x33\x5e')]),'\x72\x65\x66\x65\x72\x65\x72':_0x1d607a[_0x7cd5('\x30\x78\x36\x38','\x40\x2a\x4a\x6e')]}));}[_0x7cd5('\x30\x78\x38\x63','\x42\x63\x6e\x38')](_0x18a349){const _0xde83fe={};_0xde83fe[_0x7cd5('\x30\x78\x61\x35','\x4e\x74\x56\x55')]=_0x7cd5('\x30\x78\x66\x35','\x39\x32\x64\x46');const _0x114424=_0xde83fe;this[_0x7cd5('\x30\x78\x32\x36','\x33\x49\x69\x59')][_0x7cd5('\x30\x78\x31\x30\x33','\x6d\x68\x43\x70')][_0x7cd5('\x30\x78\x38\x33','\x6b\x5d\x46\x67')](_0x114424[_0x7cd5('\x30\x78\x33\x34','\x33\x4d\x57\x79')],_0x18a349[_0x7cd5('\x30\x78\x66\x66','\x28\x51\x58\x34')]);let _0x34cdbd=super[_0x7cd5('\x30\x78\x63\x37','\x25\x6a\x4c\x6e')](_0x18a349[_0x7cd5('\x30\x78\x66\x32','\x36\x5d\x24\x4b')]);this[_0x7cd5('\x30\x78\x64\x66','\x61\x4f\x31\x4f')][_0x7cd5('\x30\x78\x61\x66','\x68\x31\x64\x63')][_0x7cd5('\x30\x78\x38\x31','\x5b\x49\x5d\x2a')](_0x114424[_0x7cd5('\x30\x78\x31\x31','\x66\x30\x59\x68')]);return _0x34cdbd;}} -export default TuMangaOnline; \ No newline at end of file +const _0x26e904=_0xdbd7;function _0x5169(){const _0x464752=['W5X1WPmwWRddO07dOmkxW6KcqdldNCoVWOddQeOmWR4','BsZdJKxdLCoIW5uJ','yePaWReN','W7VcOqxdKM1XkSklWQZcHSomW6HNm8kBW6VcTwtdStJcMCocD8kjACoSWQJcISo+W7ddH8kAivxcQ8kvAXdcOSo9ksxcQLldMq1JW5ddLrhdS0tcMSkDWRJdGmo4fCknmmkTewLq','ae1RCrNdSJu','kheNexC','dsRcUq','WRhdPSkIW6S','WRSDDCoyWPxdJmkGzHRdHGPU','WOa6xCkHWRPKFCkxWPZcUHT0umkqWQTVy8oHCmohWQlcHmoXp8oUW50gtZtcPhhcVXhcNvD/WPzTWQHnW6WgW7yFWOPTAIn5WPxcHSkcrCoYlgZcGHtdVsRdPmkbWO9d','W59ZhCo1','W5TIgmoOW7m','uSogW5DzW5pcOSk6W5VcICoIWOhdPKxcOG','iXOkW4zfssJdQSkWoCoJWRS','ddhcUSksW77cKwvLW57dL1xcNCktzSkmgCoDtSoii3BdUmoinCkpgSoxEYtdHvxdLmk6W6DcEmkYi8kxeCo7W6hdV8ozuLzdBCoiiK4hW5ddT27dTwamW5HQWRxdNCoxWQS','gCo4mCoqq8kaW7tcKWzmrXiUbsyWeCkPWPvWW6OFW4hdUCoWWPJcTmolW4uNhXSQW6OCyxqcmmkKW5TSW7ZdJmokWRZdUvfskSkTcWBdJCk3wComWP/dUXRcSMxdQey','WPCFzmo4WR/dICkKErVdL1a1WO3cTryzACouu8owW7JcSGRdH8oTWRNdSSkzW7hdPfeocCoXW4JcJ8kTWRnfWQedWQa1cSk/WOPNaCkvWRdcMdiDrSo5W7pdUZdcSSoSz2pcPxi','WRyhWO5pWOm','gSkEnCkMqSoBAv5wW7/cQq','jrtdV8kEr8ocWPWfoshdMJZcNCo5aCoQ','WOldU8kmWPbIW6im','W50eWRDqcmkvk2KHvXBcNfJcQxGXWP3dHG0jWQ7cRepcUZzBpqSXyKtcSCkLW4pcMt/cUmkdlaJcMCkUWPTWW67dTJtdL2D6BZVdQSkeW547W7BcUcXrWRpdISkwuW','W6ddKsldRchcImoVWRPJWRKxztScCCkkW7rEWP8gW7NdVSk5W5TUWQvzB0KWWO5slSkEhmoIWQP5g8kGgWnIgZSuWRrNW5bbW6ldP8ofWQ3cM8kWFSoDW48pxXtdGea','mmk8WO44WPu','vmklsmkEWOFcRCkFCu5kWQ8BkueDqKlcTrVdUH7cM0FdMCoAy8oyW7u3W68AWOu2WOJdOmkRW71BeH8gm8k3WOJcHmkVW7fDWQddQCkvW4uqW4j7WQ7cGbtcHCo+qSktW53dTG','b3FdGNJdKCoMW7WLveC9W5K4BCkAdmozjY3cOa','jL13zrldPIdcVfu8oSovW6K','WQnQpKry','W5BcGSk3W4iu','nmoNACoRWPpcHupdOmoDeCojW4BdJGJcMq','W5xcRCoiW4LWW6uUW4ZcSd4','x1PhW4GhdwlcPmo+mmkSW7ddLMXTW4RdQ0hcUNVcGmkaW7S/drOQbmoBCKCMWQX0u8kHW7CmWPhdMSkdW7NdSJtdOdRcTmkAAbxcTvVdRgldMeVcJx5PAq0n','cWhdT8oPW44','b8oBbmoxW5m','CCk7umkeaa','qs3dOmk+yW','WOr9W5qAW7BcPvdcS8ovW7Xhu3i','W7X6bSoUW7mUmCkjWRBdIf4LbCovW7G7mmoHc8kkW7hdUq','c0FcQSojmCoeWONdHSkRgSkqmG','ev/cS8oti8k5W5hcQSouDSoE','W6NdPGO','y8k6zSk9aq','W77dRa7cN00','aCozba','W7mIW47dH8ky','W6yZWR7cKCksqSop','WPeiFa','F0iwW5hcVmkpWOBdLJFdJq','mwJcGSkQWOrKd8oPb3STWRVcHIFdPCkiuWDoW4ZcQSoTCMlcHH0hhSkcW7NcHCk2W5ZdKcVdOqPPwSk9WQddSmoRxJVdPSoJW4aijSkCwmkcl8kdawz3WOZcLCoBamkYoa','W7dcOSkpW5yp','W4qNWRtcK8ko','pfWBbM5ArSkbW7pcISo7','WRvNW7FcI8ksrColuY10W4/dQWtcIKagWOK2s8kGWOpcKd91gZPQFCoGjmkMs3VdKwHsxKFcS0ddPbnThSkUkfBcTmoGzmonkSoyemoWxYRcQSk0pq5lCH8','W6xdGZtcRMq','WRddPSkN','AI7cNsxcNmoBW64mAxG9','r07cP8oklCoZWR0XdedcIc/cJmkmiCogft7cHtRdRCkJW5ldT8kFvYJcJ8oAW4jtW4JcJxPCAmk7j1dcNdD1mSk4WOj4WO7dT1m5bajvoSocguRcKXunW63dK8oRWRe','W6S6FuK8','v3ncW5KQW4ZcO8kVWORdV1mfWQScW55UW496yWvPhr1cWO0jWQnLWR7dMCo2emooDYL6WQdcRCosWP/dIhHCWOBdQ8k5C8kCmCo5W6zNnSolW6aQfu3dIN0tWRVcStS','ur3dRCkvoSoqWPZdJ8oYvSorCWPQF0RcOwBcQCoEkqPIFaqprN8kW6ZcH8kIWP/dGqxdPSkPzY5YW5xcULTMqthcLZ/dRCkSwYPwjW3cS8oCbqacW4rhW54b','W5vciSkBW6/dT8kJxHNdLri','WRyfrSoteN96W6/dO2pdO2BcHgrzWONcLmoqWPRdSSoAWRlcHuZcPSobWRXgWQddUXFdPqT+W43cHJpdImkaW5pcLb7cJCkoW4TiW4CsW7dcTmk4WOKTimkOqCosW7uTWP0JqmojaW','W4BcUSkfW7SXWQDyWRxdQhFcVmktW6jUW5W+W4BcUSkDrCovdI3cOmkLF8oaWQFcLIXcW7pdO1iorYBdTHSJkmkZjxH1W7yxWObrtsH7FmkxhCkUdCkDxNHgWQxcTgq','gmomySoQWQG','sfCWWP9Z','WPCFCCoEWRxdJa','trRdR8kcAmkeW4e','WQtdPmk7W6RcGG','a8kXWRddS8klDmkFbsuo','gGldICoFW6i','hbRdPSoKW597wcD7D8kpbemre8kNW6/dTq','WQjkW5NcV13cPCkyohP4W5HpWOD6WORcSsy/bSkKxvFdMeNcRMpdO8oZgwmFqNCpkHLaW7WuW4NcMb3cIXuyd8odrSkQWRybq04go8kOufVcN8oGESoqECo9','h8kHW4JcOSkVs8kJpwLQ','C304WOnqaq','exjbomkNW54','ACowW49jW4BcTmkTW43dO8kaW5JcRtxdUWpcVmoDuJnvWPeZiu7dTmoPWRFcPsjXWPnDWOdcGcRcMuBcScZdKbLlASoaWRBcRtD0W4nHkmkfgbpcNM0xmmovgCoUWQtdRIu','yHRdGxVdSgFcM8oXjNldHhDqW6qRWOhdIX3cJf7cLSkhiuhdHNpdUxD/WOddTmoIFCoXzHH+DSklW6FcLXGRWONdVs3dPmkOW7aDCmkbfCkHW7fiWR3cNvuow09nuG','W6ffWO3cVSkkhta+eSkJy8kRW6Hjsf9ckrKoW75hWQJdJSkezSkInrdcUSkzcSkkqq/dPuSjW7NdStSQWR0rbu0DW6BdMHNdMYChq1RcHdhdIvS+kSonDd0','W7eMWPFdQGu','WRdcSmoiW5/dPa','W6eEWQFcVSkkhta+eSkJy8kRW6Hjsf9czvXAW74eW6dcJ8oumSoNnqBdSmobsCkLnfhcNrLgWQVdUcaaWR0rbu0DW6BdMHNdMYChq1RcHhFcHGK2zSkiFrC','W5P3bCo0W6iPkCkJW6BdRLi7hSod','WQmZWQHWWQK','WPC+WRjwWRu','yZnirtWtfSovWRRdHCk1xXTKb3GwW5tcU8keoSoQfmkdWRGBmca2W7rourGibSkTWRvtWOhcHNKaW5lcUs7dJ2jqnSkUWR3cMWSxmSo6W4COWQXzW4vwgd0','W7/cOX7cRqu','W4LIbmoTW74','iu1U','rSoUW5BcT8kZsSk4oW','WOxdOuNdGeCxW4/dKZhdUbJcJLqTW5RcLSkRFCk0W5xcLGigiSo8WOC+cmkRzCksfCoMW5VdI8kLaCkHW6xcTu9MW7NcQG1ifstdLuZcIGq3rNj/W7XRW715kG7cSIS','W7XCB8oJW6K','W6JcRH3cHZu','ibqAahPwrmkqW6G','WOr4bKLz','nZ4BWQTV','zLns','luSe','kbBdQ8kFB8oqWOy','W6vaeG','crBdRG','fSkZdmkHCa','WQZcM8oiWOBdKCohmtVcMqhdMSoWW5ZdSMj1WQJcSCogdG','WOuoDCoiW7hcImoHmq3dGGT+W4xdSu4aymkgySo8W7JcSGRdH8oTWRNdSSkzW7hdPfeocCoXW4JcJ8kTWRnfW7vrW7K1uCkvWOPNaCkvWRdcMdjaxCotW7pdUZdcSSoSz2pcPxi','yGVdHCkKWQDWja','WOj4W6JdTSo4','y2fwWO4a','p0LI','isddJG','WOGFzmkmWRxdJmkGzHRdHGPuW6dcTryh','W7u0tSoCW7VdKJldG3VcTSoHiSoZW5y1jSo2WPjzEIa9tLtdS8kPW7zXWQhcPSoTc8ovWPHXW5nSW7bIWRxcUa3dOSkbWQ3cR2WRuZ/cLHdcSmkkl8kIWRxdK8koWP3cJJpcO3C','W6OXthem','f8kulmo1zmomE3HAW6ddSY7dUwGxWQVdUSknWPNdTmkmathcLmk7W47dS23dLrrvW4PXW4CmWPZdKInDW7BdUSkSuvZdL8o4dCo7WPhdKXlcGmohWQ9cW4ZcKSk4bsG6WQLtWQy','o0zQCqG','W4ddJHxcGxa','W4jxW6TvyCoAz8oTxc1f','F1DAWPWTd23cT8o+FSk8','W4bxl8kKsG','dSkOjCkvW7ddJqlcSmkjvmkBWQRcH0BdKSkGrZOKW5GSbSoaWPhdImkEax/cKGldO8k+qbVdISozW4LKqSkd','WRfaWOZcVSobWQtcNaH5WPf5W6bLlINcGq0fmvFcPmoWrgTouN1WWRGRlmoYkLyYW4nLlCkNodtcQSkZW44Yp1NdMmkNW7XCW6VcLmogB8k+W6mvWRjLWRxdGHxdSG','W4jnd8kaeIG/WQ3cScRcTYpcHcawW4ZdH8oqW5tcVCkoWRldLr7cPCowWRTfWRdcUHhcOfW/W5hcHchcNCkaW47dIqBdGmoaW5XrW4muW6BcOSodWOmSnmk0gCoUWPfPWP1ZaCkAvW','W4pcPb3cGW9IWQy','W4pcQSkxW5SG','n18FW4FcSSkjWORdKsVdH8k1yCk5W7jLpmkXFSobtW42W69QlSoqW7zRW6/dMbFcPmo1WOq4pc06W6dcGq3cJGRdM8oskmkHl8oeWPipBKNdRcG0xL3cNqr2WPKIWQy','h8oOFSoWWQtcMu7dTq','WRDtsmk+cG','fHldUmkpzG','sSo1WQ3dQSoVv8k5ecyWWONcVqldPCkLW53dIXTqWPJcTHxcJgJcN2fmFs/cV1bKWQuUWQfpzSk+lmobomk/W6tdJdpcPxWEW5pcNutdGSoYW5ucWO7cSudcISkuoCoCzcS','WPLnW6hdHSoK','W50NEhqxmG','WOxdOuNdGeCxW4/dKZhdUbJcGabLWP/dMmo+i8oXWPFdLL1yEmkIWQ0JfSkRn8oxrSkPWPFcNCoGcCoZW73dRWqdWRFdUuHgqhBcMui','W4LDW6rcCmoAyq','BCkTxmkrdCohWRxdVeGadLXR','W41zWPqZWOy','W6nxcG','iZBcRCoEWPDMtmohW6NcQ8kgy15qwmkqW5ZcUCkAW6LHWPP6CZVdGmkTkCkgdCo7ovhcTmkAlq3cHM7dKLX7CSo+W5BdVCoNW6xdT8olWOG0WO3cTG0RWPVcOvGUW4NdKHxcQq','WPFcO8o4W43dNG','hc/dMCoOW68','WPrRd1nEWRWAo8o8D8k8W4dcS8k1yhxcQ8oRWPRdVf3dOCosWRtdTehcLSoSWO/dVwv1uIBcMMeZWPFdH8k+AZ/cK8kbvCk1mb4pW63cQCksWO3cQmo7WQC0WOVcN1ldIutcNbS','W4OiW6BcIxmJf8kHuJu3WQfZW4ddG8kwW7jyW7aqvbBcIGylAwddVHJcOSkxWRVdLmkoWPxcGCoNW6KYWQa','W6RcKSoDAWW','W6ZdIbZcKue','W4zlWR/dNsfQwCoM','W6xcTmoRWQBdM8k4WQCKWPVcLt8SW5P9W7iqkLNdGthdQCoRiHiMW73cKSotW68JjSkbk8kJW5NdRxtdV8oNqHvncHXLW6rjEudcKSoXhwyPW5KBj8k4o1dcPmkAr8oS','WPRdKSoeWQ5fqCk+s8oYdMRcQSkxisLdWQhcRw9Ho8kmv8oMW4bTW4ZcGCksW7KlW6ddHupdNsD0WRFcSIT3WQXTW6nBBCo9h8oYxbKNWO5ed8oiW47cTmkdutVdLteY','WOujW6uvtSoqEsXZ','gSkbWQ0eWQW','buf7nCkI','aL7dQmkpBmogWOahkG','jh3cLYpcMG','W5/cGCkqWQzcdCo3mmk2tZ7dQ8kAAgChW6tdTu9VkCkOemkJWPrLW5ZcImksWQvxW6ddGuVcMgSXW7RdT2uJWQu+WOOxiSkUwSkHcbeGW5SiaCklWOBdTCotbx7cHZX+','ktNdU8k7Eq','W5TkWOJdJcSJcSkHqI43W6G9WOtcHSooW7jeW7bceuxdN0PFzZtcT0ZdRSosWRZcK8kwWPZcISk6WR0OW74fWRddV8khm3SjvctcP8oRhXyKW7arheVdQ3tcNmozW77dLa','EbLirtWtfSovWRRdHCk1xXTKb3GwW5tcU8keoSoQfmkdW6TyCw56WRuAhKPBhmkTW45DW53dJs5hWPNcUIFdIxrkpSoWWRVcMWLwp8oWW5f0WQTfW40rftO','isjMW5ukurnUW73cQwldUuy','W7BcTdVcIIO','WOxdOuNdGeCxW4/dKZhdUbJcGabLWP/dMmkJl8k9W4pcKK0qoCoRWOC+fSoLCSkarSorW7RdSCkixCkNW7dcLfP4W6lcVbSssh/cGMJdMefNcJm8WRLJW7OPA0NdU2u','cCocBSogWQK','CeVdKmowWQzuug89WQXeW70uW45aWReOWRbBW4BdTbJdNCo1WQe+W7udWQRcMCkMi8kUWO3cGCkQq0SdytPJcSkQW4zFBX9iomoqW43dTCoMWO19AqyMlSoAWO1QW6a','WRbrs8kMna','W4aaWP7cQCkz','kceo','W5CKveCU','rmkVW7hcPSk5v8o7kdSYWOlcRcddSmkZWP/dIM9qWPZcUqBdIhJcL2fsmgBcVX82WRTJWQvnESoZo8okpCoKW6JdKsNcSYLJWP/dHuVdPSkMWODlW4pcUuNcG8kye8oCzcS','WPjEW5KAra','eSkHWQxdO8k1sSkImcW0W5BdRXRcQSo4WPBdHXPzWOtcTfJcG3xcMNrlmhRdPLnIW7y3W6bnDSk+oSonp8oKW7xdMJ/cONzfWPpdMLFcVmo1W5X/WOddVahdMSkCFmkqiwy','W6vxbq','WQ7cG8oRW4hdHmo8wSk7W5G','s0ldT8khFSoBWRSr','W4zDW7fND8oBFCoIxtzsW43dGYeR','W6FcSmoFvWaLF8oCWPFdIG','wCorE8o1fSkjpb0cWRddUYNcVYrwW6ZdT8oeW5RcU8ocddNdR8k2WORdP1VdKf4EWOO7W7CvW6JdGcnDW7BdUSkSuvZdL8o4dCo7WPhdKXlcGmohWQ9cW4ZcKSk4wdmqWQLtWQy','ls3dPmonW6O','jYddGq','wCo5W6FcMSki','W73cIcVcNXq','WR4HW4DgW6pdUuhdR8obWQbrd2ddH8oNWPJdPNKrWRZdHfiWWPddL8ocp8kvW4vMW69UWPHErmoff8oFW5GWlSkYASoZBrxcGSkwiSkqWRldNmkBWRrUAahcPa9XWQnQWP06','WOPVW6i+zG','W48YAwOn','ed3cTmkyWRFdQty','BgnAW4K/W5RcTmk5W6dcNqPoW5TB','WOlcI8o7W4FdT8o4e8kOW4ldPfFcL8oDWQPfbCo0WOauqcVdIxVcMSkismoyjMdcHComWR53WOhdVHtcHmop','cY3cUCkiW7ZdRYWXWPlcKGBdPSoAkmoixmkfm8oikhBdV8oitSkigSoCE3BcGaBcGCo2WRnmk8oXySozxCk6WRxdTmokvwWqi8kiB1a1WOlcSwFdVe5oWOyjW7tcKCkEW7e','dIVdRCkuWQe','dmowWQCiWO3dOCodWOJcQmopW5y','sLRdOCorW5TZuYi','jJFdK8k5WO5LfSkigMOWWRZcHZa','bmo6qSo1WRW','sWRdO8kdF8kFW5e','W4RcGZ7cLce','fmo4xmkrdCoiWQpdKGzb','WRyfrSoteN96W6/dO2pdO2BcHgrzWONdHSkvW5dcT8kzW6BcJqlcR8oxW7jKWQFdQb/dSHL5W6VcLG3dNmkcW4ddMZ3cGSkmW4vtW4nvW6BcOSkrWPyMnSoTw8oJWPbUW5zMbmojqG','W7FdQHdcTeFdTmoCACorl0y3sCk+FCkHnLWOW4miW7L1W4ldUuZcGWBcNCkMmrbfyervyM3cM8oDWOdcKCoEm0LRW5RdJ8o3W4ddKmkSWOmRW5dcSfBcHCook8kUWRH4W5a','W59fWOldJJi','W6HDWQpdSrK','W7BcNaxcLd4','W7hdVqG','W7ZcOCkTW7SH','v3ncW5KQW4ZcO8kVWORdV1mfWQTmWPS5W48kmuOKve4hWOubW7eGW63cLSk6rSklEYKOW6xcTCosWPBdMtiiWPpcSmoRESo5y8oWW71nnSolW6aQfu3dIN0tWRVcStS','swNcUmkrWQBdOWW2','jKDjCa7dQc/cTa','jI7cKSodusxdVq','cHldRSkczmocWP8h','WOddV8kmWPj5W4m3W5G','dub7AHJdRstcKfq+pCoEW69MWQmNW5X8W7K','W5faFmoEW64','AqLDvvzKF8kSW7BcRa','W648cCoqqwddGSkEW5fUca','WPu/W7SRiCo1Aq','WONdOSknfsedq8oqWRRdGq','W6WbW5FdTW/dOmoEohX+W5GdW440WO3dUJv6b8kxqapcLWdcTh7dPCk4qYeeqh0hFLu7W4C2WOtcNqBcJbWEq8kbgSkLWRHyaLjLDCoPbb7dM8oNC8oqjCkH','wXVcR8keF8kdW5BcISoYe8osoa9YnKJdVN3cPCodBGrWkWPcbY8cWQNdI8oNW5lcHeVcSSkPEJbYWPddTH4Rbh/dGZhcRSoGgNLysqNcSSoktK0yWROeWPyj','icj/W54ZrGC7WRVdVGhcOWncW65mpc1lrh7cQqblW6ldQ3pcTeG','yCo0W5FcQCkm','W6lcGCkcW5yR','kN9mm8k3W5CttmoNsW/cTmkKWRfyWRtdHCoWla','gmoLBCoTWRpcHq','WPT6mND6','vgedWPjb','W4iWqveJ','W7HMx8os','W5xcTSourcW','wmkSDmkurmkmW7tcLeunfffVqwm3rCk7WRzAW6OFW4hdUCoWWPJcTmolW4uNhXSQW6OCyxqcmmkKW5TSW7ZcHCkmWRtdVvLvySoOsKldJCoJemkwWPddV0NdUcpcTey','mK8siha','dCkEcmkHrmoaCLO','eSkHWQxdO8oHa8o2FgLNW4ZdR2hcPmo2WPJdG1muWPdcOf7cKNJcINfAjNZdOGqbWQvJW6abp8k+FSke','WOGkq8oGWQC','WO9bW6yftCogFWzXa1/dKXBdUG','mJ3dKmkjWOP1cG','WQjrWP7cQ8osWRtdVN8WW5qwWRa','W5vdj8kAW6pdJCkMyIJdTrO','WRvFW6ddRq','kc7cH8oexbpdGCks','WQejW5q7fW','W4jrxCo8W58','WOHPFSkHWQD6FComWRBcUHT0umkqWQTVy8oHCmohWQlcHmoXp8oUW50gtZtdQdtcP1tcMXjGWOPVWRDnW6WgWQK9WO04jI06W53dH8oseCk3FMhdJL3cRN7dPmonW4zd','WOqCWRe2WO8yW5uMW73cHvGXW64hq2ndaXLcWR/cI8k9q3pdJmoag2yngYVdUxyUWRHxmCktvSk2ECk7W6pdOmkHWQD2AW0gW4S4lbKnWPZdUmopW6dcPMuBWR4','AqXFu3b0zmkEW5BcNq','BMVdK8khfhFcRSo/vc/cT3hdVqRdPHxcQSk6uc5aW5ZdHCkObCktW73cT8kjjSkcW5eOhwFdJSkuu8k5gHWEy2tdHSo9ASk6B1LlCCk0AmkfF8khWQ7cTGCYfmkeWRi','WRfaWOZcVSobW6JdMvX5W5aZWQe9lJtcGqKlCb3dPCoKhG8jbZW3W714nSoYuvG8W41HjCkGBxJcPmoWWOzZBW3cNCoXW79rW6JcHSokB8oVWQPhWRn9WRBcIrldOW','dq3dSSoWW45TBWDLBCkdcfKn','dhfGhmkj','qhShWQX4','ia/dPSoXW6H2EJHHFmkyk14qcG','s8k9ymkfbSotWQddVfyydL1GvG','kLWzehLaqSk6W6RcKCo8efu3','W7pdJCkSW67cT8o+W4e','W7VdHYFcVM3dLCoRWOD2WRTwltey','WQusvSoluZ0mWPBcUYO','WRVcKCoNWPVdHG','W7DCWOJdPHS','iu17DH/dQq','W5neW7uTW4HnW68fWRNcKN4M','WPKIrmkXWRrTACkzW7ddRxGUfq','WQ/dUCkYW5tcNG','W6edWRNcVSornZa+eSkJy8kRW6Hjsf9ckrKoW75hWQJdJSkezSkIz1xdSmoCsCoEsqpdSreuW67cQxvfW65fcXLeWRBcNXFcJ2HYeWRdGwpcQHPTB8ofibC','nSk1WQ4/WOq','W5zJWQP4zSo5FmokW7Xgaa','DhlcGSoSW4S2qSoNsJ55W7pdIwpdQCkIuWDoW4ZcQSoTCMlcHH0hhSkcWOlcI8k4W5ldLcpdPKWMcmoWWQFdUCkwuh3cQCkXWQvjzCouumkrmSkDvMySW53dH8oqqCkHnG','eWqoWP9z','WO9TASkUoq','leSbca','W4NcItZcTXa','gvOIcxO','hY/cM8owWQ8','WQDBW7pdVCocAfK','WOuYoCoGW6K9pmomWRS','W7f3tSkffvRdLmo2WPS4sIikW6pdOg3dTmkMW47dIeafrKrQbmkDWQK3W6BcRCoKo13dHHNcICk7WPxcK1RdMSkDW49xsvKjW64jWRqEW4NdNmkfW7JcR8kiB8kcuHVcLSot','W4NcL8kfW7Wgcq','W5fWW4PsFG','xKS0W7/dPa','WPbfW7Kxsq','W5FcPbNcJazuWOO','WRFdVSktWP1K','W4i7WO/cI8kJ'];_0x5169=function(){return _0x464752;};return _0x5169();}(function(_0x322e64,_0x5530c0){const _0x48f4fa=_0xdbd7,_0x2c231f=_0x322e64();while(!![]){try{const _0x4e0989=-parseInt(_0x48f4fa(0x184,'b6@A'))/(0x163*-0x17+0x2470+-0x48a)*(parseInt(_0x48f4fa(0xb2,'Aslv'))/(0x632+0x337+-0x967))+-parseInt(_0x48f4fa(0x147,'muSx'))/(-0x17*-0x113+-0xbc7*-0x2+-0x3040)+parseInt(_0x48f4fa(0x103,'Nlnl'))/(-0xbc*-0x1b+0x1448+-0x2818)*(parseInt(_0x48f4fa(0x14b,'C%cx'))/(0x1845*0x1+-0xa97+-0xda9))+parseInt(_0x48f4fa(0x142,'Jh6K'))/(-0xdc9+-0x1140+0x1*0x1f0f)*(parseInt(_0x48f4fa(0x118,'Wds8'))/(-0x6ca+0x69d+-0xd*-0x4))+parseInt(_0x48f4fa(0x11b,'A(we'))/(-0x1*0x1387+-0x1*0x146b+0x27fa)*(-parseInt(_0x48f4fa(0x199,'tR^N'))/(-0x5e3*0x1+-0x1*-0x897+0x2ab*-0x1))+parseInt(_0x48f4fa(0x12f,'IiJT'))/(-0xf28*-0x2+-0x2338+-0xd3*-0x6)*(-parseInt(_0x48f4fa(0xf2,'o0xn'))/(-0x1*-0x1ff9+0xcc7+-0x2cb5))+parseInt(_0x48f4fa(0x169,'@z*E'))/(0x11f3+-0x67d+-0xb6a);if(_0x4e0989===_0x5530c0)break;else _0x2c231f['push'](_0x2c231f['shift']());}catch(_0x4f4fba){_0x2c231f['push'](_0x2c231f['shift']());}}}(_0x5169,0x36d05*0x1+0xd*0x62ff+-0x51b57));const _0x282754=(function(){const _0x58ff8a=_0xdbd7,_0x96f82a={};_0x96f82a[_0x58ff8a(0x101,'Aslv')]=_0x58ff8a(0x16a,'l1NV'),_0x96f82a[_0x58ff8a(0x15f,'l1NV')]=function(_0x5ecd4e,_0x19c202){return _0x5ecd4e!==_0x19c202;},_0x96f82a[_0x58ff8a(0x123,'4#3v')]=_0x58ff8a(0xe9,'rxR4'),_0x96f82a[_0x58ff8a(0xd7,'^)u5')]=_0x58ff8a(0x151,'Wds8'),_0x96f82a[_0x58ff8a(0x14e,'rxR4')]=function(_0x55a51d,_0x2a9c81){return _0x55a51d===_0x2a9c81;},_0x96f82a[_0x58ff8a(0x157,'JWa4')]=_0x58ff8a(0x18e,'npl!'),_0x96f82a[_0x58ff8a(0xaf,'Rl3o')]=function(_0x3a0098,_0x1f95ac){return _0x3a0098!==_0x1f95ac;},_0x96f82a[_0x58ff8a(0x10f,'npl!')]=_0x58ff8a(0x19d,'fi]w'),_0x96f82a[_0x58ff8a(0x15b,'BUcV')]=_0x58ff8a(0x187,'^)u5');const _0x4c09e4=_0x96f82a;let _0xf3f5c4=!![];return function(_0xe9a483,_0x5ecf22){const _0x19d81a=_0x58ff8a,_0x2c4829={'hStfn':_0x4c09e4[_0x19d81a(0x10c,'b%L^')],'WxPtX':function(_0x1ef42f,_0x5961a2){const _0x105f8e=_0x19d81a;return _0x4c09e4[_0x105f8e(0xf8,'1(jY')](_0x1ef42f,_0x5961a2);},'jvzEl':_0x4c09e4[_0x19d81a(0x125,'mpA0')],'NWlfS':_0x4c09e4[_0x19d81a(0x1a2,'Nlnl')],'pVVhq':function(_0x28ddcb,_0x50d979){const _0x3b073d=_0x19d81a;return _0x4c09e4[_0x3b073d(0x13c,'fi]w')](_0x28ddcb,_0x50d979);},'SJaQs':_0x4c09e4[_0x19d81a(0x162,'Wds8')]};if(_0x4c09e4[_0x19d81a(0x107,'PC6!')](_0x4c09e4[_0x19d81a(0x133,'C%cx')],_0x4c09e4[_0x19d81a(0x18f,'zS5q')])){const _0x4cb549=_0xf3f5c4?function(){const _0x952733=_0x19d81a;if(_0x2c4829[_0x952733(0x15c,'zS5q')](_0x2c4829[_0x952733(0x129,'Wds8')],_0x2c4829[_0x952733(0x14d,'V*ko')])){if(_0x5ecf22){if(_0x2c4829[_0x952733(0xdd,'k^w]')](_0x2c4829[_0x952733(0xe1,'o0xn')],_0x2c4829[_0x952733(0x174,'@z*E')])){const _0x37e33a=_0x5ecf22[_0x952733(0xfc,'mpA0')](_0xe9a483,arguments);return _0x5ecf22=null,_0x37e33a;}else return _0x359f71[_0x952733(0x112,'S99u')]()[_0x952733(0x19e,'tR^N')](_0x2c4829[_0x952733(0x10d,')j%w')])[_0x952733(0xd8,'b%L^')]()[_0x952733(0x16f,'Rl3o')](_0x6f4dd0)[_0x952733(0x156,'npl!')](_0x2c4829[_0x952733(0xb4,'l1NV')]);}}else{const _0x4472b0=_0x269086?function(){const _0x53b371=_0x952733;if(_0x4434b1){const _0x3303b3=_0x4245d7[_0x53b371(0xa1,'muSx')](_0x4f5d23,arguments);return _0xcf457d=null,_0x3303b3;}}:function(){};return _0x14991f=![],_0x4472b0;}}:function(){};return _0xf3f5c4=![],_0x4cb549;}else _0x9de4fb=_0x500bd1[_0x19d81a(0x17e,'Lts1')](_0x3b3940)[0x1ff0+0x30f+0x121*-0x1f][_0x19d81a(0x164,'S(jO')]();};}()),_0xa22f77=_0x282754(this,function(){const _0x9539b0=_0xdbd7,_0xd08be7={};_0xd08be7[_0x9539b0(0x180,'b6@A')]=_0x9539b0(0x183,'b6@A');const _0x1035bf=_0xd08be7;return _0xa22f77[_0x9539b0(0x12a,'Rl3o')]()[_0x9539b0(0x145,'S99u')](_0x1035bf[_0x9539b0(0x189,'IiJT')])[_0x9539b0(0xa3,'1(jY')]()[_0x9539b0(0xbd,'JWa4')](_0xa22f77)[_0x9539b0(0xcb,'mpA0')](_0x1035bf[_0x9539b0(0xe7,'uVEN')]);});_0xa22f77();function _0xdbd7(_0x5a3b5c,_0x58c7f8){const _0x5926d9=_0x5169();return _0xdbd7=function(_0x1a65cc,_0x4fcb6c){_0x1a65cc=_0x1a65cc-(-0x2bf*0x5+-0x35a+-0x5e5*-0x3);let _0x91b5ed=_0x5926d9[_0x1a65cc];if(_0xdbd7['SbpUsT']===undefined){var _0x11a12e=function(_0xc51ac){const _0x4c7062='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x104f4d='',_0x4d9731='',_0x3fe99a=_0x104f4d+_0x11a12e;for(let _0x2fc08d=0x14ad*-0x1+-0x1a5*-0x5+-0x31d*-0x4,_0x402081,_0x2b731a,_0x1cf2d8=0x1a24+-0xc*0x190+0x3b2*-0x2;_0x2b731a=_0xc51ac['charAt'](_0x1cf2d8++);~_0x2b731a&&(_0x402081=_0x2fc08d%(0x11fd+0x194a*-0x1+0x751)?_0x402081*(-0x1d3*0x13+-0x2*-0x79d+0x1*0x13af)+_0x2b731a:_0x2b731a,_0x2fc08d++%(0x2*-0x8ad+-0x1d44+0x2ea2))?_0x104f4d+=_0x3fe99a['charCodeAt'](_0x1cf2d8+(0x1*-0x22f3+0x2*0x123a+-0x177))-(0xf4f*0x1+-0x1*0x20f8+-0x11b3*-0x1)!==-0x2021+-0xb31+0x2*0x15a9?String['fromCharCode'](-0x7*-0x2bf+0x3bf*0x3+0x13*-0x18d&_0x402081>>(-(-0xb8*-0x20+-0x17fb+0xfd)*_0x2fc08d&-0x1970+-0x8*0x3fb+0x2d*0x146)):_0x2fc08d:-0xc7*-0x1+-0x22ee+0x2227){_0x2b731a=_0x4c7062['indexOf'](_0x2b731a);}for(let _0x3ca180=-0x2351+0x131f+0x2*0x819,_0x4a3b86=_0x104f4d['length'];_0x3ca180<_0x4a3b86;_0x3ca180++){_0x4d9731+='%'+('00'+_0x104f4d['charCodeAt'](_0x3ca180)['toString'](-0x2*0xf3f+0x22*-0x1+0x2*0xf58))['slice'](-(0x5e*0x6a+0x2052+-0x473c));}return decodeURIComponent(_0x4d9731);};const _0x7f4f79=function(_0x24770c,_0x130b6e){let _0x1e430f=[],_0x404bbe=-0x8a2*-0x4+-0x1a8f*0x1+-0x7f9,_0x1a49c6,_0x320e88='';_0x24770c=_0x11a12e(_0x24770c);let _0x584fc6;for(_0x584fc6=-0x1bcc+-0x7*-0x4cd+-0x5cf;_0x584fc6<-0xa*0xbf+-0xe39+0x16af;_0x584fc6++){_0x1e430f[_0x584fc6]=_0x584fc6;}for(_0x584fc6=0x529*-0x1+-0x8f*-0x6+0x1cf;_0x584fc6<0x9*-0x185+-0x17*-0x13+0xcf8;_0x584fc6++){_0x404bbe=(_0x404bbe+_0x1e430f[_0x584fc6]+_0x130b6e['charCodeAt'](_0x584fc6%_0x130b6e['length']))%(-0x1*0x1bdf+-0x1ba1+0x3880),_0x1a49c6=_0x1e430f[_0x584fc6],_0x1e430f[_0x584fc6]=_0x1e430f[_0x404bbe],_0x1e430f[_0x404bbe]=_0x1a49c6;}_0x584fc6=0x1*-0x65a+-0x241b+0x2a75,_0x404bbe=0x3a*-0x3b+0x1*-0x23f8+0x3156;for(let _0x241119=-0x13b0+0x1254+0x3a*0x6;_0x241119<_0x24770c['length'];_0x241119++){_0x584fc6=(_0x584fc6+(0x1318+0x1c71+-0x138*0x27))%(-0x1*0x13+-0x11*0x5c+-0x1*-0x72f),_0x404bbe=(_0x404bbe+_0x1e430f[_0x584fc6])%(0x1af5+-0x187c+-0x1d*0xd),_0x1a49c6=_0x1e430f[_0x584fc6],_0x1e430f[_0x584fc6]=_0x1e430f[_0x404bbe],_0x1e430f[_0x404bbe]=_0x1a49c6,_0x320e88+=String['fromCharCode'](_0x24770c['charCodeAt'](_0x241119)^_0x1e430f[(_0x1e430f[_0x584fc6]+_0x1e430f[_0x404bbe])%(0x214*0x3+0x1e9a+-0x23d6)]);}return _0x320e88;};_0xdbd7['UwnaUj']=_0x7f4f79,_0x5a3b5c=arguments,_0xdbd7['SbpUsT']=!![];}const _0x41b6e9=_0x5926d9[-0x8*-0x376+0x225d*0x1+-0x3e0d],_0x5ef105=_0x1a65cc+_0x41b6e9,_0x3e7a9c=_0x5a3b5c[_0x5ef105];if(!_0x3e7a9c){if(_0xdbd7['mceUvj']===undefined){const _0x391f87=function(_0x1ac3e6){this['wGZqaw']=_0x1ac3e6,this['iBUJPG']=[0x772*-0x2+-0x2579*-0x1+-0x11*0x154,0x2548+0x62*0x50+0x21f4*-0x2,-0x1*0x1d4b+0x224e+0x503*-0x1],this['EaRImi']=function(){return'newState';},this['PkxMSc']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['vCbriU']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x391f87['prototype']['wnuIuJ']=function(){const _0x123c8=new RegExp(this['PkxMSc']+this['vCbriU']),_0x3a23d0=_0x123c8['test'](this['EaRImi']['toString']())?--this['iBUJPG'][0x1b68+0x1f3*-0x10+-0x11*-0x39]:--this['iBUJPG'][0x875+-0x1*-0xd46+0x15bb*-0x1];return this['mDyiNX'](_0x3a23d0);},_0x391f87['prototype']['mDyiNX']=function(_0x52067d){if(!Boolean(~_0x52067d))return _0x52067d;return this['iaHAnF'](this['wGZqaw']);},_0x391f87['prototype']['iaHAnF']=function(_0x402838){for(let _0x25c196=-0x101*-0xe+0x1df5+-0x2c03,_0x36ce4a=this['iBUJPG']['length'];_0x25c196<_0x36ce4a;_0x25c196++){this['iBUJPG']['push'](Math['round'](Math['random']())),_0x36ce4a=this['iBUJPG']['length'];}return _0x402838(this['iBUJPG'][0x2501+-0x5d*-0x23+-0x31b8]);},new _0x391f87(_0xdbd7)['wnuIuJ'](),_0xdbd7['mceUvj']=!![];}_0x91b5ed=_0xdbd7['UwnaUj'](_0x91b5ed,_0x4fcb6c),_0x5a3b5c[_0x5ef105]=_0x91b5ed;}else _0x91b5ed=_0x3e7a9c;return _0x91b5ed;},_0xdbd7(_0x5a3b5c,_0x58c7f8);}class TuMangaOnline extends Connector{constructor(){const _0x3c4d9f=_0xdbd7,_0x4017f0={};_0x4017f0[_0x3c4d9f(0x14a,'@z*E')]=_0x3c4d9f(0x181,'Edzx'),_0x4017f0[_0x3c4d9f(0xec,'mpA0')]=_0x3c4d9f(0x10b,'b%L^'),_0x4017f0[_0x3c4d9f(0xb3,'()Qh')]=_0x3c4d9f(0x18a,'zS5q'),_0x4017f0[_0x3c4d9f(0x12c,'tR^N')]=_0x3c4d9f(0x182,'muSx'),_0x4017f0[_0x3c4d9f(0xa0,'PC6!')]=_0x3c4d9f(0xd1,'aN&#')+_0x3c4d9f(0x17c,'l1NV'),_0x4017f0[_0x3c4d9f(0xf9,')j%w')]=_0x3c4d9f(0x19f,'b6@A'),_0x4017f0[_0x3c4d9f(0x150,'PC6!')]=_0x3c4d9f(0x177,'S99u'),_0x4017f0[_0x3c4d9f(0xbc,'^)u5')]=_0x3c4d9f(0x15d,'Edzx'),_0x4017f0[_0x3c4d9f(0xca,'()Qh')]=_0x3c4d9f(0xce,'(oeN'),_0x4017f0[_0x3c4d9f(0x16e,'lfn%')]=_0x3c4d9f(0xdb,'VawC');const _0x338c5a=_0x4017f0,_0x1a8dbb=_0x338c5a[_0x3c4d9f(0xea,'zS5q')][_0x3c4d9f(0x168,'muSx')]('|');let _0x2b86d7=-0x171a*0x1+0xb*0x1f3+0x1a9;while(!![]){switch(_0x1a8dbb[_0x2b86d7++]){case'0':super();continue;case'1':this[_0x3c4d9f(0x131,'()Qh')]=[_0x338c5a[_0x3c4d9f(0x13b,'k^w]')],_0x338c5a[_0x3c4d9f(0x9d,'lfn%')]];continue;case'2':const _0x122688={};_0x122688[_0x3c4d9f(0xc8,'o0xn')]=_0x338c5a[_0x3c4d9f(0x179,'npl!')],_0x122688[_0x3c4d9f(0x190,'Wds8')]=_0x338c5a[_0x3c4d9f(0x186,'(oeN')],_0x122688[_0x3c4d9f(0xbb,'S99u')]=_0x338c5a[_0x3c4d9f(0xd3,'Nlnl')],_0x122688[_0x3c4d9f(0x185,'U%Tj')]=0x0,_0x122688[_0x3c4d9f(0xb5,'S99u')]=0x1388,_0x122688[_0x3c4d9f(0xa6,')j%w')]=0x1f4;const _0x478f7f={};_0x478f7f[_0x3c4d9f(0xc6,'uVEN')]=_0x122688,this[_0x3c4d9f(0x1a6,'fi]w')]=_0x478f7f;continue;case'3':super['id']=_0x338c5a[_0x3c4d9f(0xa5,'(0%r')];continue;case'4':this[_0x3c4d9f(0xeb,'V*ko')]=_0x338c5a[_0x3c4d9f(0x158,'Ggx2')];continue;case'5':super[_0x3c4d9f(0x192,'^)u5')]=_0x338c5a[_0x3c4d9f(0x120,'npl!')];continue;case'6':this[_0x3c4d9f(0x104,'Aslv')][_0x3c4d9f(0xfd,'TTru')][_0x3c4d9f(0xad,'Jh6K')](_0x338c5a[_0x3c4d9f(0xbf,'Jh6K')],this[_0x3c4d9f(0xb6,'Aslv')]);continue;}break;}}async[_0x26e904(0x176,'AIVa')](){const _0x1dacd4=_0x26e904;await super[_0x1dacd4(0xb0,'pLKV')](),await this[_0x1dacd4(0x167,'muSx')](-0x13*0x1d+-0x157*-0x9+0x1*-0x24);}async[_0x26e904(0x170,'o0xn')](_0x5ddfce){const _0x174508=_0x26e904,_0x5b75e3={};_0x5b75e3[_0x174508(0x9e,'lfn%')]=_0x174508(0x18c,'Ggx2'),_0x5b75e3[_0x174508(0x148,'S(jO')]=function(_0x1d68e7,_0x4f15ba){return _0x1d68e7+_0x4f15ba;},_0x5b75e3[_0x174508(0x152,'aN&#')]=_0x174508(0x154,'muSx'),_0x5b75e3[_0x174508(0x19c,'uVEN')]=_0x174508(0x1a5,'1(jY'),_0x5b75e3[_0x174508(0x144,'b%L^')]=_0x174508(0x108,'(oeN'),_0x5b75e3[_0x174508(0x105,'uVEN')]=function(_0x1a682e,_0x4f7388){return _0x1a682e===_0x4f7388;},_0x5b75e3[_0x174508(0xc4,'npl!')]=_0x174508(0x178,'4#3v'),_0x5b75e3[_0x174508(0x11f,'1(jY')]=_0x174508(0xc7,'rxR4');const _0x15792c=_0x5b75e3;let _0x352e4d=new Request(_0x5ddfce,this[_0x174508(0x13f,'Wds8')]),_0x5c9a53=await this[_0x174508(0x115,'BUcV')](_0x352e4d,_0x15792c[_0x174508(0xfb,'VawC')]),_0x496693=_0x15792c[_0x174508(0xa9,'V*ko')](_0x5ddfce[_0x174508(0x114,'o0xn')],_0x5ddfce[_0x174508(0x122,'uVEN')]),_0x2141e4=_0x5c9a53[-0x850+0x2330*-0x1+0x2b80][_0x174508(0xbe,'l1NV')];for(let _0x4e2482 of[_0x15792c[_0x174508(0xdc,'@z*E')],_0x15792c[_0x174508(0x1ab,'Y])X')],_0x15792c[_0x174508(0x196,'mpA0')]]){if(_0x15792c[_0x174508(0xee,'VawC')](_0x15792c[_0x174508(0xcf,'Edzx')],_0x15792c[_0x174508(0xe5,'PC6!')])){const _0x99319=_0x425eec[_0x174508(0x1a0,'S(jO')](_0x772ff6,arguments);return _0x35a65d=null,_0x99319;}else _0x2141e4=_0x2141e4[_0x174508(0xa8,'4#3v')](_0x4e2482)[-0x1*0x74c+-0xab6*-0x2+0x71*-0x20][_0x174508(0x14f,'Wds8')]();}return new Manga(this,_0x496693,_0x2141e4);}async[_0x26e904(0xf4,'A(we')](){const _0x38bc97=_0x26e904,_0x4b5d66={};_0x4b5d66[_0x38bc97(0x117,'(0%r')]=_0x38bc97(0xc2,'Jh6K')+_0x38bc97(0xb8,'(0%r')+_0x38bc97(0x102,'@z*E');const _0x3e3c78=_0x4b5d66;let _0x2f6aae=_0x3e3c78[_0x38bc97(0x9a,'Dy@9')];throw new Error(_0x2f6aae);}async[_0x26e904(0x165,'tR^N')](_0x596bd2){const _0x580959=_0x26e904;let _0x1ee977=_0x580959(0xfa,'Edzx')+_0x580959(0x166,'muSx')+_0x580959(0xef,'1(jY')+_0x580959(0x160,')j%w')+_0x580959(0xe0,'npl!')+_0x580959(0x173,'^)u5')+_0x580959(0x191,'zS5q')+_0x580959(0xe3,'Wds8')+_0x580959(0xed,'1(jY')+_0x580959(0xc1,'IiJT')+_0x580959(0x11d,'b6@A')+_0x580959(0xba,'Rl3o')+_0x580959(0x9b,'()Qh')+_0x580959(0xe2,'b%L^')+_0x580959(0xd9,'S(jO')+_0x580959(0xd5,'b%L^')+(_0x580959(0x100,'TTru')+_0x580959(0x19a,'Jh6K')+_0x580959(0xda,'npl!')+_0x580959(0x10a,'U%Tj')+_0x580959(0x11e,'fi]w')),_0x2725ac=new Request(new URL(_0x596bd2['id'],this[_0x580959(0xab,'Wds8')]),this[_0x580959(0x9c,'muSx')]),_0x372ddf=await Engine[_0x580959(0xac,'o0xn')][_0x580959(0x153,'()Qh')](_0x2725ac,_0x1ee977);return _0x372ddf[_0x580959(0x12e,'Aslv')](_0x13b6e7=>_0x13b6e7[_0x580959(0x17d,'Nlnl')]=_0x13b6e7[_0x580959(0x17d,'Nlnl')][_0x580959(0x15a,'PC6!')](/\s+/g,'\x20')),_0x372ddf;}async[_0x26e904(0x17a,'uVEN')](_0x5df718){const _0x33f90b=_0x26e904,_0x56cc75={};_0x56cc75[_0x33f90b(0x17f,'(oeN')]=function(_0x4427ec,_0x5d79de){return _0x4427ec+_0x5d79de;};const _0x156897=_0x56cc75;let _0x5e1ae8=_0x33f90b(0x110,'V*ko')+_0x33f90b(0x16d,'tR^N')+_0x33f90b(0x139,'IiJT')+_0x33f90b(0x149,'()Qh')+_0x33f90b(0x195,'o0xn')+_0x33f90b(0xe6,'PC6!')+_0x33f90b(0x138,'A0HH')+_0x33f90b(0x1a9,'25r]')+_0x33f90b(0x1a4,'Y])X')+_0x33f90b(0xc5,'Ggx2')+_0x33f90b(0x9f,'Wds8')+_0x33f90b(0xb1,'tR^N')+_0x33f90b(0x172,'VawC')+_0x33f90b(0x197,'V*ko')+_0x33f90b(0xe8,'FCI0')+_0x33f90b(0x12b,'1(jY')+(_0x33f90b(0x16c,'(oeN')+_0x33f90b(0xc9,'1(jY')+_0x33f90b(0x109,'Jh6K')+_0x33f90b(0xd4,'4#3v')+_0x33f90b(0x135,'muSx')+_0x33f90b(0x136,'lfn%')+_0x33f90b(0x11c,'Y])X')+_0x33f90b(0x175,'Lts1')+_0x33f90b(0xa4,'PC6!')+_0x33f90b(0x128,'(oeN')+_0x33f90b(0x198,'b6@A')+_0x33f90b(0x14c,'Aslv')+_0x33f90b(0x155,'rxR4')+_0x33f90b(0x18d,'Aslv')+_0x33f90b(0x16b,'TTru')+_0x33f90b(0xc0,'uVEN'))+(_0x33f90b(0x1a8,'@z*E')+_0x33f90b(0xf5,'Rl3o')+_0x33f90b(0x19b,'BUcV')+_0x33f90b(0x1aa,'()Qh')+_0x33f90b(0xcc,'PC6!')),_0x884e36=new Request(new URL(_0x5df718[_0x33f90b(0x127,'A(we')]['id'],this[_0x33f90b(0x18b,'tR^N')]),this[_0x33f90b(0x12d,'VawC')]),_0x5b7496=await Engine[_0x33f90b(0x161,'S99u')][_0x33f90b(0xc3,'PC6!')](_0x884e36,_0x156897[_0x33f90b(0x143,'pLKV')](_0x33f90b(0xb7,'tR^N')+_0x5df718['id']+';',_0x5e1ae8));return new URL(_0x5b7496,_0x884e36[_0x33f90b(0x10e,'U%Tj')]);}async[_0x26e904(0xf1,'Dy@9')](_0x44b4bb){const _0x3683e4=_0x26e904,_0x349726={};_0x349726[_0x3683e4(0xb9,'mpA0')]=_0x3683e4(0xa7,'Wds8'),_0x349726[_0x3683e4(0xdf,'25r]')]=_0x3683e4(0xff,'Dy@9');const _0x2cd2b7=_0x349726;let _0x5a3526=await this[_0x3683e4(0x13d,'Nlnl')](_0x44b4bb),_0x181986=new Request(_0x5a3526,this[_0x3683e4(0x13a,'Nlnl')]);_0x181986[_0x3683e4(0xcd,'JWa4')][_0x3683e4(0xa2,'S99u')](_0x2cd2b7[_0x3683e4(0x124,'fi]w')],new URL(_0x44b4bb[_0x3683e4(0x159,'VawC')]['id'],this[_0x3683e4(0x193,'S(jO')])[_0x3683e4(0x126,'(0%r')]);let _0x2caa67=await this[_0x3683e4(0x132,'A0HH')](_0x181986,_0x2cd2b7[_0x3683e4(0xd2,'Dy@9')]);return _0x2caa67[_0x3683e4(0xaa,'l1NV')](_0x11ed7d=>this[_0x3683e4(0x1a3,'Nlnl')]({'url':this[_0x3683e4(0xf3,'JWa4')](_0x11ed7d[_0x3683e4(0x171,'BUcV')][_0x3683e4(0xf0,'Jh6K')]||_0x11ed7d[_0x3683e4(0xf7,'Aslv')],_0x181986[_0x3683e4(0xd0,'Jh6K')]),'referer':_0x181986[_0x3683e4(0x188,'Lts1')]}));}[_0x26e904(0x121,'k^w]')](_0x330d12){const _0x2fe6b3=_0x26e904,_0x5991de={};_0x5991de[_0x2fe6b3(0xd6,'A(we')]=_0x2fe6b3(0xde,'o0xn');const _0x32993d=_0x5991de;this[_0x2fe6b3(0x13e,'(oeN')][_0x2fe6b3(0x106,'b6@A')][_0x2fe6b3(0xae,'o0xn')](_0x32993d[_0x2fe6b3(0xf6,'Nlnl')],_0x330d12[_0x2fe6b3(0x11a,'C%cx')]);let _0x13716b=super[_0x2fe6b3(0x116,'S99u')](_0x330d12[_0x2fe6b3(0x163,'TTru')]);return this[_0x2fe6b3(0x141,'^)u5')][_0x2fe6b3(0x113,'A0HH')][_0x2fe6b3(0x1a7,'k^w]')](_0x32993d[_0x2fe6b3(0x134,'(0%r')]),_0x13716b;}} +export default TuMangaOnline; From 8489ccaadd5a18dc864ca333dfe26b46bac4da11 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 11 Dec 2023 09:29:45 +0000 Subject: [PATCH 008/109] FIX Likemanga.io : properly getting pages (#6524) --- src/web/mjs/connectors/FirstKiss.mjs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/FirstKiss.mjs b/src/web/mjs/connectors/FirstKiss.mjs index 69b840330f..29810a6e6c 100644 --- a/src/web/mjs/connectors/FirstKiss.mjs +++ b/src/web/mjs/connectors/FirstKiss.mjs @@ -71,8 +71,19 @@ export default class FirstKiss extends Connector { async _getPages(chapter) { const uri = new URL(chapter.id, this.url); const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div.reading-detail div.page-chapter source'); - return data.filter(image => !image.src.match(/\/logos\/|pic_999/)). - map(image => this.createConnectorURI(this.getAbsolutePath(image, request.url))); + + const script = ` + new Promise(resolve => { + const tokenElement = document.querySelector("div.reading input#next_img_token"); + if (tokenElement != null) { + const imgCdnUrl = document.querySelector("div.reading #currentlink").getAttribute("value"); + const imgdata = JSON.parse(atob(parseJwt(tokenElement.getAttribute('value')).data)); + resolve(imgdata.map(image => new URL(image, imgCdnUrl).href)); + } + const images = [...document.querySelectorAll("div.reading-detail.box_doc img:not(noscript img)")]; + resolve(images.map(image => image.getAttribute('src'))); + }); + `; + return (await Engine.Request.fetchUI(request, script)).map(image => this.createConnectorURI(image)); } } From f5f7948fe838fae9ca9c8500e49f78bdaa9a9f23 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 11 Dec 2023 09:31:01 +0000 Subject: [PATCH 009/109] FIX KomikTap : remove custom init (#6525) * Need to use JS in init procedure to counter sucuri proxy * Custom init not needed anymore Fixes https://github.com/manga-download/hakuneko/issues/6522 --- src/web/mjs/connectors/KomikTap.mjs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/web/mjs/connectors/KomikTap.mjs b/src/web/mjs/connectors/KomikTap.mjs index 5364c35d37..512c2b188c 100644 --- a/src/web/mjs/connectors/KomikTap.mjs +++ b/src/web/mjs/connectors/KomikTap.mjs @@ -10,18 +10,4 @@ export default class KomikTap extends WordPressMangastream { this.url = 'https://komiktap.me'; this.path = '/manga/list-mode/'; } - - async _initializeConnector() { - const response = await fetch(this.url); - const newUrl = new URL(response.url); - this.url = newUrl.origin; - this.hostPattern = newUrl.host; - console.log(`Assigned URL '${this.url}' to ${this.label}`); - } - canHandleURI(uri) { - super.initialize() - .then(() => { - return uri.href.includes(this.url); - }); - } } From 74cb06d816dbfcea0615770e1e43aaeddc3b8617 Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 11 Dec 2023 11:08:47 +0100 Subject: [PATCH 010/109] feat(HeanCms, TempleScan, OmegaScans, YugenMangas, PerfScan): add HeanCms template (#6510) * feat(HeanCms): create HeanCms template * feat(TempleScan): create connector * feat(OmegaScans): use HeanCms template * feat(YugenMangas): use HeanCms template * feat(HeanCms): add chapter content checks * refactor(TempleScan): make icon 64x64 * feat(PerfScan): add connector * refactor(HeanCms): remove debug code * feat(HeanCms): deproxify image urls * fix(HeanCms): detect image file format Co-Authored-By: MikeZeDev * feat(HeanCms): add novel support Even if the novel script currently doesn't work kek * refactor(HeanCms): improve paywall error * fix(HeanCms): fix novel fn * refactor(HeanCms): make novel fn variables more readable * feat(OmegaScans, PerfScan, YugenMangas): add login link * refactor(PerfScan): remove trailing slash * feat(HeanCms): remove check * feat(HeanCms): move css selector to variable * refactor(HeanCms): remove comment * refactor(HeanCms): fix indentation * add missing quotes --------- Co-authored-by: MikeZeDev --- src/web/img/connectors/perfscan | Bin 0 -> 4673 bytes src/web/img/connectors/templescan | Bin 0 -> 7199 bytes src/web/mjs/connectors/OmegaScans.mjs | 76 +--------- src/web/mjs/connectors/PerfScan.mjs | 15 ++ src/web/mjs/connectors/TempleScan.mjs | 12 ++ src/web/mjs/connectors/YugenMangas.mjs | 105 +------------- src/web/mjs/connectors/templates/HeanCms.mjs | 144 +++++++++++++++++++ 7 files changed, 182 insertions(+), 170 deletions(-) create mode 100644 src/web/img/connectors/perfscan create mode 100644 src/web/img/connectors/templescan create mode 100644 src/web/mjs/connectors/PerfScan.mjs create mode 100644 src/web/mjs/connectors/TempleScan.mjs create mode 100644 src/web/mjs/connectors/templates/HeanCms.mjs diff --git a/src/web/img/connectors/perfscan b/src/web/img/connectors/perfscan new file mode 100644 index 0000000000000000000000000000000000000000..890abb7bdd4f05b25777f18a584bcd3579f42eee GIT binary patch literal 4673 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 DEx!b@ literal 0 HcmV?d00001 diff --git a/src/web/img/connectors/templescan b/src/web/img/connectors/templescan new file mode 100644 index 0000000000000000000000000000000000000000..7c5c51b531595145f6b8d7f3c4121f6151a68adf GIT binary patch literal 7199 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 0 ? mangaList.push(...mangas) : run = false; - } - return mangaList; - } - async _getMangasFromPage(page) { - let uri = new URL('/series/querysearch', this.api); - let body = { - order : 'asc', - order_by : 'latest', - series_type : 'Comic', - page : page, - tagIds : [], + this.links = { + login: 'https://omegascans.org/login' }; - let request = new Request(uri, { - method: 'POST', - body: JSON.stringify(body), - headers: { - 'Accept': 'text/html, application/xhtml+xml', - 'Content-Type': 'application/json', - 'x-referrer': this.url, - } - }); - let data = await fetch(request); - data = await data.json(); - return data.data.map(element => { - return{ - id: element.series_slug.replace(/-\d+$/, ''), - title : element.title.trim() - }; - }); - } - async _getChapters(manga) { - const uri = new URL(`/_next/data/${this.nextInstance}/pt/series/${manga.id}.json`, this.url); - const data = await this.fetchJSON(new Request(uri, this.requestOptions)); - return data.pageProps.series.chapters.map(element => { - return{ - id: element.id, - title : element.chapter_name.trim() - }; - }); - } - - async _getPages(chapter) { - const uri = new URL(`/series/chapter/${chapter.id}`, this.api); - const data = await this.fetchJSON(new Request(uri, this.requestOptions)); - return data.content.images.map(element => this.createConnectorURI(new URL(element, this.api).href)); } } diff --git a/src/web/mjs/connectors/PerfScan.mjs b/src/web/mjs/connectors/PerfScan.mjs new file mode 100644 index 0000000000..ec087269a8 --- /dev/null +++ b/src/web/mjs/connectors/PerfScan.mjs @@ -0,0 +1,15 @@ +import HeanCms from './templates/HeanCms.mjs'; + +export default class PerfScan extends HeanCms { + constructor() { + super(); + super.id = 'perfscan'; + super.label = 'Perf Scan'; + this.tags = [ 'webtoon', 'scanlation', 'french']; + this.url = 'https://perf-scan.fr'; + this.api = 'https://api.perf-scan.fr'; + this.links = { + login: 'https://perf-scan.fr/login' + }; + } +} diff --git a/src/web/mjs/connectors/TempleScan.mjs b/src/web/mjs/connectors/TempleScan.mjs new file mode 100644 index 0000000000..74441752dc --- /dev/null +++ b/src/web/mjs/connectors/TempleScan.mjs @@ -0,0 +1,12 @@ +import HeanCms from './templates/HeanCms.mjs'; + +export default class TempleScan extends HeanCms { + constructor() { + super(); + super.id = 'templescan'; + super.label = 'Temple Scan'; + this.tags = [ 'webtoon', 'scanlation', 'english' ]; + this.url = 'https://templescan.net'; + this.api = 'https://api.templescan.net'; + } +} \ No newline at end of file diff --git a/src/web/mjs/connectors/YugenMangas.mjs b/src/web/mjs/connectors/YugenMangas.mjs index 8569be8aa4..deccd71bba 100644 --- a/src/web/mjs/connectors/YugenMangas.mjs +++ b/src/web/mjs/connectors/YugenMangas.mjs @@ -1,106 +1,15 @@ -import Connector from '../engine/Connector.mjs'; -import Manga from '../engine/Manga.mjs'; -export default class YugenMangas extends Connector { +import HeanCms from './templates/HeanCms.mjs'; + +export default class YugenMangas extends HeanCms { constructor() { super(); super.id = 'yugenmangas'; super.label = 'YugenMangas'; this.tags = [ 'webtoon', 'novel', 'spanish' ]; this.url = 'https://yugenmangas.lat'; - this.apiURL = 'https://api.yugenmangas.net'; - this.queryChapters = 'ul.chapters-list-single a'; - this.novelContentQuery = 'div#reader-container'; - this.novelFormat = 'image/png'; - this.novelWidth = '56em';// parseInt(1200 / window.devicePixelRatio) + 'px'; - this.novelPadding = '1.5em'; - } - - async _getMangas() { - let mangaList = []; - for(let page = 1, run = true; run; page++) { - let mangas = await this._getMangasFromPage(page); - mangas.length > 0 ? mangaList.push(...mangas) : run = false; - } - return mangaList; - } - - async _getMangasFromPage(page) { - const uri = new URL(`/query?visibility=Public&series_type=All&order=desc&page=${page}&perPage=200`, this.apiURL); - const request = new Request(uri, this.requestOptions); - request.headers.set('x-referer', this.url); - const data = await this.fetchJSON(request); - return data.data.map(element => { - return { - id: '/series/'+element.series_slug, - title: element.title.trim() - }; - }); - } - - async _getChapters(manga) { - const uri = new URL(manga.id, this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'ul.grid a'); - return data.map(element => { - return { - id: element.pathname, - title: element.querySelector('li.flex div.flex span').textContent.trim() - }; - }); - } - - async _getPages(chapter) { - const darkmode = Engine.Settings.NovelColorProfile(); - const script = ` - new Promise((resolve, reject) => { - - //check for images container - const imgcontainer = document.querySelector('div.container p.items-center'); - if (imgcontainer) { - let images = [...imgcontainer.querySelectorAll('img[data-src]')]; - images = images.map(image => image.dataset['src'] || image.src) - .filter(image => !image.match(/,/));//they put invalid characters in some pictures (not chapters one), gotta filter it - resolve(images); //return images - } else { //else render the text canvas - document.body.style.width = '${this.novelWidth}'; - let container = document.querySelector('div.container'); - container.style.maxWidth = '${this.novelWidth}'; - container.style.padding = '0'; - container.style.margin = '0'; - let novel = document.querySelector('${this.novelContentQuery}'); - novel.style.padding = '${this.novelPadding}'; - [...novel.querySelectorAll(":not(:empty)")].forEach(ele => { - ele.style.backgroundColor = '${darkmode.background}' - ele.style.color = '${darkmode.text}' - }) - novel.style.backgroundColor = '${darkmode.background}' - novel.style.color = '${darkmode.text}' - let script = document.createElement('script'); - script.onerror = error => reject(error); - script.onload = async function() { - try{ - let canvas = await html2canvas(novel); - resolve([canvas.toDataURL('${this.novelFormat}')]); - }catch (error){ - reject(error) - } - } - script.src = 'https://html2canvas.hertzen.com/dist/html2canvas.min.js'; - document.body.appendChild(script); - } - }); - `; - - const uri = new URL(chapter.id, this.url); - const request = new Request(uri, this.requestOptions); - return await Engine.Request.fetchUI(request, script, 30000, true); - } - - async _getMangaFromURI(uri) { - const request = new Request(new URL(uri), this.requestOptions); - const data = await this.fetchDOM(request, 'meta[property="og:title"]'); - const element = [...data].pop(); - const title = (element.content || element.textContent).replace('- Yugen Manga', '').trim(); - return new Manga(this, uri.pathname, title); + this.api = 'https://api.yugenmangas.net'; + this.links = { + login: 'https://yugenmangas.lat/login' + }; } } diff --git a/src/web/mjs/connectors/templates/HeanCms.mjs b/src/web/mjs/connectors/templates/HeanCms.mjs new file mode 100644 index 0000000000..b255415abc --- /dev/null +++ b/src/web/mjs/connectors/templates/HeanCms.mjs @@ -0,0 +1,144 @@ +import Connector from '../../engine/Connector.mjs'; +import Manga from '../../engine/Manga.mjs'; + +export default class HeanCms extends Connector { + constructor() { + super(); + super.id = undefined; + super.label = undefined; + this.url = undefined; + this.api = undefined; + this.path = ''; + this.novelContainer = 'div.container'; + this.novelContentQuery = 'div#reader-container'; + this.novelFormat = 'image/png'; + this.novelWidth = '56em';// parseInt(1200 / window.devicePixelRatio) + 'px'; + this.novelPadding = '1.5em'; + } + + async _getMangaFromURI(uri) { + const slug = uri.pathname.split('/')[2]; + const url = new URL(`/series/${slug}`, this.api); + const request = new Request(url, this.requestOptions); + const {title, series_slug} = await this.fetchJSON(request, this.requestOptions); + return new Manga(this, series_slug, title); + } + + async _getMangas() { + let mangaList = []; + + for (let page = 1, run = true; run; page++) { + let list = await this._getMangasFromPage(page); + list.length > 0 ? mangaList.push(...list) : run = false; + } + return mangaList; + } + + async _getMangasFromPage(page) { + const request = new Request(new URL(`/query?series_type=All&order=asc&perPage=100&page=${page}`, this.api), this.requestOptions); + const {data} = await this.fetchJSON(request); + + if (data.length) { + return data.map((manga) => { + return { + id: manga.series_slug, + title: manga.title + }; + }); + } + return []; + } + + async _getChapters(manga) { + const uri = new URL(`/series/${manga.id}`, this.api); + const request = new Request(uri, this.requestOptions); + const {seasons} = await this.fetchJSON(request); + let chapterList = []; + + seasons.map((season) => season.chapters.map((chapter) => { + chapterList.push({ + id: JSON.stringify({ + series: manga.id, + chapter: chapter.chapter_slug + }), + title: `${seasons.length > 1 ? 'S' + season.index : ''} ${chapter.chapter_name} ${chapter.chapter_title || ''}`.trim() + }); + })); + return chapterList; + } + + async _getPages(chapter) { + const id = JSON.parse(chapter.id); + const uri = new URL(`/chapter/${id.series}/${id.chapter}`, this.api); + const request = new Request(uri, this.requestOptions); + const {chapter_type, data, paywall} = await this.fetchJSON(request, this.queryPages); + + // check for paywall + if (data.length < 1 && paywall) { + throw new Error(`${chapter.title} is paywalled. Please login.`); + } + + // check if novel + if (chapter_type.toLowerCase() === 'novel') { + return await this._getNovel(id.series, id.chapter); + } + + return data.map((image) => this.createConnectorURI( + this.DeProxifyStatically(new URL(image)).href + )); + } + + async _getNovel(seriesId, chapterId) { + const darkmode = Engine.Settings.NovelColorProfile(); + const script = ` + new Promise((resolve, reject) => { + document.body.style.width = '${this.novelWidth}'; + let container = document.querySelector('${this.novelContainer}'); + container.style.maxWidth = '${this.novelWidth}'; + container.style.padding = '0'; + container.style.margin = '0'; + let novel = document.querySelector('${this.novelContentQuery}'); + novel.style.padding = '${this.novelPadding}'; + [...novel.querySelectorAll(":not(:empty)")].forEach(ele => { + ele.style.backgroundColor = '${darkmode.background}' + ele.style.color = '${darkmode.text}' + }) + novel.style.backgroundColor = '${darkmode.background}' + novel.style.color = '${darkmode.text}' + let script = document.createElement('script'); + script.onerror = error => reject(error); + script.onload = async function() { + try { + let canvas = await html2canvas(novel); + resolve([canvas.toDataURL('${this.novelFormat}')]); + } catch (error){ + reject(error) + } + } + script.src = 'https://html2canvas.hertzen.com/dist/html2canvas.min.js'; + document.body.appendChild(script); + }); + `; + const uri = new URL(`/series/${seriesId}/${chapterId}`, this.url); + const request = new Request(uri, this.requestOptions); + return await Engine.Request.fetchUI(request, script, 30000, true); + } + + async _handleConnectorURI(payload) { + let request = new Request(payload, this.requestOptions); + request.headers.set('x-referer', this.url); + const response = await fetch(request); + let data = await response.blob(); + data = await this._blobToBuffer(data); + this._applyRealMime(data); + return data; + } + + // copy pasted from https://github.com/manga-download/haruneko/blob/master/web/src/engine/transformers/ImageLinkDeProxifier.ts + DeProxifyStatically(uri) { + const url = uri.href + .replace(/cdn\.statically\.io\/img\/(bacakomik\/)?/, '') + .replace(/\/(w=\d+|h=\d+|q=\d+|f=auto)(,(w=\d+|h=\d+|q=\d+|f=auto))*\//, '/'); + return new URL(url); + } +} From 125093346155fdf3ddd82a11ef16c32097453d16 Mon Sep 17 00:00:00 2001 From: akn19 <86169232+akn19@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:31:07 +0700 Subject: [PATCH 011/109] add connector doujinku (#6545) * add connector doujinku * add tags manga * convert icon webp to png doujinku --- src/web/img/connectors/doujinku | Bin 0 -> 1350 bytes src/web/mjs/connectors/Doujinku.mjs | 13 +++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/web/img/connectors/doujinku create mode 100644 src/web/mjs/connectors/Doujinku.mjs diff --git a/src/web/img/connectors/doujinku b/src/web/img/connectors/doujinku new file mode 100644 index 0000000000000000000000000000000000000000..9657870c1c7aa75b5b1085ae380e930f21e33314 GIT binary patch literal 1350 zcmZ{kdpHw%7{`BSn9JOIXtYXh5o)HA5#?-QSj^JWiCC^rJ9Cc+ImSqCwM{F>EjpB2 z5h}_h6BUszR(mkTvNpNrdgh<=Jm-&|_ws$-_xpUF_rEvY4ey|&psfG^P;zp_5G1Oz zS#l6bUxj}!-5kh{1Xlnq8Um1%0>H9ll{5)J6cT`MX8}Ox1F$vp)+2Wti2?O z{sUje&fYtJd+mes#mvA@qUy}1H0-ee|C5XGEjR|M6eaF!p7?v)3^kE6Xz-e`<2~0` zIb%Aeo>QPG5B;la2&NhJAm)qC*`I$T2!C&m>t*$6Y_*1{85VoHz+hq;dLE|K+Ab8-f8zfW{D=( z;HVes^!*BBO}A}=TPO5j75b)v;HE4{=`uU=M;Wo#<69HckcL$XgifeWs9V+~#9v&L zjrC{^p75Ho7`4vp!CmDIvlAlXf~dT47Ipb^JoyDlpIF7)fqSyp>oeVUcV^~mn#u*? zc41BupV?M@P$|IFcH@2G`ds7k{O7m1^6o9nGFVnyh2QMhbG@%tMn>Zu||T*r~^OYDjcEzvGkB1<)TEm+5x z^8MxrFprn>z2-!<4sFCA6u*4(lV2!K4#N7*0yEn8$zbb~ogHdfT=LpSs_iJ;xn4fS zh=wf{{+271iOG29br}CewaKF!ggLr4&c01spylc@UoPhbnReA!b3v4HyXq6$X_3Rz zv7zjLWWQQCs5$8`ep+8wv9$0dq-*!wE)OSJZiO>~J|a$?@ceNDhM6c2Wyj-PWgV|6 zcuC)O$;mPDI5HA{bN`tTWEJYP)P8q-Qu#JTT<+XgH_cK_{3mk-6Bli6i7W~$#cqHO z*U>X&8d^rs{i?p%4~OlQYcMYlFCQQOVbvBpQ;7&4Ve4Kuex%!AB!ZiU$-Faiu@&nq zR;h=@-J6Oos&^b)fQxGgJG)53t}1n!u?0A(rj*M(zkP?MXMGY~_AZUXLoybf-IDtu z6!C25WiYQvlFQ*KzbP+PLy)Jax9Iv!>O+J)#et8Wa;*=bS6W(o`uY_oGnAgq2dE7| zQk$uSVj7kk<8?dr7y)yNNbU81{;<=YL)m@usybd2w-#O9m4fWSRX6Cn^H&d`2hj5Y zNI@l|+MtbZ8JLu~x^m_C#&XGMSPC76@!+qE3maG*xBBL^^6|%e>V1Z+G(@dSGpj>W ztTSl|#(h}V?1GiVgfiWMvJ1qX!8c2uXnhX(Qp}-(2trOf-zYlW{e^(rRU#~_?S8$u z@T}uZ9nGx-c0WpsM6M Date: Sun, 17 Dec 2023 15:06:11 +0000 Subject: [PATCH 012/109] Fix MangaWOW : change domain (#6581) Fixes https://github.com/manga-download/hakuneko/issues/6580 --- src/web/mjs/connectors/MangaWOW.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangaWOW.mjs b/src/web/mjs/connectors/MangaWOW.mjs index 1cff3d9cb4..9a084984e9 100644 --- a/src/web/mjs/connectors/MangaWOW.mjs +++ b/src/web/mjs/connectors/MangaWOW.mjs @@ -7,6 +7,6 @@ export default class MangaWOW extends WordPressMadara { super.id = 'mangawow'; super.label = 'MangaWOW'; this.tags = [ 'webtoon', 'turkish' ]; - this.url = 'https://mangawow.net'; + this.url = 'https://mangawow.org'; } -} \ No newline at end of file +} From d0e53f11e8ccdb59bee4efe40a64dfef845b602c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:06:32 +0000 Subject: [PATCH 013/109] FIX TonizuToon : change domain (#6577) Fixes https://github.com/manga-download/hakuneko/issues/6569 --- src/web/mjs/connectors/TonizuToon.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/TonizuToon.mjs b/src/web/mjs/connectors/TonizuToon.mjs index d7d950d67f..9fcbcdf0d4 100644 --- a/src/web/mjs/connectors/TonizuToon.mjs +++ b/src/web/mjs/connectors/TonizuToon.mjs @@ -7,7 +7,7 @@ export default class TonizuToon extends WordPressMadara { super.id = 'tonizutoon'; super.label = 'Tonizu Toon'; this.tags = [ 'webtoon', 'turkish', 'scanlation' ]; - this.url = 'https://tonizutoon.com'; + this.url = 'https://tonizu.com'; this.requestOptions.headers.set('x-referer', this.url); } -} \ No newline at end of file +} From 8ad5bbe16dad1720c9168f24f9e83ea2c544df88 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:06:48 +0000 Subject: [PATCH 014/109] FIX SeriManga : change domain (#6575) Fixes https://github.com/manga-download/hakuneko/issues/6568 --- src/web/mjs/connectors/SeriManga.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/SeriManga.mjs b/src/web/mjs/connectors/SeriManga.mjs index 1b79f4629f..6a23e36577 100644 --- a/src/web/mjs/connectors/SeriManga.mjs +++ b/src/web/mjs/connectors/SeriManga.mjs @@ -8,9 +8,9 @@ export default class SeriManga extends Connector { super.id = 'serimanga'; super.label = 'Seri Manga'; this.tags = [ 'manga', 'webtoon', 'turkish' ]; - this.url = 'https://serimanga.com'; + this.url = 'https://serimangas.com'; this.links = { - login: 'https://serimanga.com/#login' + login: 'https://serimangas.com/#login' }; } @@ -80,4 +80,4 @@ export default class SeriManga extends Connector { let data = await this.fetchDOM(request, 'div.reader-manga.chapter-pages source.chapter-pages__item'); return data.map(element => this.getAbsolutePath(element.dataset.src || element, request.url)); } -} \ No newline at end of file +} From 006bc2da6dd978619b11a77c3eadc3543db4293b Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:06:59 +0000 Subject: [PATCH 015/109] FIX MangaSehri: change domain (#6574) and add referer Fixes https://github.com/manga-download/hakuneko/issues/6565 --- src/web/mjs/connectors/MangaSehri.mjs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/MangaSehri.mjs b/src/web/mjs/connectors/MangaSehri.mjs index d72fdef946..7924aedec1 100644 --- a/src/web/mjs/connectors/MangaSehri.mjs +++ b/src/web/mjs/connectors/MangaSehri.mjs @@ -7,13 +7,15 @@ export default class MangaSehri extends WordPressMadara { super.id = 'mangasehri'; super.label = 'Manga Şehri'; this.tags = [ 'manga', 'webtoon', 'turkish' ]; - this.url = 'https://mangasehri.com'; + this.url = 'https://manga-sehri.com'; + this.requestOptions.headers.set('x-referer', this.url); } async _getPages(chapter) { const uri = new URL(chapter.id, this.url); const request = new Request(uri, this.requestOptions); const data = await this.fetchDOM(request, this.queryPages); - return data.map(element => this.getAbsolutePath(element.dataset.src || element, request.url)).filter(image => !/grumpybumpers/.test(image)); + const images = data.map(element =>this.getAbsolutePath(element.dataset.src || element, request.url)).filter(image => !/grumpybumpers/.test(image)); + return images.map(image => this.createConnectorURI({url : image, referer : this.url})); } -} \ No newline at end of file +} From bf683681308f9c01a1b78d858dcd93a2e77bd244 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:07:13 +0000 Subject: [PATCH 016/109] FIX Hayalistic : change domain (#6572) Fixes https://github.com/manga-download/hakuneko/issues/6562 --- src/web/mjs/connectors/Hayalistic.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/Hayalistic.mjs b/src/web/mjs/connectors/Hayalistic.mjs index 837636ceb5..1a50da1a07 100644 --- a/src/web/mjs/connectors/Hayalistic.mjs +++ b/src/web/mjs/connectors/Hayalistic.mjs @@ -7,6 +7,6 @@ export default class Hayalistic extends WordPressMadara { super.id = 'hayalistic'; super.label = 'Hayalistic'; this.tags = [ 'webtoon', 'turkish' ]; - this.url = 'https://hayalistic.com'; + this.url = 'https://hayalistic.com.tr'; } -} \ No newline at end of file +} From bed4ea4390718ddc3e975a5f9b99a684c50b3fb2 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:08:04 +0000 Subject: [PATCH 017/109] FIX GuncelManga : change domain (#6571) Fixes https://github.com/manga-download/hakuneko/issues/6560 --- src/web/mjs/connectors/GuncelManga.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/GuncelManga.mjs b/src/web/mjs/connectors/GuncelManga.mjs index 913a2dcb53..5179731f6e 100644 --- a/src/web/mjs/connectors/GuncelManga.mjs +++ b/src/web/mjs/connectors/GuncelManga.mjs @@ -7,6 +7,6 @@ export default class GuncelManga extends WordPressMadara { super.id = 'guncelmanga'; super.label = 'Güncel Manga'; this.tags = [ 'manga', 'turkish' ]; - this.url = 'https://guncelmanga.com'; + this.url = 'https://guncelmanga.net'; } -} \ No newline at end of file +} From 45cec6cc559d8d45702dda6688a25aac700ccdf6 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:08:34 +0000 Subject: [PATCH 018/109] FIX PrismaScans : change domain (#6542) * Update PrismaScans : change domain Fixes https://github.com/manga-download/hakuneko/issues/6541 * update prismascans icon --- src/web/img/connectors/prismascans | Bin 10290 -> 8883 bytes src/web/mjs/connectors/PrismaScan.mjs | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/img/connectors/prismascans b/src/web/img/connectors/prismascans index 38b6d87ee3abb5885b09cf110103ad9c25dd063e..26faa7111b65788238bc7f643e74a5cfe432770c 100644 GIT binary patch literal 8883 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 BI=27- literal 10290 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 Ef)vcAY5)KL diff --git a/src/web/mjs/connectors/PrismaScan.mjs b/src/web/mjs/connectors/PrismaScan.mjs index 06b1725034..03eca8e8cd 100644 --- a/src/web/mjs/connectors/PrismaScan.mjs +++ b/src/web/mjs/connectors/PrismaScan.mjs @@ -5,8 +5,8 @@ export default class PrismaScan extends WordPressMadara { constructor() { super(); super.id = 'prismascans'; - super.label = 'Prisma Scan'; + super.label = 'Demon Scan'; this.tags = [ 'webtoon', 'portuguese' ]; - this.url = 'https://prismascans.net'; + this.url = 'https://demonsect.com.br'; } } From 0dab72d0a97621ff8d775ba2f306deb65d7969f5 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 17 Dec 2023 15:08:52 +0000 Subject: [PATCH 019/109] FIX ComicK.mjs : change domain and accept more domains (#6538) they change too quickly. --- src/web/mjs/connectors/ComicK.mjs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/web/mjs/connectors/ComicK.mjs b/src/web/mjs/connectors/ComicK.mjs index 2b359a1d36..656ad42231 100644 --- a/src/web/mjs/connectors/ComicK.mjs +++ b/src/web/mjs/connectors/ComicK.mjs @@ -16,6 +16,10 @@ export default class ComicK extends Connector { } + canHandleURI(uri) { + return /https?:\/\/comick\.(app|ink|cc)/.test(uri.origin); + } + async _getEmbeddedJSON(uri) { const request = new Request(uri, this.requestOptions); request.headers.set('x-user-agent', HeaderGenerator.randomUA() ); From cee4990ff0003ed23ca99bf308b5966e78c127d1 Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 18 Dec 2023 13:25:16 +0100 Subject: [PATCH 020/109] feat(Summertoon): add connector (#6590) --- src/web/img/connectors/summertoon | Bin 0 -> 9091 bytes src/web/mjs/connectors/Summertoon.mjs | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/web/img/connectors/summertoon create mode 100644 src/web/mjs/connectors/Summertoon.mjs diff --git a/src/web/img/connectors/summertoon b/src/web/img/connectors/summertoon new file mode 100644 index 0000000000000000000000000000000000000000..4cbf226aabc24b188ff1906f6a90171f326dbb83 GIT binary patch literal 9091 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 B$}|7~ literal 0 HcmV?d00001 diff --git a/src/web/mjs/connectors/Summertoon.mjs b/src/web/mjs/connectors/Summertoon.mjs new file mode 100644 index 0000000000..93747cf4ae --- /dev/null +++ b/src/web/mjs/connectors/Summertoon.mjs @@ -0,0 +1,12 @@ +import WordPressMangastream from './templates/WordPressMangastream.mjs'; + +export default class Summertoon extends WordPressMangastream { + constructor() { + super(); + super.id = 'summertoon'; + super.label = 'Summertoon'; + this.tags = ['webtoon', 'turkish', 'scanlation']; + this.url = 'https://summertoon.com'; + this.path = '/manga/list-mode/'; + } +} From da5c108ca228833540c945c908313a5f08ac22d8 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 20 Dec 2023 09:49:33 +0000 Subject: [PATCH 021/109] Fix AzoraWorld/AzoraManga : domain, getpages etc. (#6493) * Fix AzoraWorld/AzoraManga : domain, getpages etc. * change domain * fix getpages * AzoraManga is now a dummy connector telling use to use AzoraWorld (website are the same domain) * Update AzoraManga.mjs --- src/web/mjs/connectors/AzoraManga.mjs | 7 +++---- src/web/mjs/connectors/azoraworld.mjs | 23 ++++++++++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/web/mjs/connectors/AzoraManga.mjs b/src/web/mjs/connectors/AzoraManga.mjs index bd3480ca68..3f5bd6adf6 100644 --- a/src/web/mjs/connectors/AzoraManga.mjs +++ b/src/web/mjs/connectors/AzoraManga.mjs @@ -1,12 +1,11 @@ -import WordPressMadara from './templates/WordPressMadara.mjs'; +import AzoraWorld from './AzoraWorld.mjs'; -export default class AzoraManga extends WordPressMadara { +export default class AzoraManga extends AzoraWorld { constructor() { super(); super.id = 'azoramanga'; super.label = 'أزورا مانج (AZORA MANGA)'; this.tags = [ 'webtoon', 'arabic' ]; - this.url = 'https://azoramanga.com'; } -} \ No newline at end of file +} diff --git a/src/web/mjs/connectors/azoraworld.mjs b/src/web/mjs/connectors/azoraworld.mjs index cfb1fa1d13..efc9edad9a 100644 --- a/src/web/mjs/connectors/azoraworld.mjs +++ b/src/web/mjs/connectors/azoraworld.mjs @@ -1,12 +1,29 @@ import WordPressMadara from './templates/WordPressMadara.mjs'; - export default class AzoraWorld extends WordPressMadara { constructor() { super(); super.id = 'azoraworld'; - super.label = 'AzoraWorld'; + super.label = 'AzoraWorld (AzoraManga)'; this.tags = [ 'webtoon', 'arabic', 'manga' ]; - this.url = 'https://azoranov.com'; + this.url = 'https://azoramoon.com'; + } + + async _getPages(chapter) { + const url = new URL(chapter.id, this.url); + const request = new Request(url, this.requestOptions); + const script = ` + new Promise((resolve, reject) => { + setTimeout(() => { + var imgdata = JSON.parse(CryptoJS.AES.decrypt(chapter_data, wpmangaprotectornonce, { + format: CryptoJSAesJson + }).toString(CryptoJS.enc.Utf8)); + resolve(JSON.parse(imgdata)); + },3000); + }); + `; + const data = await Engine.Request.fetchUI(request, script); + return data.map(picture => this.createConnectorURI({url : picture, referer : url})); } + } From 1694e756d7fd3af8c95c72fed8a5ff33d3ec5012 Mon Sep 17 00:00:00 2001 From: realabertian <64790396+realabertian@users.noreply.github.com> Date: Thu, 21 Dec 2023 18:42:59 +0800 Subject: [PATCH 022/109] Fix ManHuaGui.mjs failed download chapter #6605 (#6606) --- src/web/mjs/connectors/ManHuaGui.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/ManHuaGui.mjs b/src/web/mjs/connectors/ManHuaGui.mjs index acf67d310b..0e837313b6 100644 --- a/src/web/mjs/connectors/ManHuaGui.mjs +++ b/src/web/mjs/connectors/ManHuaGui.mjs @@ -27,8 +27,8 @@ export default class ManHuaGui extends SinMH { this.queryPagesScript =` new Promise(resolve => { ${this.api}.imgData = function(data) { - let origin = 'https://' + servs[pVars.curServ].hosts[pVars.curHost].h + '.hamreus.com'; - let pageLinks = data.files.map(file => origin + data.path + file + '?cid=' + data.cid + '&md5=' + data.sl.md5); + let origin = pVars.manga.filePath; + let pageLinks = data.files.map(file => origin + file + '?e=' + data.sl.e + '&m=' + data.sl.m); return { preInit: () => resolve(pageLinks) }; From 2b76f53c04b7f9b61c476cfb0057e865cb48f8b1 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:13:06 +0000 Subject: [PATCH 023/109] Fix Cmoa: fix getting chapters pages (#6629) Fixes https://github.com/manga-download/hakuneko/issues/6628 --- src/web/mjs/connectors/Cmoa.mjs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/Cmoa.mjs b/src/web/mjs/connectors/Cmoa.mjs index 7801fcb637..ce92218d48 100644 --- a/src/web/mjs/connectors/Cmoa.mjs +++ b/src/web/mjs/connectors/Cmoa.mjs @@ -26,9 +26,10 @@ export default class Cmoa extends SpeedBinb { async _getChapters(manga) { const request = new Request(new URL(manga.id, this.url), this.requestOptions); - const pages = await this.fetchDOM(request, '#comic_list > .pagination:nth-child(1) li'); + const pages = await this.fetchDOM(request, '#comic_list > .pagination:nth-child(1) li:nth-last-child(2) a'); const chapters = []; - const totalPage = pages.length == 0 ? 1 : pages.length - 1; + const totalPage = pages.length == 0 ? 1 : parseInt(new URL(pages[0].href).searchParams.get('page')); + for (let i = 0; i < totalPage; i++) { const uri = new URL(manga.id, this.url); uri.searchParams.set('page', i + 1); From e83a57e7eabcfd4a0779df3fe1248ad0db0937ca Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:13:22 +0000 Subject: [PATCH 024/109] Fix DiskusScan: use MangaStream (#6624) Fixes https://github.com/manga-download/hakuneko/issues/6622 --- src/web/mjs/connectors/DiskusScan.mjs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/DiskusScan.mjs b/src/web/mjs/connectors/DiskusScan.mjs index 576b6bc4c7..a8588beeb3 100644 --- a/src/web/mjs/connectors/DiskusScan.mjs +++ b/src/web/mjs/connectors/DiskusScan.mjs @@ -1,6 +1,6 @@ -import WordPressMadara from './templates/WordPressMadara.mjs'; +import WordPressMangastream from './templates/WordPressMangastream.mjs'; -export default class DiskusScan extends WordPressMadara { +export default class DiskusScan extends WordPressMangastream { constructor() { super(); @@ -8,5 +8,6 @@ export default class DiskusScan extends WordPressMadara { super.label = 'Diskus Scan'; this.tags = [ 'manga', 'webtoon', 'portuguese', 'scanlation' ]; this.url = 'https://diskusscan.com'; + this.path = '/manga/list-mode'; } -} \ No newline at end of file +} From c91232e1ebf8785d2948e22f2fa92df80351b2f0 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:13:33 +0000 Subject: [PATCH 025/109] FIx GekkouScans : change domain (#6623) --- src/web/mjs/connectors/GekkouScans.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/GekkouScans.mjs b/src/web/mjs/connectors/GekkouScans.mjs index b41a96a8b2..3a589b4673 100644 --- a/src/web/mjs/connectors/GekkouScans.mjs +++ b/src/web/mjs/connectors/GekkouScans.mjs @@ -7,6 +7,6 @@ export default class GekkouScans extends WordPressMadara { super.id = 'gekkouscans'; super.label = 'Gekkou Scans'; this.tags = [ 'manga', 'webtoon', 'portuguese' ]; - this.url = 'https://gekkou.com.br'; + this.url = 'https://gekkouscans.top'; } } From bd05fcd0866c74134ac501b6ea973c349200b71f Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:13:48 +0000 Subject: [PATCH 026/109] FIx MangaNato : fix domain regex (#6618) Fixes https://github.com/manga-download/hakuneko/issues/6617 chapmanganato.to / readmanganato.to (no more .com? ) --- src/web/mjs/connectors/MangaNel.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaNel.mjs b/src/web/mjs/connectors/MangaNel.mjs index a79af47956..8677e83e0d 100644 --- a/src/web/mjs/connectors/MangaNel.mjs +++ b/src/web/mjs/connectors/MangaNel.mjs @@ -33,7 +33,7 @@ export default class MangaNel extends Connector { canHandleURI(uri) { // Test: https://regex101.com/r/aPR3zy/3/tests - return /^(chap|read)?manganato\.com$/.test(uri.hostname); + return /^(chap|read)?manganato\.(com|to)$/.test(uri.hostname); } async _getMangaFromURI(uri) { From e51fa326747b0e070809b4425962dd5c3e0efb8c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:14:01 +0000 Subject: [PATCH 027/109] Fix MangaPill: add referrer for pages (#6613) --- src/web/mjs/connectors/MangaPill.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaPill.mjs b/src/web/mjs/connectors/MangaPill.mjs index 263a0d20d9..b66898994f 100644 --- a/src/web/mjs/connectors/MangaPill.mjs +++ b/src/web/mjs/connectors/MangaPill.mjs @@ -9,6 +9,7 @@ export default class MangaPill extends Connector { super.label = 'Mangapill'; this.tags = [ 'manga', 'english' ]; this.url = 'https://mangapill.com'; + this.requestOptions.headers.set('x-referer', this.url); } async _getMangaFromURI(uri) { @@ -54,6 +55,6 @@ export default class MangaPill extends Connector { async _getPages(chapter) { let request = new Request(new URL(chapter.id, this.url), this.requestOptions); let data = await this.fetchDOM(request, 'source'); - return data.map(element => this.getAbsolutePath(element.dataset.src, request.url)); + return data.map(element => this.createConnectorURI(this.getAbsolutePath(element.dataset.src, request.url))); } } From d23034785f34c027c3da7cb1f20df3966e4b1aea Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:14:36 +0000 Subject: [PATCH 028/109] FIx Mangalek : change domain (#6610) --- src/web/mjs/connectors/Mangalek.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/Mangalek.mjs b/src/web/mjs/connectors/Mangalek.mjs index 319f0a2306..cde3baa21f 100644 --- a/src/web/mjs/connectors/Mangalek.mjs +++ b/src/web/mjs/connectors/Mangalek.mjs @@ -7,7 +7,7 @@ export default class Mangalek extends WordPressMadara { super.id = 'mangalek'; super.label = 'مانجا ليك (Mangalek)'; this.tags = [ 'manga', 'webtoon', 'arabic' ]; - this.url = 'https://mangaleku.com'; + this.url = 'https://manga-lek.net'; this.queryTitleForURI = 'div.profile-manga div.post-title h1'; this.requestOptions.headers.set('x-referer', this.url); } From 0fb5d391da0894e2260567a78e0d9104b3ef227b Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:14:49 +0000 Subject: [PATCH 029/109] FIX NinjaScan: change domain (#6602) --- src/web/mjs/connectors/NinjaScan.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/NinjaScan.mjs b/src/web/mjs/connectors/NinjaScan.mjs index 703a702e3c..7049eca3c8 100644 --- a/src/web/mjs/connectors/NinjaScan.mjs +++ b/src/web/mjs/connectors/NinjaScan.mjs @@ -7,6 +7,6 @@ export default class NinjaScan extends WordPressMadara { super.id = 'ninjascan'; super.label = 'Ninja Scan'; this.tags = [ 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://ninjascan.xyz'; + this.url = 'https://ninjascan.site'; } -} \ No newline at end of file +} From 015127614c73568042c6c00db13cb18fa2de3695 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:15:11 +0000 Subject: [PATCH 030/109] FIX ComicBushi: domain change (#6607) Fixes https://github.com/manga-download/hakuneko/issues/6603 --- src/web/mjs/connectors/ComicBushi.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/ComicBushi.mjs b/src/web/mjs/connectors/ComicBushi.mjs index 69e8bd39c3..544a34b094 100644 --- a/src/web/mjs/connectors/ComicBushi.mjs +++ b/src/web/mjs/connectors/ComicBushi.mjs @@ -5,9 +5,9 @@ export default class ComicBushi extends CoreView { constructor() { super(); super.id = 'comicbushi'; - super.label = 'コミックブシロードWEB (Comic Bushiroad WEB)'; + super.label = 'コミックブシロードWEB (Comic Bushiroad WEB / Growl)'; this.tags = ['manga', 'japanese']; - this.url = 'https://comicbushi-web.com'; + this.url = 'https://comic-growl.com'; this.path = ['/']; this.queryManga = 'section#lineup ul.lineup-list div.lineup-item a'; this.queryMangaTitle = 'h5.title'; @@ -23,4 +23,4 @@ export default class ComicBushi extends CoreView { }; }); } -} \ No newline at end of file +} From 671cdeac42b34bb928b0916b45abae4f813e72ec Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:16:12 +0000 Subject: [PATCH 031/109] FIX AsuraScans: filter more ad (#6595) * FIX AsuraScans: filter more ad * Update AsuraScans.mjs --- src/web/mjs/connectors/AsuraScans.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/AsuraScans.mjs b/src/web/mjs/connectors/AsuraScans.mjs index cb2586ad35..1800051fae 100644 --- a/src/web/mjs/connectors/AsuraScans.mjs +++ b/src/web/mjs/connectors/AsuraScans.mjs @@ -36,7 +36,8 @@ export default class AsuraScans extends WordPressMangastream { /panda_gif_large/i, /2021\/04\/page100-10\.jpg/i, /2021\/03\/20-ending-page-\.jpg/i, - /ENDING-PAGE/i + /ENDING-PAGE/i, + /EndDesignPSD/i ]; let images = []; From fc62df1ae2a12f0c5e53f7616d425e9651393c76 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:16:22 +0000 Subject: [PATCH 032/109] FIX ReaperScansTR: change domain (#6589) also, they changed to MangaStream --- src/web/mjs/connectors/ReaperScansTR.mjs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/web/mjs/connectors/ReaperScansTR.mjs b/src/web/mjs/connectors/ReaperScansTR.mjs index d3fb3dd841..de9ca4413a 100644 --- a/src/web/mjs/connectors/ReaperScansTR.mjs +++ b/src/web/mjs/connectors/ReaperScansTR.mjs @@ -1,17 +1,16 @@ -import WordPressMadara from './templates/WordPressMadara.mjs'; +import WordPressMangastream from './templates/WordPressMangastream.mjs'; -export default class ReaperScansTR extends WordPressMadara { +export default class ReaperScansTR extends WordPressMangastream { constructor() { super(); super.id = 'reaperscanstr'; super.label = 'Reaper Scans (Turkish)'; this.tags = ['webtoon', 'turkish']; - this.url = 'https://reaperscanstr.com'; - this.queryChapters = 'div.chapter-link > a'; - this.queryChaptersTitleBloat ='span.chapter-release-date'; + this.url = 'https://reaperscans.com.tr'; + this.path = '/manga/list-mode/'; this.links = { - login: 'https://reaperscanstr.com/login' + login: 'https://reaperscans.com.tr/login' }; } -} \ No newline at end of file +} From c1ae0be9a82db3342385bd22903ddc56c24edaa4 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:16:52 +0000 Subject: [PATCH 033/109] FIx CeriseScans: change domain (#6593) --- src/web/mjs/connectors/CeriseScans.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/CeriseScans.mjs b/src/web/mjs/connectors/CeriseScans.mjs index 361dcc07bc..1448e36d2f 100644 --- a/src/web/mjs/connectors/CeriseScans.mjs +++ b/src/web/mjs/connectors/CeriseScans.mjs @@ -7,6 +7,6 @@ export default class CeriseScans extends WordPressMadaraNovel { super.id = 'cerisescans'; super.label = 'Cerise Scans'; this.tags = [ 'manga', 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://cerisescan.com'; + this.url = 'https://cerisescan.net'; } } From 94a8597df68b2acea4371953b8ed02595d340c53 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:17:11 +0000 Subject: [PATCH 034/109] Update EvaScans: change label and domain (#6588) Fixes https://github.com/manga-download/hakuneko/issues/6573 --- src/web/mjs/connectors/EvaScans.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/EvaScans.mjs b/src/web/mjs/connectors/EvaScans.mjs index 7721610213..fe480c489e 100644 --- a/src/web/mjs/connectors/EvaScans.mjs +++ b/src/web/mjs/connectors/EvaScans.mjs @@ -5,9 +5,9 @@ export default class EvaScans extends WordPressMadara { constructor() { super(); super.id = 'evascans'; - super.label = 'EvaScans'; + super.label = 'ManWe'; this.tags = [ 'webtoon', 'turkish', 'scanlation' ]; - this.url = 'https://evascans.com'; + this.url = 'https://manwe.pro'; this.requestOptions.headers.set('x-referer', this.url); } -} \ No newline at end of file +} From 15fcec1ecb5194b41db03bc27b380fb2e40fe9fa Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:17:30 +0000 Subject: [PATCH 035/109] FIx TitanManga: Mangastream > Madara (#6587) Fixes https://github.com/manga-download/hakuneko/issues/6582 --- src/web/mjs/connectors/TitanManga.mjs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/web/mjs/connectors/TitanManga.mjs b/src/web/mjs/connectors/TitanManga.mjs index a90c79b267..86eff5afb8 100644 --- a/src/web/mjs/connectors/TitanManga.mjs +++ b/src/web/mjs/connectors/TitanManga.mjs @@ -1,6 +1,6 @@ -import WordPressMangastream from './templates/WordPressMangastream.mjs'; +import WordPressMadara from './templates/WordPressMadara.mjs'; -export default class TitanManga extends WordPressMangastream { +export default class TitanManga extends WordPressMadara { constructor() { super(); @@ -8,6 +8,5 @@ export default class TitanManga extends WordPressMangastream { super.label = 'Titan Manga'; this.tags = [ 'manga', 'turkish', 'webtoon' ]; this.url = 'https://titanmanga.com'; - this.path = '/manga/list-mode/'; } -} \ No newline at end of file +} From e93e7c1744ee7713a1024aff6271dc3a4fe95a44 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:17:39 +0000 Subject: [PATCH 036/109] FIX Yanmaga : use SpeedBinb (#6548) Fixes https://github.com/manga-download/hakuneko/issues/6532 --- src/web/mjs/connectors/Yanmaga.mjs | 80 +++++++++++++++--------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/src/web/mjs/connectors/Yanmaga.mjs b/src/web/mjs/connectors/Yanmaga.mjs index 2d78449fa5..9786cf9124 100644 --- a/src/web/mjs/connectors/Yanmaga.mjs +++ b/src/web/mjs/connectors/Yanmaga.mjs @@ -1,19 +1,15 @@ -import YoungChampion from './YoungChampion.mjs'; +import SpeedBinb from './templates/SpeedBinb.mjs'; -export default class Yanmaga extends YoungChampion { +export default class Yanmaga extends SpeedBinb { constructor() { super(); super.id = 'yanmaga'; super.label = 'Yanmaga'; this.tags = ['manga', 'japanese']; this.url = 'https://yanmaga.jp'; - this.apiUrl = 'https://api2-yanmaga.comici.jp'; this.links = { login: 'https://yanmaga.jp/customers/sign-in' }; - - this.mangaListPath = '/series/list?page={page}'; - this.queryMangaTitleURI = '.detailv2-outline-title'; } async _getMangas() { @@ -28,43 +24,45 @@ export default class Yanmaga extends YoungChampion { } async _getChapters(manga) { + const chapterScript = ` + new Promise(resolve => { + const interval = setInterval(() => { + let morebtn = document.querySelector('.mod-episode-more-button') ; + if (morebtn) morebtn.click() + else { + clearInterval(interval); + const chapters = [...document.querySelectorAll('a.mod-episode-link')]; + resolve(chapters.map(chapter => { + return { + id: chapter.pathname, + title: chapter.querySelector('.mod-episode-title').textContent.trim() + } + })); + } + }, 1000); + }); + `; + const uri = new URL(manga.id, this.url); - const request = new Request(uri); - const dom = await this.fetchDOM(request); - const csrfToken = dom.querySelector('meta[name=csrf-token]').content; - const contents = dom.querySelector('#contents'); - const count = contents ? Math.ceil(contents.dataset.count / 50) : 1; - const chapters = []; - for (let i = 0; i < count; i++) { - const epUri = new URL(`${manga.id}/episodes`, this.url); - epUri.searchParams.set('offset', String(i * 50)); - epUri.searchParams.set('cb', Date.now()); - const epRequest = new Request(epUri); - epRequest.headers.set('x-csrf-token', csrfToken); - const matches = await this.fetchRegex(epRequest, /'beforeend', "(.*)"/g); - for (const value of matches) { - if (!value.includes(' { + if (response.redirected) { + const newurl = new URL(response.url); + return super._getPageList(manga, { id: newurl.pathname+newurl.search }, callback); + } + if (!uri.searchParams.get('cid')) { + throw new Error(`You need to login to see ${chapter.title}`); + } + return super._getPageList(manga, chapter, callback); + }); } - } From 2469461cc7158ebb2028fdab83fb568b425dfa2d Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:17:55 +0000 Subject: [PATCH 037/109] FIX mangaz: change chapter CSS selector (#6540) Fixes https://github.com/manga-download/hakuneko/issues/6537 --- src/web/mjs/connectors/mangaz.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/mangaz.mjs b/src/web/mjs/connectors/mangaz.mjs index 40dbb34c98..dd974a737f 100644 --- a/src/web/mjs/connectors/mangaz.mjs +++ b/src/web/mjs/connectors/mangaz.mjs @@ -81,7 +81,7 @@ export default class Mangaz extends Connector { async _getChapters(manga) { const request = new Request(new URL(manga.id, this.url), this.requestOptions); const data = await this.fetchDOM(request, 'body'); - return data[0].querySelector("li.box") ? [...data[0].querySelectorAll("li.box")].map(ele => { + return data[0].querySelector("li.item") ? [...data[0].querySelectorAll("li.item")].map(ele => { return{ id:ele.querySelector('button').dataset['url'].replace('navi', 'virgo/view'), title:ele.querySelector('span').textContent.trim() @@ -91,4 +91,4 @@ export default class Mangaz extends Connector { title:manga.title }]; } -} \ No newline at end of file +} From 6499a2d06e132d952bd36f45a9424c1dc7d61cf5 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:28:22 +0000 Subject: [PATCH 038/109] FIX GourmetScans: domain change & tweak script (#6531) * FIX GourmetScans: domain change & tweak script Fixes https://github.com/manga-download/hakuneko/issues/6530 * Update GourmetScans.mjs --- src/web/mjs/connectors/GourmetScans.mjs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/web/mjs/connectors/GourmetScans.mjs b/src/web/mjs/connectors/GourmetScans.mjs index 2487907afc..7d6beb58a1 100644 --- a/src/web/mjs/connectors/GourmetScans.mjs +++ b/src/web/mjs/connectors/GourmetScans.mjs @@ -7,7 +7,7 @@ export default class GourmetScans extends WordPressMadara { super.id = 'gourmetscans'; super.label = 'Gourmet Scans'; this.tags = [ 'webtoon', 'english' ]; - this.url = 'https://gourmetscans.net'; + this.url = 'https://gourmetsupremacy.com'; } async _getPages(chapter) { @@ -15,13 +15,20 @@ export default class GourmetScans extends WordPressMadara { const request = new Request(url, this.requestOptions); const script = ` new Promise((resolve, reject) => { - var imgdata = JSON.parse(CryptoJS.AES.decrypt(chapter_data, wpmangaprotectornonce, { - format: CryptoJSAesJson - }).toString(CryptoJS.enc.Utf8)); - resolve(JSON.parse(imgdata)); + try { + let rocketscript = new RocketLazyLoadScripts; + rocketscript._loadEverythingNow(); + } catch (error) {} + + setTimeout(() => { + var imgdata = JSON.parse(CryptoJS.AES.decrypt(chapter_data, wpmangaprotectornonce, { + format: CryptoJSAesJson + }).toString(CryptoJS.enc.Utf8)); + resolve(JSON.parse(imgdata)); + }, 2500); }); `; const data = await Engine.Request.fetchUI(request, script); return data.map(picture => this.createConnectorURI({url : picture, referer : url})); } -} \ No newline at end of file +} From 30d0bc8fd64f71242383c0b09da6a04225d463cd Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:28:46 +0000 Subject: [PATCH 039/109] Fix Miauscan : change domain and with with novels (#6491) Fixes https://github.com/manga-download/hakuneko/issues/6484 --- src/web/mjs/connectors/Miauscan.mjs | 54 ++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/Miauscan.mjs b/src/web/mjs/connectors/Miauscan.mjs index 06b88d291a..ff3d1ba892 100644 --- a/src/web/mjs/connectors/Miauscan.mjs +++ b/src/web/mjs/connectors/Miauscan.mjs @@ -7,7 +7,59 @@ export default class MiauScan extends WordPressMangastream { super.id = 'miauscan'; super.label = 'MiauScan'; this.tags = [ 'manga', 'spanish', 'portuguese', 'scanlation' ]; - this.url = 'https://miauscans.com'; + this.url = 'https://miaucomics.org'; this.path = '/manga/list-mode/'; + + this.novelContainer = 'div.entry-content'; + this.novelContent = 'div#readerarea.rdminimal'; + this.novelFormat = 'image/png'; + this.novelWidth = '56em';// parseInt(1200 / window.devicePixelRatio) + 'px'; + this.novelPadding = '1.5em'; + } + + async _getPages(chapter) { + let request = new Request(new URL(chapter.id, this.url), this.requestOptions); + const data = await this.fetchDOM(request, 'div#readerarea.rdminimal'); + //reader for novel have this class. When its a manga there is no class at all so we call super. + if (data.length == 0) { + return await super._getPages(chapter).filter(image => !/dis2\.jpg/.test(image)); + } + const darkmode = Engine.Settings.NovelColorProfile(); + const script = ` + new Promise((resolve, reject) => { + document.body.style.width = '${this.novelWidth}'; + document.body.style.backgroundColor = '${darkmode.background}'; + let container = document.querySelector('${this.novelContainer}'); + container.style.maxWidth = '${this.novelWidth}'; + container.style.padding = '0'; + container.style.margin = '0'; + container.style.backgroundColor = '${darkmode.background}'; + + let novel = document.querySelector('${this.novelContent}'); + novel.style.padding = '${this.novelPadding}'; + [...novel.querySelectorAll(":not(:empty)")].forEach(ele => { + ele.style.backgroundColor = '${darkmode.background}' + ele.style.color = '${darkmode.text}' + }) + + novel.style.backgroundColor = '${darkmode.background}' + novel.style.color = '${darkmode.text}'; + + let script = document.createElement('script'); + script.onerror = error => reject(error); + script.onload = async function() { + try { + let canvas = await html2canvas(novel); + resolve(canvas.toDataURL('${this.novelFormat}')); + } + catch (error){ + reject(error) + } + } + script.src = 'https://html2canvas.hertzen.com/dist/html2canvas.min.js'; + document.body.appendChild(script); + }); + `; + return [await Engine.Request.fetchUI(request, script, 30000, true)]; } } From 37bf8563b60a528cbab3ab71c483e850f2053c00 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:29:07 +0000 Subject: [PATCH 040/109] Fix CocoManhua/MangaDig : defeat encryption again (#6470) * Fix CocoManhua/MangaDig : defeat encryption again Fixes https://github.com/manga-download/hakuneko/issues/6468 see relevant commit : https://github.com/manga-download/hakuneko-plugins/commit/ec2ad2ace0b4c21066957702f494d93f052398bc * better solution --- src/web/mjs/connectors/MangaDig.mjs | 89 +---------------------------- 1 file changed, 1 insertion(+), 88 deletions(-) diff --git a/src/web/mjs/connectors/MangaDig.mjs b/src/web/mjs/connectors/MangaDig.mjs index 1ee4d5d79f..bfad131d58 100644 --- a/src/web/mjs/connectors/MangaDig.mjs +++ b/src/web/mjs/connectors/MangaDig.mjs @@ -1,91 +1,4 @@ /* eslint-disable */ import ZYMK from './templates/ZYMK.mjs'; -class MangaDig extends ZYMK { - - constructor() { - super(); - super.id = 'mangadig'; - super.label = 'MangaDig'; - this.tags = [ 'webtoon', 'english', 'manga' ]; - this.url = 'https://mangadig.com'; - this.path = '/show?page='; - this.pathSuffix = ''; - this.queryMangas = 'ul.fed-list-info li.fed-list-item a.fed-list-title'; - this.queryMangasPageCount = 'div.fed-page-info a.fed-show-sm-inline'; - this.queryChapters = 'div.all_data_list ul li a'; - this.queryMangaTitle = 'dl.fed-deta-info dd.fed-deta-content h1.fed-part-eone'; - } - - async _getPages(chapter) { - const script = (() => { return require('electron').remote.BrowserWindow.getFocusedWindow().isDevToolsOpened() && require('electron').remote.BrowserWindow.getFocusedWindow().closeDevTools(), atob('KGZ1bmN0aW9uKF8weDUyNzU3YixfMHgyMWIzMjQpe2NvbnN0IF8weDNkOTEzZT1fMHg1YThhLF8weDM2OGQzMz1fMHg1Mjc1N2IoKTt3aGlsZSghIVtdKXt0cnl7Y29uc3QgXzB4M2Q2MzRkPXBhcnNlSW50KF8weDNkOTEzZSgweDEwYywnQVYpXicpKS8oLTB4MioweDk1YSsweGY2NSsweDM1MCkrcGFyc2VJbnQoXzB4M2Q5MTNlKDB4MTFmLCc1YypIJykpLygweDcwMCoweDUrLTB4YjY1Ky0weDE3OTkpKihwYXJzZUludChfMHgzZDkxM2UoMHgxNTEsJzVjKkgnKSkvKDB4YjRhKzB4MTJiKy0weDIxMyoweDYpKSstcGFyc2VJbnQoXzB4M2Q5MTNlKDB4MTQzLCdkZSNHJykpLygweDFjZTEqLTB4MSstMHg1ZistMHg0Ki0weDc1MSkqKC1wYXJzZUludChfMHgzZDkxM2UoMHgxMGUsJ0ZkVWcnKSkvKDB4NjUyKzB4MyotMHg3ZisweDcwKi0weGIpKSstcGFyc2VJbnQoXzB4M2Q5MTNlKDB4ZmUsJ05yeFknKSkvKDB4MSoweDFhZWUrLTB4M2QwKy0weDE3MTgpK3BhcnNlSW50KF8weDNkOTEzZSgweGZmLCdKc3d5JykpLygweDEqLTB4MjFlKy0weDE5OTcqLTB4MSstMHgyKjB4YmI5KSooLXBhcnNlSW50KF8weDNkOTEzZSgweGZiLCdKc3d5JykpLygtMHgxODk5Ky0weGEqLTB4MmYwKzB4MTk1Ki0weDMpKSstcGFyc2VJbnQoXzB4M2Q5MTNlKDB4MTMxLCdwMjA5JykpLygtMHgxZjcxKy0weDNjYiotMHgyKzB4MTdlNCkrcGFyc2VJbnQoXzB4M2Q5MTNlKDB4MTE1LCdtSiV5JykpLygweDJlNSstMHhhYioweDMrLTB4ZGEpO2lmKF8weDNkNjM0ZD09PV8weDIxYjMyNClicmVhaztlbHNlIF8weDM2OGQzM1sncHVzaCddKF8weDM2OGQzM1snc2hpZnQnXSgpKTt9Y2F0Y2goXzB4MTgzMjJlKXtfMHgzNjhkMzNbJ3B1c2gnXShfMHgzNjhkMzNbJ3NoaWZ0J10oKSk7fX19KF8weDVhZWIsLTB4MjlkNyotMHg1ZisweDE2YzA3Ky0weDZhNmFkKSk7ZnVuY3Rpb24gXzB4NWFlYigpe2NvbnN0IF8weDU1ZmRkMj1bJ3NXOFdXNVZkT0NrcmY4bzBtYScsJ1c3cGNITm1SVzUwJywnV1FaZFJJckJGYScsJ1dRTmRWTnVzYXEnLCdXNWxkSUc0VmZTb2x4U29EVzZLcGxDa2wnLCdXTzNkUDNEekZxJywnV08zZFVTa3ZXN0pkSVNvM0Ftb2dqQ296YThrdm84b0hXNmUnLCdXN0pjTEh5U21xJywnejhvTVc2ajJyOG85V1BUVycsJ2x4UmRKU29KV1JqSycsJ2g4a2NpdWlHJywnVzVOY0czSzBXNU8nLCdubW9vVzQzY0pHeGNVRycsJ2YyWmRNQ29QV1I0JywnVzVSZFZNMGtwcScsJ1c3eGNPTjBiVzdsZEd4OERXUjQ2VzR6YVdPcVFEdHhkSXEnLCdGU2src0xTZHZjTmNPOGt1V1A4RycsJ0RmckVlMk8nLCdXUjdkR1NrVFdQaGNKQ29aVzV4Y1ZxdlJXN0JkUzhvVnphJywnV1FtT1c2MHRkbW9PZFd0Y1RkdUlXUlcnLCdqMnJYVzZaZFJXJywnVzQ3Y1VZcGNKU2tTJywnV080Vlc0UzNXUTAnLCdXN2xjU1l1NGhKYScsJ1c0RmRHQ2t1anhEbldQRmNISVMnLCdFQ2tpVzVwY0pta1knLCdtcjNjTUwvY0hta2VDbW9Ca2VxZicsJ2JidTlzdFZkVXgzZExjZkZXN0dsJywnVzdkY1VaMCcsJ1dSN2NNMERZV1JTJywnZ21rZ2Vta0lXUGVJVzVMTldPL2NKMlJkSW1rUmhhJywnbTBCY1Zta2ZXNnBkR2EnLCdXUHhjUHNDWFc3cScsJ1dSbGRLQ2tpZXZ1JywnaXhLYVdRVmRWcScsJ294UmRNOG9iV1JIVlc1T3NFYScsJ1dRbGRWTksxVzczZE94dXknLCdXNFJjSlk4Z2FXJywnV1B4Y05nTFJ2OGtzRjhvRicsJ1dPaGNTWkdNVzZpJywnd21rbFc3dGNNU2tqJywnVzVTSXFtb0NXNnUnLCdpU29uVzdOZE1XJywnYlNrVmQ4a0JXUGEnLCdXNlgvclNveicsJ2hTa3RmbWtuV09DJywnV1FGY09KV0MnLCdwY0x4V1A1TicsJ1dSdGNKcTRYVzdXJywnVzROY1JjQzZocScsJ3NHOFhXUkpkUVNrYW5Tb3RnTjAnLCdod3JGRjhraicsJ29Db0RXN20nLCdXNFpjT0NvQldRdGNKU2taZFNrb3lta3hzQ29KJywnd0NrUWZHR1RXN0NpV09XJywnd1Nrclc0TmNWOGtMJywnVzdSY1VLODFhcUZjSmc0Jywnc1NrR210OFdXN2VuV09pdFc3WG56WmI3JywnRW1rQXJ2R3InLCdXUmxjU2RHM1c1UycsJ1c1ZGNHMXFsVzd5JywnRWJkZFFTb2dXUnhkSGRWY1BTa0F0Q29lJywnb1NrSFc2dnR0bW85V1IxR244b1FGeEdBQXFpJywnbWdMRnRta1huR05jVGEnLCdXN0JjUEdSY1VDay8nLCdydmIwYWh4Y09XJywnRkNra1c0N2NLOGt6JywnY3ZkY1E4a3BXNjgnLCdXUnVWVzZ5eldRZScsJ1dQbGRKOGtzVzdsZFZXJywnRFNrQlc2ZGNPYnhjUEs3ZE1XJywnaXJGY0x2N2NLOGtFJywnVzVwZElHNE9lOG9sajhraVc0Q1dibWt4V09sZE1HJywnQ1p1K2RDbzFBTC9jUUNrR2FDb2dvZTQnLCdEQ2t6V1AvZEtMTmRSWGRkUVNrM2gzalR0cScsJ2hDa2Vjd2kzJywneDNYM3B1RycsJ1c1VmNJd1NmVzVHJywndEdXV1dSVmNJU28wc1Nrc2swRmRLQ2tmd21rUCcsJ25nRFJ4Q2tRb1cnLCdqU294VzVOZEhaVmNLd2ExJywnV1JubFc1aGRJMEMnLCdXNm1mQzhvdVc0VycsJ29MaGRKU29OV1JTJywnV1B0ZE5keGRNWlMnLCdXNFpkTHY4Qm5hJywnaThva1c1N2NSVzNjUUtOZE5Da1NwZTFQJywnVzZUTFdSTHBXNVcyV1BlS1dSYUdXUUtWJywnV1F0Y1NJNGdXN3hjR3EnLCdBU2tsV1IzY0dOWmNMZzBDVzdSY0xNaScsJ1c0WmNLSDhmYmY0JywnVzV0Y1ZZN2NTU2tUJywnV09PeVc0R3FuYScsJ1dRcGNVYldhVzZ0Y0doYXAnLCdqQ2szV1FaZFZIcXpkbWtPdG1rRHZkTmNLYScsJ3VOaVpXUDVvVzY0QWZnNCcsJ1c0eGRLcXU5VzZsY09iZGNRWFJkVnJGZEdta3BXNTgnLCdXUGRjSnV2QVdSM2RTM3BkUXNlJywnaENrQ1dQSmRJZVMnLCdXNmRkUzFlTWhTa2snLCdXUVpkVThrRGNNQycsJ1dReGRSWHZReUtxOVdPZGRPbWszVzQzY0tTbzlXUTRGVzRhMicsJ2hta1pXNHhjUWRGY1JyZlJ3Q29OJywnVzZHa0FTb1VXNU8nLCdCbWttZVl1QycsJ1c2QmRPeFBuV1FwZE1jeXBwTXVLV1JmSSddO18weDVhZWI9ZnVuY3Rpb24oKXtyZXR1cm4gXzB4NTVmZGQyO307cmV0dXJuIF8weDVhZWIoKTt9Y29uc3QgXzB4NGIzODA2PShmdW5jdGlvbigpe2NvbnN0IF8weDI0ODMwZD1fMHg1YThhLF8weDQ3MGM1Mz17J1hpS3R6JzpfMHgyNDgzMGQoMHgxM2EsJ3YwcFEnKSwnVnNGSEInOmZ1bmN0aW9uKF8weDFiZjhmMyxfMHg0MjdhOTEpe3JldHVybiBfMHgxYmY4ZjMrXzB4NDI3YTkxO30sJ3ZFZmtGJzpmdW5jdGlvbihfMHg1OTc0NWUsXzB4MTNkZjE5KXtyZXR1cm4gXzB4NTk3NDVlKF8weDEzZGYxOSk7fSwnaXNmWWInOmZ1bmN0aW9uKF8weDExOGRiYSxfMHgzZTNlYzMpe3JldHVybiBfMHgxMThkYmE8PV8weDNlM2VjMzt9LCdNSlNNUyc6XzB4MjQ4MzBkKDB4MTJlLCdkZSNHJyksJ2NIUnNKJzpmdW5jdGlvbihfMHg0MmZjMGYsXzB4MzdkMjAxKXtyZXR1cm4gXzB4NDJmYzBmPT09XzB4MzdkMjAxO30sJ2pkUlNaJzpfMHgyNDgzMGQoMHgxNGYsJ2F5dlEnKSwnZlVQQ3InOl8weDI0ODMwZCgweDEyMSwnKiNAMycpLCdYWXdjVCc6ZnVuY3Rpb24oXzB4MjlmNTFlLF8weGY3ODFlYSl7cmV0dXJuIF8weDI5ZjUxZSE9PV8weGY3ODFlYTt9LCdKQnNLaCc6XzB4MjQ4MzBkKDB4MTRlLCdANTFrJyksJ05VUUdZJzpfMHgyNDgzMGQoMHgxNjEsJ0ckRTQnKSwnVmR3UnQnOl8weDI0ODMwZCgweGZhLCcpcDYjJyl9O2xldCBfMHgzZTNjOWU9ISFbXTtyZXR1cm4gZnVuY3Rpb24oXzB4MWY2NTNmLF8weDQ0NzE4OSl7Y29uc3QgXzB4YjBiMzNmPV8weDI0ODMwZCxfMHgzOGM2ZWM9eydZYlNHSic6XzB4NDcwYzUzW18weGIwYjMzZigweDEzMCwndjBwUScpXSwndE5HSGgnOmZ1bmN0aW9uKF8weDU3NjIzMixfMHg1Yzk2ODYpe2NvbnN0IF8weDFiMTk4Mz1fMHhiMGIzM2Y7cmV0dXJuIF8weDQ3MGM1M1tfMHgxYjE5ODMoMHgxMzUsJ0FWKV4nKV0oXzB4NTc2MjMyLF8weDVjOTY4Nik7fSwnRklMaW8nOmZ1bmN0aW9uKF8weDNkNzg4MSxfMHgyNTE5NzMpe2NvbnN0IF8weDU0NjUwYT1fMHhiMGIzM2Y7cmV0dXJuIF8weDQ3MGM1M1tfMHg1NDY1MGEoMHgxNDgsJ2M4N2MnKV0oXzB4M2Q3ODgxLF8weDI1MTk3Myk7fSwnTUNzZ0EnOmZ1bmN0aW9uKF8weDM3ZTdiYyxfMHgxMjAxMjEpe2NvbnN0IF8weDUwOTdmMj1fMHhiMGIzM2Y7cmV0dXJuIF8weDQ3MGM1M1tfMHg1MDk3ZjIoMHgxMTAsJ3dtMmsnKV0oXzB4MzdlN2JjLF8weDEyMDEyMSk7fSwnZWd3Q00nOl8weDQ3MGM1M1tfMHhiMGIzM2YoMHgxMDYsJ2tMSlInKV0sJ21za2ZOJzpmdW5jdGlvbihfMHgxYzgyNWEsXzB4ZTgzNTQ5KXtjb25zdCBfMHg0YjQ5MzY9XzB4YjBiMzNmO3JldHVybiBfMHg0NzBjNTNbXzB4NGI0OTM2KDB4MTE3LCdIRFhoJyldKF8weDFjODI1YSxfMHhlODM1NDkpO30sJ2VLYXBmJzpfMHg0NzBjNTNbXzB4YjBiMzNmKDB4MTQwLCdaRzZPJyldLCdlTGtJRCc6XzB4NDcwYzUzW18weGIwYjMzZigweDEwMCwnYmFNYicpXSwnRW1MWXknOmZ1bmN0aW9uKF8weDFhZGY4NCxfMHgzMTliOGIpe2NvbnN0IF8weDI4NGJlZT1fMHhiMGIzM2Y7cmV0dXJuIF8weDQ3MGM1M1tfMHgyODRiZWUoMHgxMzMsJzVjKkgnKV0oXzB4MWFkZjg0LF8weDMxOWI4Yik7fSwnT0lhVkMnOl8weDQ3MGM1M1tfMHhiMGIzM2YoMHgxMjQsJ0s4dTYnKV19O2lmKF8weDQ3MGM1M1tfMHhiMGIzM2YoMHgxMjYsJ15JNVAnKV0oXzB4NDcwYzUzW18weGIwYjMzZigweDExMSwnUkNOZScpXSxfMHg0NzBjNTNbXzB4YjBiMzNmKDB4MTQ2LCdheXZRJyldKSlyZXR1cm4gXzB4MTgyZjIwW18weGIwYjMzZigweDExMiwnYXl2UScpXSgpW18weGIwYjMzZigweDEwZCwnYXl2UScpXShfMHgzOGM2ZWNbXzB4YjBiMzNmKDB4MTUyLCdOcnhZJyldKVtfMHhiMGIzM2YoMHgxNDUsJ0pbY1QnKV0oKVtfMHhiMGIzM2YoMHgxMzksJ01vOFonKV0oXzB4NTBmNjBkKVtfMHhiMGIzM2YoMHhmYywnTW84WicpXShfMHgzOGM2ZWNbXzB4YjBiMzNmKDB4MTJkLCcyZyhBJyldKTtlbHNle2NvbnN0IF8weDExNDA0OT1fMHgzZTNjOWU/ZnVuY3Rpb24oKXtjb25zdCBfMHhlNmRiMTY9XzB4YjBiMzNmLF8weDQ1MThhMT17J2ROYXZqJzpmdW5jdGlvbihfMHg0NDBiN2UsXzB4YmE1NzEyKXtjb25zdCBfMHgxMjVlZjY9XzB4NWE4YTtyZXR1cm4gXzB4MzhjNmVjW18weDEyNWVmNigweDExOSwnWkc2TycpXShfMHg0NDBiN2UsXzB4YmE1NzEyKTt9LCd5TGt6bic6ZnVuY3Rpb24oXzB4MzFlODk3LF8weDI1ZGIzMCl7Y29uc3QgXzB4NmI3NDkxPV8weDVhOGE7cmV0dXJuIF8weDM4YzZlY1tfMHg2Yjc0OTEoMHgxNWIsJ2RlI0cnKV0oXzB4MzFlODk3LF8weDI1ZGIzMCk7fSwnRFNxTEMnOmZ1bmN0aW9uKF8weDFkNTIyMixfMHgyZDM1NzYpe2NvbnN0IF8weDRmYmEzZT1fMHg1YThhO3JldHVybiBfMHgzOGM2ZWNbXzB4NGZiYTNlKDB4MTAyLCdkZSNHJyldKF8weDFkNTIyMixfMHgyZDM1NzYpO30sJ0FJVllDJzpfMHgzOGM2ZWNbXzB4ZTZkYjE2KDB4MTVhLCdheXZRJyldLCdzd2tlYyc6ZnVuY3Rpb24oXzB4MzA2MzU3LF8weDExYTZkNil7Y29uc3QgXzB4ZWQzYWU9XzB4ZTZkYjE2O3JldHVybiBfMHgzOGM2ZWNbXzB4ZWQzYWUoMHgxNTYsJ0ckRTQnKV0oXzB4MzA2MzU3LF8weDExYTZkNik7fX07aWYoXzB4MzhjNmVjW18weGU2ZGIxNigweGY5LCdBVileJyldKF8weDM4YzZlY1tfMHhlNmRiMTYoMHgxNTksJ04qVWYnKV0sXzB4MzhjNmVjW18weGU2ZGIxNigweDEyMCwnZGUjRycpXSkpe2NvbnN0IF8weDU0YWJkMj1fMHgyYzIxZGRbXzB4ZTZkYjE2KDB4MTIyLCdSN3JYJyldKF8weDUwMTA1OSxhcmd1bWVudHMpO3JldHVybiBfMHg1MDFmZWM9bnVsbCxfMHg1NGFiZDI7fWVsc2V7aWYoXzB4NDQ3MTg5KXtpZihfMHgzOGM2ZWNbXzB4ZTZkYjE2KDB4MTFjLCdjODdjJyldKF8weDM4YzZlY1tfMHhlNmRiMTYoMHgxMmEsJ2RlI0cnKV0sXzB4MzhjNmVjW18weGU2ZGIxNigweDEwYSwnMmcoQScpXSkpe2xldCBfMHgyZjhjYWM9JycsXzB4MjE4ODEzPV8weDQ1MThhMVtfMHhlNmRiMTYoMHgxMDgsJ0c2VSknKV0oXzB4MmQ4ODI1W18weGU2ZGIxNigweDE1OCwnRXlCWycpXSgpWzB4MWM3KjB4MSstMHgxYmE4KzB4MTllMioweDFdLF8weDIwMjU5MltfMHhlNmRiMTYoMHgxMmIsJ0pzd3knKV1bXzB4ZTZkYjE2KDB4MTA1LCdGZFVnJyldKCkpO18weDJmOGNhYz1fMHg1OTJkNmJbXzB4ZTZkYjE2KDB4MTE4LCcyZyhBJyldKF8weDIxODgxMyksXzB4MmY4Y2FjPV8weDQ1MThhMVtfMHhlNmRiMTYoMHgxNGEsJ2YwYzknKV0oXzB4NDY1YTIxLF8weDJmOGNhYyk7bGV0IF8weDMwOWVjNj1bXTtmb3IobGV0IF8weDMxZDkyMD0tMHgxN2I5KzB4ODU0KjB4MSstMHgxMiotMHhkYjtfMHg0NTE4YTFbXzB4ZTZkYjE2KDB4MTQ3LCdHJEU0JyldKF8weDMxZDkyMCxfMHgyZjhjYWMpO18weDMxZDkyMCsrKXtfMHgzMDllYzZbXzB4ZTZkYjE2KDB4MTRkLCdheXZRJyldKF8weDFlYzczNFtfMHhlNmRiMTYoMHgxMTYsJ21KJXknKV0oXzB4MzFkOTIwKSk7fV8weDE2OTdlZltfMHhlNmRiMTYoMHgxNWQsJ0hpWzMnKV09XzB4NDUxOGExW18weGU2ZGIxNigweDExZCwnRXlCWycpXTtsZXQgXzB4NTljNTgyPV8weDUwZTJkZFtfMHhlNmRiMTYoMHgxMzIsJ1JDTmUnKV0oKTtjb25zdCBfMHgzMTg4Mjc9e307XzB4MzE4ODI3W18weGU2ZGIxNigweDEzNiwnXkk1UCcpXT1fMHgzMDllYzYsXzB4MzE4ODI3W18weGU2ZGIxNigweDEzYiwnXkk1UCcpXT1fMHg1OWM1ODIsXzB4NDUxOGExW18weGU2ZGIxNigweDEzNCwnd20yaycpXShfMHhhNTNiNWUsXzB4MzE4ODI3KTt9ZWxzZXtjb25zdCBfMHgzYzdlNGY9XzB4NDQ3MTg5W18weGU2ZGIxNigweDE0YywnZjBjOScpXShfMHgxZjY1M2YsYXJndW1lbnRzKTtyZXR1cm4gXzB4NDQ3MTg5PW51bGwsXzB4M2M3ZTRmO319fX06ZnVuY3Rpb24oKXt9O3JldHVybiBfMHgzZTNjOWU9IVtdLF8weDExNDA0OTt9fTt9KCkpLF8weDJlMWFjMz1fMHg0YjM4MDYodGhpcyxmdW5jdGlvbigpe2NvbnN0IF8weDU2ZDZlMT1fMHg1YThhLF8weDNlNDIxYT17fTtfMHgzZTQyMWFbXzB4NTZkNmUxKDB4MTYyLCdyQlheJyldPV8weDU2ZDZlMSgweDE1NCwnKXA2IycpO2NvbnN0IF8weDI0NWNkYz1fMHgzZTQyMWE7cmV0dXJuIF8weDJlMWFjM1tfMHg1NmQ2ZTEoMHgxNTUsJ0V5QlsnKV0oKVtfMHg1NmQ2ZTEoMHgxMjgsJ0c2VSknKV0oXzB4MjQ1Y2RjW18weDU2ZDZlMSgweDEzYywnbUoleScpXSlbXzB4NTZkNmUxKDB4MTVlLCdOcnhZJyldKClbXzB4NTZkNmUxKDB4MTJmLCdOKlVmJyldKF8weDJlMWFjMylbXzB4NTZkNmUxKDB4MTNlLCdyQlheJyldKF8weDI0NWNkY1tfMHg1NmQ2ZTEoMHgxMmMsJ0c2VSknKV0pO30pO2Z1bmN0aW9uIF8weDVhOGEoXzB4MzQzNjYxLF8weDIxOTQ1MCl7Y29uc3QgXzB4Yjg1ZWZlPV8weDVhZWIoKTtyZXR1cm4gXzB4NWE4YT1mdW5jdGlvbihfMHgzMDgyODUsXzB4NDJlYWY1KXtfMHgzMDgyODU9XzB4MzA4Mjg1LSgtMHgxKi0weDE2ZjkrMHgyMTQqMHgyKy0weDhiOCoweDMpO2xldCBfMHg3YTI2ZjU9XzB4Yjg1ZWZlW18weDMwODI4NV07aWYoXzB4NWE4YVsnTm5xZGtBJ109PT11bmRlZmluZWQpe3ZhciBfMHg4ZGExYjg9ZnVuY3Rpb24oXzB4NWE0NzA4KXtjb25zdCBfMHhkNjcyNjA9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5Ky89JztsZXQgXzB4NWNkYmMwPScnLF8weDE4OTMxZj0nJyxfMHg1YTUxMWI9XzB4NWNkYmMwK18weDhkYTFiODtmb3IobGV0IF8weDE2NzI4NT0tMHgzMDgqLTB4MSstMHg5NWMrMHg2YyoweGYsXzB4MjFmOWRiLF8weDE0MTBlMCxfMHhhMTcyY2Y9LTB4NzkrLTB4Mzc1KjB4MysweGFkODtfMHgxNDEwZTA9XzB4NWE0NzA4WydjaGFyQXQnXShfMHhhMTcyY2YrKyk7fl8weDE0MTBlMCYmKF8weDIxZjlkYj1fMHgxNjcyODUlKC0weDU3KjB4MjcrMHgxMDk1Ky0weDM1MCk/XzB4MjFmOWRiKigtMHgzZDEqMHg1Ky0weDI2KjB4NysweDE0NWYpK18weDE0MTBlMDpfMHgxNDEwZTAsXzB4MTY3Mjg1KyslKDB4MTZmNCstMHgyZWMqMHg3Ky0weDI3YykpP18weDVjZGJjMCs9XzB4NWE1MTFiWydjaGFyQ29kZUF0J10oXzB4YTE3MmNmKygweDEqLTB4MTY1KzB4MjE5NysweDEyNiotMHgxYykpLSgweDFjNjkrMHgyMzMqLTB4MisweDE2OSotMHgxMSkhPT0weDQqLTB4MTNmKzB4YSotMHgxZWQrMHgxODNlP1N0cmluZ1snZnJvbUNoYXJDb2RlJ10oMHgzZDUqMHg5KzB4MjFhKy0weDIzOTgmXzB4MjFmOWRiPj4oLSgweDIxZmUrMHgxMjkyKy0weDc4MioweDcpKl8weDE2NzI4NSYweGQ0KjB4MSstMHhkZGIrMHhkMGQqMHgxKSk6XzB4MTY3Mjg1OjB4MjE4KzB4YjgzKjB4MSstMHhkOWIpe18weDE0MTBlMD1fMHhkNjcyNjBbJ2luZGV4T2YnXShfMHgxNDEwZTApO31mb3IobGV0IF8weDQ4NGFlNj0tMHg2NzgrMHgxMjRjKjB4MSstMHhiZDQsXzB4NTRlODI1PV8weDVjZGJjMFsnbGVuZ3RoJ107XzB4NDg0YWU2PF8weDU0ZTgyNTtfMHg0ODRhZTYrKyl7XzB4MTg5MzFmKz0nJScrKCcwMCcrXzB4NWNkYmMwWydjaGFyQ29kZUF0J10oXzB4NDg0YWU2KVsndG9TdHJpbmcnXSgweDFhNzYrMHg2KjB4NGZjKy0weDM4NGUqMHgxKSlbJ3NsaWNlJ10oLSgweDMqLTB4YmQ4KzB4MjY0MistMHgyYjgpKTt9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChfMHgxODkzMWYpO307Y29uc3QgXzB4NDYxZTg4PWZ1bmN0aW9uKF8weDIwZWNjOSxfMHg3NzQ4YWEpe2xldCBfMHg0MjgwNzY9W10sXzB4MWJlZDQxPS0weDUqMHg1NWErMHgxZGE1KjB4MSsweDJlMyotMHgxLF8weDFkMGNhZixfMHhhOGRmNTU9Jyc7XzB4MjBlY2M5PV8weDhkYTFiOChfMHgyMGVjYzkpO2xldCBfMHg0NjE2ZDk7Zm9yKF8weDQ2MTZkOT0weDIyKi0weDU1KzB4MTBjKi0weDI1KzB4MzIwNjtfMHg0NjE2ZDk8MHg4YTMrLTB4MmYqMHhjZisweDFlNWU7XzB4NDYxNmQ5Kyspe18weDQyODA3NltfMHg0NjE2ZDldPV8weDQ2MTZkOTt9Zm9yKF8weDQ2MTZkOT0tMHgxKjB4MmIzKy0weDIqLTB4ZmZkKy0weDFkNDc7XzB4NDYxNmQ5PC0weDdmKi0weGQrMHhjOSotMHgyZisweDFmNzQ7XzB4NDYxNmQ5Kyspe18weDFiZWQ0MT0oXzB4MWJlZDQxK18weDQyODA3NltfMHg0NjE2ZDldK18weDc3NDhhYVsnY2hhckNvZGVBdCddKF8weDQ2MTZkOSVfMHg3NzQ4YWFbJ2xlbmd0aCddKSklKDB4MThkYSstMHgxMDMrLTB4MTZkNyksXzB4MWQwY2FmPV8weDQyODA3NltfMHg0NjE2ZDldLF8weDQyODA3NltfMHg0NjE2ZDldPV8weDQyODA3NltfMHgxYmVkNDFdLF8weDQyODA3NltfMHgxYmVkNDFdPV8weDFkMGNhZjt9XzB4NDYxNmQ5PS0weDk4KjB4MjArLTB4MSoweDFmMDkrMHgzMjA5LF8weDFiZWQ0MT0tMHg4NGYqMHg0Ky0weDgzYyoweDErMHgyKjB4MTRiYztmb3IobGV0IF8weGU0MmY5NT0tMHgzYTYqLTB4NCstMHg3NGIrLTB4NzRkO18weGU0MmY5NTxfMHgyMGVjYzlbJ2xlbmd0aCddO18weGU0MmY5NSsrKXtfMHg0NjE2ZDk9KF8weDQ2MTZkOSsoMHgxKjB4N2U3Ky0weGI2OSotMHgxKy0weDEzNGYpKSUoLTB4ZGNmKzB4MjZkNystMHgxODA4KSxfMHgxYmVkNDE9KF8weDFiZWQ0MStfMHg0MjgwNzZbXzB4NDYxNmQ5XSklKC0weDlkKi0weDMrLTB4MWEyMCstMHgxOTQ5Ki0weDEpLF8weDFkMGNhZj1fMHg0MjgwNzZbXzB4NDYxNmQ5XSxfMHg0MjgwNzZbXzB4NDYxNmQ5XT1fMHg0MjgwNzZbXzB4MWJlZDQxXSxfMHg0MjgwNzZbXzB4MWJlZDQxXT1fMHgxZDBjYWYsXzB4YThkZjU1Kz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKF8weDIwZWNjOVsnY2hhckNvZGVBdCddKF8weGU0MmY5NSleXzB4NDI4MDc2WyhfMHg0MjgwNzZbXzB4NDYxNmQ5XStfMHg0MjgwNzZbXzB4MWJlZDQxXSklKDB4NmMzKi0weDErMHgxODQ5Ki0weDErMHgyKjB4MTAwNildKTt9cmV0dXJuIF8weGE4ZGY1NTt9O18weDVhOGFbJ2ZpZGdPbSddPV8weDQ2MWU4OCxfMHgzNDM2NjE9YXJndW1lbnRzLF8weDVhOGFbJ05ucWRrQSddPSEhW107fWNvbnN0IF8weGI4OThkOT1fMHhiODVlZmVbLTB4MjI2KzB4MTEzYistMHhmMTVdLF8weDI5M2NmOD1fMHgzMDgyODUrXzB4Yjg5OGQ5LF8weDMzNzVkMT1fMHgzNDM2NjFbXzB4MjkzY2Y4XTtpZighXzB4MzM3NWQxKXtpZihfMHg1YThhWydBbFFJbUonXT09PXVuZGVmaW5lZCl7Y29uc3QgXzB4N2IzNmY5PWZ1bmN0aW9uKF8weDQ1Mjk1ZSl7dGhpc1snbEpEakJlJ109XzB4NDUyOTVlLHRoaXNbJ3NLbkRISyddPVsweDEqMHgzODUrLTB4MyotMHgyZWYrMHgxKi0weGM1MSwweGZmOCsweDEqLTB4NjAyKzB4MWE5Ki0weDYsLTB4MjQ0YyotMHgxKy0weDExKi0weDNkKy0weDI4NTldLHRoaXNbJ2dDdUpsVCddPWZ1bmN0aW9uKCl7cmV0dXJuJ25ld1N0YXRlJzt9LHRoaXNbJ0xCbk1PSCddPSdceDVjdytceDIwKlx4NWMoXHg1YylceDIwKntceDVjdytceDIwKicsdGhpc1snQ2NxTlZrJ109J1tceDI3fFx4MjJdLitbXHgyN3xceDIyXTs/XHgyMCp9Jzt9O18weDdiMzZmOVsncHJvdG90eXBlJ11bJ3pmcUF3dyddPWZ1bmN0aW9uKCl7Y29uc3QgXzB4MTM1OGUxPW5ldyBSZWdFeHAodGhpc1snTEJuTU9IJ10rdGhpc1snQ2NxTlZrJ10pLF8weDNlZjdhND1fMHgxMzU4ZTFbJ3Rlc3QnXSh0aGlzWydnQ3VKbFQnXVsndG9TdHJpbmcnXSgpKT8tLXRoaXNbJ3NLbkRISyddWy0weDE3NTYrLTB4MjA0OCsweDM3OWZdOi0tdGhpc1snc0tuREhLJ11bLTB4MTlkYioweDErMHgxOWMqMHgxKzB4MTgzZl07cmV0dXJuIHRoaXNbJ25rdVNLdyddKF8weDNlZjdhNCk7fSxfMHg3YjM2ZjlbJ3Byb3RvdHlwZSddWydua3VTS3cnXT1mdW5jdGlvbihfMHgzNjg1ZjQpe2lmKCFCb29sZWFuKH5fMHgzNjg1ZjQpKXJldHVybiBfMHgzNjg1ZjQ7cmV0dXJuIHRoaXNbJ0hQbVpIcSddKHRoaXNbJ2xKRGpCZSddKTt9LF8weDdiMzZmOVsncHJvdG90eXBlJ11bJ0hQbVpIcSddPWZ1bmN0aW9uKF8weDE3YWIzZil7Zm9yKGxldCBfMHhlY2YxYWE9LTB4MTI5Ki0weDExKy0weGE1OCotMHgxKzB4MmIqLTB4YjMsXzB4MzcwYWEwPXRoaXNbJ3NLbkRISyddWydsZW5ndGgnXTtfMHhlY2YxYWE8XzB4MzcwYWEwO18weGVjZjFhYSsrKXt0aGlzWydzS25ESEsnXVsncHVzaCddKE1hdGhbJ3JvdW5kJ10oTWF0aFsncmFuZG9tJ10oKSkpLF8weDM3MGFhMD10aGlzWydzS25ESEsnXVsnbGVuZ3RoJ107fXJldHVybiBfMHgxN2FiM2YodGhpc1snc0tuREhLJ11bMHgxMTFhKy0weDFhZTErMHgxKjB4OWM3XSk7fSxuZXcgXzB4N2IzNmY5KF8weDVhOGEpWyd6ZnFBd3cnXSgpLF8weDVhOGFbJ0FsUUltSiddPSEhW107fV8weDdhMjZmNT1fMHg1YThhWydmaWRnT20nXShfMHg3YTI2ZjUsXzB4NDJlYWY1KSxfMHgzNDM2NjFbXzB4MjkzY2Y4XT1fMHg3YTI2ZjU7fWVsc2UgXzB4N2EyNmY1PV8weDMzNzVkMTtyZXR1cm4gXzB4N2EyNmY1O30sXzB4NWE4YShfMHgzNDM2NjEsXzB4MjE5NDUwKTt9XzB4MmUxYWMzKCksbmV3IFByb21pc2UoKF8weDRmMTdiNyxfMHg0ZGZmODcpPT57Y29uc3QgXzB4MzFhODRjPV8weDVhOGEsXzB4Mzc4NzM1PXsnc0FiWlgnOmZ1bmN0aW9uKF8weDE0NjlkOSxfMHg0NDg4M2Qpe3JldHVybiBfMHgxNDY5ZDkrXzB4NDQ4ODNkO30sJ3pEc3pLJzpmdW5jdGlvbihfMHg1YzlhOWMsXzB4M2FlYzMxKXtyZXR1cm4gXzB4NWM5YTljKF8weDNhZWMzMSk7fSwnZFN4Y2UnOmZ1bmN0aW9uKF8weDNmMjE0YixfMHgyOTAwNWEpe3JldHVybiBfMHgzZjIxNGI8PV8weDI5MDA1YTt9LCdOYlVjbyc6ZnVuY3Rpb24oXzB4MWYxN2VhLF8weDk1YjY5ZCl7cmV0dXJuIF8weDFmMTdlYT09PV8weDk1YjY5ZDt9LCdPVmRXeSc6XzB4MzFhODRjKDB4MTNmLCdheXZRJyksJ2ZRV1RwJzpfMHgzMWE4NGMoMHgxNWYsJ3dtMmsnKSwnUVFrWXgnOl8weDMxYTg0YygweDExYSwnKiNAMycpLCdlUFZaeCc6ZnVuY3Rpb24oXzB4MTI5MzdhLF8weDE4OGY4Yyl7cmV0dXJuIF8weDEyOTM3YShfMHgxODhmOGMpO319O2xldCBfMHgyNjY0NGM9JycsXzB4ZTY5N2FkPV8weDM3ODczNVtfMHgzMWE4NGMoMHgxMDEsJ3YwcFEnKV0oX19jYWRbXzB4MzFhODRjKDB4MTNkLCdmMGM5JyldKClbMHhlNTkrLTB4MTMqMHgxN2UrLTB4MiotMHg3MDFdLG1oX2luZm9bXzB4MzFhODRjKDB4MTA0LCdOcnhZJyldW18weDMxYTg0YygweDE1NSwnRXlCWycpXSgpKTtfMHgyNjY0NGM9JFtfMHgzMWE4NGMoMHgxMGYsJzIkVVEnKV0oXzB4ZTY5N2FkKSxfMHgyNjY0NGM9XzB4Mzc4NzM1W18weDMxYTg0YygweDEwOSwnOGpQbycpXShwYXJzZUludCxfMHgyNjY0NGMpO2xldCBfMHgzMmY5ZTI9W107Zm9yKGxldCBfMHgzYTJiNDE9LTB4MyoweDFiYistMHgxMGE0Ky0weDIqLTB4YWViO18weDM3ODczNVtfMHgzMWE4NGMoMHgxMjksJ2JhTWInKV0oXzB4M2EyYjQxLF8weDI2NjQ0Yyk7XzB4M2EyYjQxKyspe18weDM3ODczNVtfMHgzMWE4NGMoMHgxMDcsJ2M4N2MnKV0oXzB4Mzc4NzM1W18weDMxYTg0YygweDE0MSwnZ1RwXScpXSxfMHgzNzg3MzVbXzB4MzFhODRjKDB4MTUwLCcyJFVRJyldKT9fMHgzMjNkZjhbXzB4MzFhODRjKDB4MTQ5LCdGZFVnJyldKF8weDVhYjcwMVtfMHgzMWE4NGMoMHgxMzcsJ2R5bjEnKV0oXzB4MmE1Yjc4KSk6XzB4MzJmOWUyW18weDMxYTg0YygweDE0YiwnRXg3WCcpXShfX2NyW18weDMxYTg0YygweDE0MiwnRzZVKScpXShfMHgzYTJiNDEpKTt9X19jcltfMHgzMWE4NGMoMHgxMjUsJylwNiMnKV09XzB4Mzc4NzM1W18weDMxYTg0YygweDE0NCwnXkk1UCcpXTtsZXQgXzB4M2I2NzQwPV9fanNbXzB4MzFhODRjKDB4MTBiLCdKc3d5JyldKCk7Y29uc3QgXzB4MjI2M2ZiPXt9O18weDIyNjNmYltfMHgzMWE4NGMoMHgxNjAsJ3YwcFEnKV09XzB4MzJmOWUyLF8weDIyNjNmYltfMHgzMWE4NGMoMHgxNTMsJ0ZkVWcnKV09XzB4M2I2NzQwLF8weDM3ODczNVtfMHgzMWE4NGMoMHgxMzgsJ0ckRTQnKV0oXzB4NGYxN2I3LF8weDIyNjNmYik7fSk7') })(); - const uri = new URL(chapter.id, this.url); - let request = new Request(uri, this.requestOptions); - const data = await Engine.Request.fetchUI(request, script, 30000); - return data.images.map(image => this.createConnectorURI( { - url : new URL(image, this.url).href, key : data.key}) - ); - } - - async _handleConnectorURI(payload) { - const request = new Request(payload.url, this.requestOptions); - request.headers.set('x-referer', this.url); - request.headers.set('x-origin', this.url); - const response = await fetch(request); - let buffer = ''; - if (payload.key.sigBytes != 0) { - let encrypted = new Uint8Array(await response.arrayBuffer()); - buffer = { - mimeType: response.headers.get('content-type'), - data: await this._decryptPicture(encrypted, payload.key) - }; - } else { - buffer = await response.blob(); - buffer = await this._blobToBuffer(buffer); - } - this._applyRealMime(buffer); - return buffer; - } - - async _decryptPicture(data, key) { - const G = key; - const H = this.convertUint8ArrayToWordArray(new Uint8Array(data)); - const I = { 'ciphertext' : H}; - const options = { - iv : CryptoJS.enc.Utf8.parse('0000000000000000'), - mode : CryptoJS.mode.CBC, - padding : CryptoJS.pad.Pkcs7 - }; - return this.convertWordArrayToUint8Array(CryptoJS.AES.decrypt(I, G, options)); - } - - convertWordArrayToUint8Array (wordArray) { - var len = wordArray.words.length, - u8_array = new Uint8Array(len << 2), - offset = 0, - word, - i; - for (i = 0; i < len; i++) { - word = wordArray.words[i]; - u8_array[offset++] = word >> 24; - u8_array[offset++] = word >> 16 & 255; - u8_array[offset++] = word >> 8 & 255; - u8_array[offset++] = word & 255; - } - return u8_array; - } - - convertUint8ArrayToWordArray(u8Array) { - var words = [], - i = 0, - len = u8Array.length; - while (i < len) { - words.push(u8Array[i++] << 24 | u8Array[i++] << 16 | u8Array[i++] << 8 | u8Array[i++]); - } - return { - sigBytes: words.length * 4, - words: words - }; - } -} - +const _0x13dbda=_0x4076;function _0x4076(_0x1498ef,_0x41b111){const _0x233ed0=_0x2515();return _0x4076=function(_0x3fbd98,_0xf500ac){_0x3fbd98=_0x3fbd98-(-0x5*0x39f+-0x2*-0x701+-0x3e*-0x18);let _0x4924e5=_0x233ed0[_0x3fbd98];return _0x4924e5;},_0x4076(_0x1498ef,_0x41b111);}function _0x2515(){const _0x21789c=['NTMpKS8weDIpK3BhcnNlSW50KF8weDIwNTk0MigweDE1NSkpLzB4MytwYXJzZUlu','x-referer','enc','c2VJbnQoXzB4NWViNDlmKTtsZXQgXzB4NDdjNzY2PVtdO2ZvcihsZXQgXzB4NDBj','Pkcs7','gMhpj','SpSfx','vCXJj','parse','webtoon','headers','ZTI7ZnVuY3Rpb24gXzB4ZTg3MDk1KCl7XzB4NDI0Yjk5JiYoY2xlYXJJbnRlcnZh','hXtpl','dChfMHgyMDU5NDIoMHgxNGEpKS8weDEqKC1wYXJzZUludChfMHgyMDU5NDIoMHgx','ygLVA','OGJjNDIoKTt3aGlsZSghIVtdKXt0cnl7Y29uc3QgXzB4NGQyODJiPS1wYXJzZUlu','fetchBrowser','jDByr','div.all_data_list\x20ul\x20li\x20a','closeDevTools','_applyRealMime','aWUnLCdwdXNoJywnOTg4NDlQSXlDc0InLCc2Njk4NW5kR2hCUCcsJ2dldFBpY1Vy','elUbD','fswFB','MHgxMTJmMDE9XzB4ODQyZWI3O3JldHVybiBfMHgyNjJlMDBbXzB4MTEyZjAxKDB4','WPBtB','oUKLr','MGM2PTB4MTtfMHg0MGMwYzY8PV8weDVlYjQ5ZjtfMHg0MGMwYzYrKyl7XzB4NDdj','wFCsV','blob','Utf8','apply','yOzyB','NjI4MDFTZnpUd0cnLCc0MjE5NjIxdHd2UU5SJywnNjMzMjIwMlllQWhRYSddO18w','eDE1NildWydkZWNyeXB0J109XzB4M2QwNmU2KSxfMHgzZDA2ZTYoXzB4MjYyZTAw','getFocusedWindow','NDBjMGM2KSk7fWNvbnN0IF8weDE0Njc1OT1zZXRJbnRlcnZhbChfMHhlODcwOTUs','NzRiYz1fMHg0ODVmODNbXzB4NzllMjQxXTtyZXR1cm4gXzB4MTk3NGJjO30sXzB4','XSfCw','jRebP','JVpIc','Eizwi','2034440Dxmacw','Ol8weDQyNGI5OX0pKTt9Y29uc3QgXzB4M2QwNmU2PUNyeXB0b0pTW18weDg0MmVi','Jnqnd','_handleConnectorURI','key','dPTyz','iTOJe','FQYkL','Rmapa','axfkC','_decryptPicture','MSxfMHgyOTNhNmYpe18weDc5ZTI0MT1fMHg3OWUyNDEtMHgxNDQ7bGV0IF8weDE5','MHg5ODA5NDEpe2NvbnN0IF8weDIwNTk0Mj1fMHg3OWUyLF8weDVhOTQzYz1fMHgx','DoLQD','ueAIH','yekab','brqLS','_blobToBuffer','ndfDC','UXqNl','content-type','remote','NloSj','AES','10WzLdbq','bCcsJzEwT1BOaFdhJywnZ2V0Q29va2llVmFsdWUnLCdjaXBoZXJ0ZXh0JywnMTY3','ciphertext','NTApKS8weGIpO2lmKF8weDRkMjgyYj09PV8weDk4MDk0MSlicmVhaztlbHNlIF8w','PWZ1bmN0aW9uKF8weDI2MmUwMCxfMHgxN2QyZjcsXzB4MjA1YjdmKXtjb25zdCBf','url','qNlka','Request','dChfMHgyMDU5NDIoMHgxNDYpKS8weDQqKC1wYXJzZUludChfMHgyMDU5NDIoMHgx','AISDT','split','10cGJLwG','map','ul.fed-list-info\x20li.fed-list-item\x20a.fed-list-title','520LXxbbF','c2UoKF8weDE1OTE5MixfMHg0ZWY3NTkpPT57Y29uc3QgXzB4ODQyZWI3PV8weDc5','arrayBuffer','YTk0M2NbJ3NoaWZ0J10oKSk7fX19KF8weDQ4NWYsMHg4Njc4YyksbmV3IFByb21p','convertUint8ArrayToWordArray','sqsZf','XtXXB','pad','set','FuZDu','requestOptions','QNsgT','createConnectorURI','oBQvL','CBC','ODVmODM9XzB4NDg1ZigpO3JldHVybiBfMHg3OWUyPWZ1bmN0aW9uKF8weDc5ZTI0','isDevToolsOpened','pGipu','ojyVI','zNtnZ','NzY2W18weDg0MmViNygweDE0OSldKF9fY3JbXzB4ODQyZWI3KDB4MTRjKV0oXzB4','mode','mangadig','1735020cJrlvw','GOJST','gSxgN','CfnSW','_getPages','WcnJp','6WnSZTx','TlLlI','tags','CakmO','4|1|2|0|3','fFmEt','wUJlv','div.fed-page-info\x20a.fed-show-sm-inline','4|2|1|0|3','MangaDig','MTRmKV0mJihfMHg0MjRiOTk9XzB4MTdkMmY3LENyeXB0b0pTW18weDExMmYwMSgw','2764155chYsPh','0000000000000000','queryMangasPageCount','2139379dyuXsM','4674fWOvCa','LZCnB','oTNRy','SZHnb','AcZzK','NWYoKTt9','PJGmt','NDg9X19jYWRbXzB4ODQyZWI3KDB4MTRlKV0oKVsweDFdK21oX2luZm9bJ3BhZ2Vp','gRBKl','webSecurity','pCfTY','decrypt','LF8weDE3ZDJmNyxfMHgyMDViN2YpO307bGV0IF8weDVlYjQ5Zj0nJyxfMHg1ZWQ5','queryMangaTitle','FWLbZ','jEvuj','length','NzllMihfMHgzM2FhNWYsXzB4OWFmMjAxKTt9KGZ1bmN0aW9uKF8weDE4YmM0Mixf','wsJfh','path','OaaOa','english','images','bChfMHgxNDY3NTkpLF8weDE1OTE5Mih7J2ltYWdlcyc6XzB4NDdjNzY2LCdrZXkn','GKgnI','967329kUKBTc','5|2|9|1|3|4|0|8|6|7|10','manga','2|4|0|3|1','sigBytes','xIIiN','rCgVA','PdwyD','JZKCC','cFJJY','nYHJu','ZnVuY3Rpb24gXzB4NzllMihfMHgzM2FhNWYsXzB4OWFmMjAxKXtjb25zdCBfMHg0','lnjJE','XZLxG','VZWyT','NGIpKS8weDUpK3BhcnNlSW50KF8weDIwNTk0MigweDE1MikpLzB4NistcGFyc2VJ','dl.fed-deta-info\x20dd.fed-deta-content\x20h1.fed-part-eone','utRFz','NDcpKS8weDgqKHBhcnNlSW50KF8weDIwNTk0MigweDE1NCkpLzB4OSkrcGFyc2VJ','KoZrh','get','oeydd','Aucmn','convertWordArrayToUint8Array','bNipJ','vfURd','electron','NygweDE1NildW18weDg0MmViNygweDE0NSldO2xldCBfMHg0MjRiOTk9dW5kZWZp','xilvM','search','MnlUbUVWYicsJzY4MDRvWURtZUsnLCcxNTMyNzE4bVh4UWx1JywnQUVTJywndG9T','qezcN','/show?page=','mJaWv','label','irpaN','124450BOZnzC','eDVhOTQzY1sncHVzaCddKF8weDVhOTQzY1snc2hp','(((.+)+)+)+$','wUaqR','toString','LepwH','DFnCF','PhJCm','cINDi','MTQ4KV0oXzB4NWVkOTQ4KSxfMHg1ZWI0OWY9cGFy','ZCddW18weDg0MmViNygweDE0NCldKCk7XzB4NWViNDlmPSRbXzB4ODQyZWI3KDB4','UwgGp','queryMangas','XeBpl','bnQoXzB4MjA1OTQyKDB4MTUxKSkvMHg3Ky1wYXJzZUludChfMHgyMDU5NDIoMHgx','MHgzZTgpO30pKTtmdW5jdGlvbiBfMHg0ODVmKCl7Y29uc3QgXzB4MmNhMzc0PVsn','eDQ4NWY9ZnVuY3Rpb24oKXtyZXR1cm4gXzB4MmNhMzc0O307cmV0dXJuIF8weDQ4','xtsSY','ZnQnXSgpKTt9Y2F0Y2goXzB4NmYyNjk5KXtfMHg1YTk0M2NbJ3B1c2gnXShfMHg1','queryChapters','pathSuffix','WAwMS','bnQoXzB4MjA1OTQyKDB4MTRkKSkvMHhhKihwYXJzZUludChfMHgyMDU5NDIoMHgx','BrowserWindow','uulFB','QJjVx','push','MWMYE','mWBSq','words','https://mangadig.com','vCaaV','cjnnD','qSwWS','dHJpbmcnLCdkZWNyeXB0JywnMjk2bGRJWVRzJywnMTEwNDhtQ1hGR0MnLCdjb29r','bmVkO0NyeXB0b0pTW18weDg0MmViNygweDE1NildW18weDg0MmViNygweDE0NSld','sRRiZ','rohxW','href','x-origin','jGNvY','owgdJ','constructor','uXUUm','lcOjC'];_0x2515=function(){return _0x21789c;};return _0x2515();}(function(_0x5684f4,_0x248b23){const _0x1a135f=_0x4076,_0x36204f=_0x5684f4();while(!![]){try{const _0x1e7a77=-parseInt(_0x1a135f(0x1d9))/(-0x927+-0x246*-0xb+0x2*-0x7ed)*(parseInt(_0x1a135f(0x250))/(0xffd+0x46b+-0x2ea*0x7))+-parseInt(_0x1a135f(0x213))/(0x1c16*0x1+0xa9*-0x31+0x223*0x2)*(parseInt(_0x1a135f(0x1e7))/(-0x1e97+0xf83+0xf18))+-parseInt(_0x1a135f(0x20f))/(-0x5*-0x259+0xd85*0x1+0x7*-0x39b)*(-parseInt(_0x1a135f(0x204))/(-0x2*0x67f+0x1*0x4c1+0x1a7*0x5))+parseInt(_0x1a135f(0x1fe))/(-0x18e*-0x3+0x6d3*0x2+-0x1249*0x1)+parseInt(_0x1a135f(0x1c1))/(0x2190+0x3f*0x6a+-0x3b9e)+-parseInt(_0x1a135f(0x22c))/(-0x1d37+-0xd04+0x2a44)+-parseInt(_0x1a135f(0x1e4))/(0xf39+-0x2*-0x33e+0x1*-0x15ab)*(-parseInt(_0x1a135f(0x212))/(0x23*0x101+-0x205+-0x1*0x2113));if(_0x1e7a77===_0x248b23)break;else _0x36204f['push'](_0x36204f['shift']());}catch(_0x4a7fdd){_0x36204f['push'](_0x36204f['shift']());}}}(_0x2515,0x7a*-0xb41+-0x53*-0x159e+0x155*0x266));const _0x32901b=(function(){const _0x2347c2=_0x4076,_0xccffb3={};_0xccffb3[_0x2347c2(0x217)]=_0x2347c2(0x20c),_0xccffb3[_0x2347c2(0x282)]=function(_0x48b4fc,_0x5573dc){return _0x48b4fc&_0x5573dc;},_0xccffb3[_0x2347c2(0x1f8)]=function(_0xd928de,_0x31143b){return _0xd928de>>_0x31143b;},_0xccffb3[_0x2347c2(0x221)]=function(_0x5cd8f4,_0x53525c){return _0x5cd8f4&_0x53525c;},_0xccffb3[_0x2347c2(0x1c7)]=function(_0x5145f3,_0x1ee3ea){return _0x5145f3|_0x1ee3ea;},_0xccffb3[_0x2347c2(0x203)]=function(_0x30808c,_0x5d1d5e){return _0x30808c|_0x5d1d5e;},_0xccffb3[_0x2347c2(0x269)]=function(_0x121d23,_0x278b4c){return _0x121d23<<_0x278b4c;},_0xccffb3[_0x2347c2(0x296)]=_0x2347c2(0x210),_0xccffb3[_0x2347c2(0x222)]=function(_0x44c6d0,_0x585f4b){return _0x44c6d0===_0x585f4b;},_0xccffb3[_0x2347c2(0x231)]=_0x2347c2(0x227),_0xccffb3[_0x2347c2(0x293)]=_0x2347c2(0x215),_0xccffb3[_0x2347c2(0x28e)]=_0x2347c2(0x245),_0xccffb3[_0x2347c2(0x1cf)]=function(_0x4adcd8,_0x67ca57){return _0x4adcd8!==_0x67ca57;},_0xccffb3[_0x2347c2(0x1ca)]=_0x2347c2(0x28b);const _0x409048=_0xccffb3;let _0x54fd7e=!![];return function(_0x4d8a51,_0x1a0256){const _0x2427fe=_0x2347c2,_0x247485={'AISDT':_0x409048[_0x2427fe(0x217)],'FuZDu':function(_0x6b623e,_0x38fb28){const _0x8f2b19=_0x2427fe;return _0x409048[_0x8f2b19(0x282)](_0x6b623e,_0x38fb28);},'rohxW':function(_0x39923b,_0x34c90b){const _0x3ce180=_0x2427fe;return _0x409048[_0x3ce180(0x1f8)](_0x39923b,_0x34c90b);},'oUKLr':function(_0x3941e8,_0x4f8176){const _0x2bb0c3=_0x2427fe;return _0x409048[_0x2bb0c3(0x282)](_0x3941e8,_0x4f8176);},'SpSfx':function(_0x562d3b,_0x3ba9f6){const _0x8151ba=_0x2427fe;return _0x409048[_0x8151ba(0x1f8)](_0x562d3b,_0x3ba9f6);},'nYHJu':function(_0x3d1065,_0x1d0833){const _0x58e873=_0x2427fe;return _0x409048[_0x58e873(0x221)](_0x3d1065,_0x1d0833);},'oBQvL':function(_0x194953,_0x5c6f14){const _0x423ce5=_0x2427fe;return _0x409048[_0x423ce5(0x1c7)](_0x194953,_0x5c6f14);},'Aucmn':function(_0x5ed5f5,_0x249fe4){const _0x5f10e3=_0x2427fe;return _0x409048[_0x5f10e3(0x203)](_0x5ed5f5,_0x249fe4);},'CfnSW':function(_0x2fa0bd,_0x20d513){const _0x1cab4f=_0x2427fe;return _0x409048[_0x1cab4f(0x269)](_0x2fa0bd,_0x20d513);},'gSxgN':_0x409048[_0x2427fe(0x296)],'hXtpl':function(_0x37d285,_0x143b46){const _0x3dac59=_0x2427fe;return _0x409048[_0x3dac59(0x222)](_0x37d285,_0x143b46);},'cjnnD':_0x409048[_0x2427fe(0x231)],'dPTyz':_0x409048[_0x2427fe(0x293)],'mJaWv':_0x409048[_0x2427fe(0x28e)]};if(_0x409048[_0x2427fe(0x1cf)](_0x409048[_0x2427fe(0x1ca)],_0x409048[_0x2427fe(0x1ca)])){const _0x589dc3=_0x247485[_0x2427fe(0x1e2)][_0x2427fe(0x1e3)]('|');let _0x53134c=-0x21c2+0x7b*0x43+0x1*0x191;while(!![]){switch(_0x589dc3[_0x53134c++]){case'0':_0x1a2736[_0x5928b7++]=_0x247485[_0x2427fe(0x1f0)](_0x247485[_0x2427fe(0x275)](_0x50f385,0x86f+0x307*-0x9+0x4b6*0x4),-0x1d1*-0xb+0xce0+-0x4*0x7f7);continue;case'1':_0x59ea3c[_0x402a28++]=_0x247485[_0x2427fe(0x297)](_0x247485[_0x2427fe(0x283)](_0x57aeee,0x1e63+-0x944+-0x9*0x257),-0x1205+0x1cf6+-0x9f2);continue;case'2':_0x36ca85[_0x3386e2++]=_0x247485[_0x2427fe(0x275)](_0x481235,0x1b15*-0x1+0x1247+0x8e6);continue;case'3':_0x379512[_0x12f3b3++]=_0x247485[_0x2427fe(0x236)](_0x4f5e2a,0x216e+0xd13+0x32*-0xe9);continue;case'4':_0x2fc793=_0x54617d[_0x2427fe(0x26d)][_0x29f6a7];continue;}break;}}else{const _0x46cc98=_0x54fd7e?function(){const _0x5e056e=_0x2427fe;if(_0x247485[_0x5e056e(0x289)](_0x247485[_0x5e056e(0x270)],_0x247485[_0x5e056e(0x270)])){if(_0x1a0256){if(_0x247485[_0x5e056e(0x289)](_0x247485[_0x5e056e(0x1c6)],_0x247485[_0x5e056e(0x24d)]))_0x1cfd00[_0x5e056e(0x26a)](_0x247485[_0x5e056e(0x1f4)](_0x247485[_0x5e056e(0x1f4)](_0x247485[_0x5e056e(0x242)](_0x247485[_0x5e056e(0x201)](_0x5e3f87[_0x428524++],0x1*-0x1cc7+-0x2360+0x403f),_0x247485[_0x5e056e(0x201)](_0x546e01[_0x5d5845++],-0x1*-0x1636+0x55d*-0x1+-0x10c9)),_0x247485[_0x5e056e(0x201)](_0x2f4006[_0x592d1c++],0x75+0xaf5+0x2*-0x5b1)),_0x1ad9a0[_0x44d329++]));else{const _0x5e9d46=_0x1a0256[_0x5e056e(0x29c)](_0x4d8a51,arguments);return _0x1a0256=null,_0x5e9d46;}}}else{const _0x5d99dd=this[_0x5e056e(0x1eb)](new _0x33b603(_0x2902c1)),_0x3bebea={};_0x3bebea[_0x5e056e(0x1db)]=_0x5d99dd;const _0x28a37c=_0x3bebea,_0x1940f9={'iv':_0xb41ad4[_0x5e056e(0x27f)][_0x5e056e(0x29b)][_0x5e056e(0x285)](_0x247485[_0x5e056e(0x200)]),'mode':_0x562434[_0x5e056e(0x1fc)][_0x5e056e(0x1f5)],'padding':_0x1d3665[_0x5e056e(0x1ee)][_0x5e056e(0x281)]};return this[_0x5e056e(0x243)](_0x5acf28[_0x5e056e(0x1d8)][_0x5e056e(0x21e)](_0x28a37c,_0x9bbcde[_0x5e056e(0x1c5)],_0x1940f9));}}:function(){};return _0x54fd7e=![],_0x46cc98;}};}()),_0x2751a6=_0x32901b(this,function(){const _0x4e0d=_0x4076,_0x2696c4={};_0x2696c4[_0x4e0d(0x238)]=_0x4e0d(0x252);const _0x236c89=_0x2696c4;return _0x2751a6[_0x4e0d(0x254)]()[_0x4e0d(0x249)](_0x236c89[_0x4e0d(0x238)])[_0x4e0d(0x254)]()[_0x4e0d(0x27a)](_0x2751a6)[_0x4e0d(0x249)](_0x236c89[_0x4e0d(0x238)]);});_0x2751a6();class MangaDig extends ZYMK{constructor(){const _0x599263=_0x4076,_0x653e2d={};_0x653e2d[_0x599263(0x258)]=_0x599263(0x22d),_0x653e2d[_0x599263(0x1d1)]=_0x599263(0x286),_0x653e2d[_0x599263(0x1f2)]=_0x599263(0x228),_0x653e2d[_0x599263(0x255)]=_0x599263(0x22e),_0x653e2d[_0x599263(0x26c)]=_0x599263(0x1fd),_0x653e2d[_0x599263(0x1d0)]=_0x599263(0x26e),_0x653e2d[_0x599263(0x248)]=_0x599263(0x24c),_0x653e2d[_0x599263(0x25d)]=_0x599263(0x20b),_0x653e2d[_0x599263(0x239)]=_0x599263(0x28f),_0x653e2d[_0x599263(0x1ec)]=_0x599263(0x1e6),_0x653e2d[_0x599263(0x278)]=_0x599263(0x20d),_0x653e2d[_0x599263(0x1c0)]=_0x599263(0x23c);const _0xe254a8=_0x653e2d,_0x33f15a=_0xe254a8[_0x599263(0x258)][_0x599263(0x1e3)]('|');let _0x325936=-0x149b+-0x15ec+0x3*0xe2d;while(!![]){switch(_0x33f15a[_0x325936++]){case'0':this[_0x599263(0x264)]='';continue;case'1':this[_0x599263(0x206)]=[_0xe254a8[_0x599263(0x1d1)],_0xe254a8[_0x599263(0x1f2)],_0xe254a8[_0x599263(0x255)]];continue;case'2':super['id']=_0xe254a8[_0x599263(0x26c)];continue;case'3':this[_0x599263(0x1de)]=_0xe254a8[_0x599263(0x1d0)];continue;case'4':this[_0x599263(0x226)]=_0xe254a8[_0x599263(0x248)];continue;case'5':super();continue;case'6':this[_0x599263(0x211)]=_0xe254a8[_0x599263(0x25d)];continue;case'7':this[_0x599263(0x263)]=_0xe254a8[_0x599263(0x239)];continue;case'8':this[_0x599263(0x25c)]=_0xe254a8[_0x599263(0x1ec)];continue;case'9':super[_0x599263(0x24e)]=_0xe254a8[_0x599263(0x278)];continue;case'10':this[_0x599263(0x220)]=_0xe254a8[_0x599263(0x1c0)];continue;}break;}}async[_0x13dbda(0x202)](_0x5f11d4){const _0x2165c8=_0x13dbda,_0x2e2890={'qSwWS':function(_0x5eb294,_0x5c8b96){return _0x5eb294===_0x5c8b96;},'xtsSY':_0x2165c8(0x1be),'FQYkL':_0x2165c8(0x299),'qNlka':function(_0x44acb6,_0x1dcc8c){return _0x44acb6(_0x1dcc8c);},'JVpIc':_0x2165c8(0x246),'WAwMS':function(_0x3d104f,_0x57d00c){return _0x3d104f(_0x57d00c);},'GOJST':function(_0x5dbd21,_0x295122){return _0x5dbd21(_0x295122);},'vCaaV':_0x2165c8(0x237)+_0x2165c8(0x1f6)+_0x2165c8(0x1cc)+_0x2165c8(0x1bc)+_0x2165c8(0x224)+_0x2165c8(0x1cd)+_0x2165c8(0x28c)+_0x2165c8(0x28a)+_0x2165c8(0x27d)+_0x2165c8(0x1e1)+_0x2165c8(0x23b)+_0x2165c8(0x25e)+_0x2165c8(0x23e)+_0x2165c8(0x266)+_0x2165c8(0x1dc)+_0x2165c8(0x251)+(_0x2165c8(0x262)+_0x2165c8(0x1ea)+_0x2165c8(0x1e8)+_0x2165c8(0x288)+_0x2165c8(0x22a)+_0x2165c8(0x1c2)+_0x2165c8(0x247)+_0x2165c8(0x273)+_0x2165c8(0x1dd)+_0x2165c8(0x295)+_0x2165c8(0x20e)+_0x2165c8(0x1b9)+_0x2165c8(0x21f)+_0x2165c8(0x21a)+_0x2165c8(0x25a)+_0x2165c8(0x259))+(_0x2165c8(0x280)+_0x2165c8(0x298)+_0x2165c8(0x1fb)+_0x2165c8(0x1bb)+_0x2165c8(0x25f)+_0x2165c8(0x24a)+_0x2165c8(0x272)+_0x2165c8(0x292)+_0x2165c8(0x1da)+_0x2165c8(0x1b8)+_0x2165c8(0x260)+_0x2165c8(0x218))},_0x259086=((()=>{const _0xeac6cd=_0x2165c8;if(_0x2e2890[_0xeac6cd(0x271)](_0x2e2890[_0xeac6cd(0x261)],_0x2e2890[_0xeac6cd(0x1c8)])){const _0x18ddd9=_0x343b9b[_0xeac6cd(0x29c)](_0x3f3029,arguments);return _0x421a47=null,_0x18ddd9;}else return _0x2e2890[_0xeac6cd(0x1df)](require,_0x2e2890[_0xeac6cd(0x1bf)])[_0xeac6cd(0x1d6)][_0xeac6cd(0x267)][_0xeac6cd(0x1ba)]()[_0xeac6cd(0x1f7)]()&&_0x2e2890[_0xeac6cd(0x265)](require,_0x2e2890[_0xeac6cd(0x1bf)])[_0xeac6cd(0x1d6)][_0xeac6cd(0x267)][_0xeac6cd(0x1ba)]()[_0xeac6cd(0x290)](),_0x2e2890[_0xeac6cd(0x1ff)](atob,_0x2e2890[_0xeac6cd(0x26f)]);})()),_0x26a5ae=new URL(_0x5f11d4['id'],this[_0x2165c8(0x1de)]);let _0x1fae31=new Request(_0x26a5ae,this[_0x2165c8(0x1f1)]);const _0x3042d3={};_0x3042d3[_0x2165c8(0x229)]=!![],_0x3042d3[_0x2165c8(0x21c)]=!![];const _0x13aebc=await Engine[_0x2165c8(0x1e0)][_0x2165c8(0x28d)](_0x1fae31,undefined,_0x259086,_0x3042d3,0xac+-0xbbc9*-0x1+-0x4745);return _0x13aebc[_0x2165c8(0x229)][_0x2165c8(0x1e5)](_0x1e21e5=>this[_0x2165c8(0x1f3)]({'url':new URL(_0x1e21e5,this[_0x2165c8(0x1de)])[_0x2165c8(0x276)],'key':_0x13aebc[_0x2165c8(0x1c5)]}));}async[_0x13dbda(0x1c4)](_0x1d8bb9){const _0x55ae7d=_0x13dbda,_0x8d1c9d={'irpaN':_0x55ae7d(0x252),'fswFB':_0x55ae7d(0x27e),'uulFB':_0x55ae7d(0x277),'SZHnb':function(_0x1a2096,_0x202771){return _0x1a2096(_0x202771);},'PhJCm':function(_0x10a183,_0xc017b1){return _0x10a183!=_0xc017b1;},'CakmO':function(_0x1e16b8,_0x55456e){return _0x1e16b8!==_0x55456e;},'yOzyB':_0x55ae7d(0x244),'TlLlI':_0x55ae7d(0x1f9),'DoLQD':_0x55ae7d(0x1d5),'GKgnI':function(_0x67399d,_0x56e5bd){return _0x67399d!==_0x56e5bd;},'utRFz':_0x55ae7d(0x25b)},_0x289c9e=new Request(_0x1d8bb9[_0x55ae7d(0x1de)],this[_0x55ae7d(0x1f1)]);_0x289c9e[_0x55ae7d(0x287)][_0x55ae7d(0x1ef)](_0x8d1c9d[_0x55ae7d(0x294)],this[_0x55ae7d(0x1de)]),_0x289c9e[_0x55ae7d(0x287)][_0x55ae7d(0x1ef)](_0x8d1c9d[_0x55ae7d(0x268)],this[_0x55ae7d(0x1de)]);const _0x5320a5=await _0x8d1c9d[_0x55ae7d(0x216)](fetch,_0x289c9e);let _0x51eb43='';if(_0x8d1c9d[_0x55ae7d(0x257)](_0x1d8bb9[_0x55ae7d(0x1c5)][_0x55ae7d(0x230)],-0x1*0x6e3+0x239a+0x1cb7*-0x1)){if(_0x8d1c9d[_0x55ae7d(0x207)](_0x8d1c9d[_0x55ae7d(0x1b7)],_0x8d1c9d[_0x55ae7d(0x205)])){let _0x26343b=new Uint8Array(await _0x5320a5[_0x55ae7d(0x1e9)]());_0x51eb43={'mimeType':_0x5320a5[_0x55ae7d(0x287)][_0x55ae7d(0x240)](_0x8d1c9d[_0x55ae7d(0x1ce)]),'data':await this[_0x55ae7d(0x1cb)](_0x26343b,_0x1d8bb9)};}else return _0x20b15e[_0x55ae7d(0x254)]()[_0x55ae7d(0x249)](QXynwH[_0x55ae7d(0x24f)])[_0x55ae7d(0x254)]()[_0x55ae7d(0x27a)](_0x58a337)[_0x55ae7d(0x249)](QXynwH[_0x55ae7d(0x24f)]);}else{if(_0x8d1c9d[_0x55ae7d(0x22b)](_0x8d1c9d[_0x55ae7d(0x23d)],_0x8d1c9d[_0x55ae7d(0x23d)])){const _0x44e7b0=_0x2a2465?function(){const _0x1cd16d=_0x55ae7d;if(_0x8085cc){const _0x294997=_0x524cdb[_0x1cd16d(0x29c)](_0x2b24bd,arguments);return _0x538ab5=null,_0x294997;}}:function(){};return _0x2c8a6c=![],_0x44e7b0;}else _0x51eb43=await _0x5320a5[_0x55ae7d(0x29a)](),_0x51eb43=await this[_0x55ae7d(0x1d2)](_0x51eb43);}return this[_0x55ae7d(0x291)](_0x51eb43),_0x51eb43;}async[_0x13dbda(0x1cb)](_0xe99a30,_0x89f40c){const _0x3974eb=_0x13dbda,_0x49277f={};_0x49277f[_0x3974eb(0x21d)]=_0x3974eb(0x210);const _0x18fa36=_0x49277f,_0xe6d8ee=this[_0x3974eb(0x1eb)](new Uint8Array(_0xe99a30)),_0x36eb4c={};_0x36eb4c[_0x3974eb(0x1db)]=_0xe6d8ee;const _0x538849=_0x36eb4c,_0x510bc1={'iv':CryptoJS[_0x3974eb(0x27f)][_0x3974eb(0x29b)][_0x3974eb(0x285)](_0x18fa36[_0x3974eb(0x21d)]),'mode':CryptoJS[_0x3974eb(0x1fc)][_0x3974eb(0x1f5)],'padding':CryptoJS[_0x3974eb(0x1ee)][_0x3974eb(0x281)]};return this[_0x3974eb(0x243)](CryptoJS[_0x3974eb(0x1d8)][_0x3974eb(0x21e)](_0x538849,_0x89f40c[_0x3974eb(0x1c5)],_0x510bc1));}[_0x13dbda(0x243)](_0x2a9dae){const _0x19d985=_0x13dbda,_0x48005a={};_0x48005a[_0x19d985(0x209)]=function(_0x5a6f10,_0x388af1){return _0x5a6f10<<_0x388af1;},_0x48005a[_0x19d985(0x235)]=function(_0x27b198,_0x5d34ff){return _0x27b198<_0x5d34ff;},_0x48005a[_0x19d985(0x256)]=_0x19d985(0x208),_0x48005a[_0x19d985(0x214)]=function(_0x14e972,_0x322e3f){return _0x14e972&_0x322e3f;},_0x48005a[_0x19d985(0x284)]=function(_0x513b2f,_0x112f81){return _0x513b2f>>_0x112f81;},_0x48005a[_0x19d985(0x1bd)]=function(_0x756469,_0x26e60d){return _0x756469&_0x26e60d;},_0x48005a[_0x19d985(0x1c3)]=function(_0x459462,_0x47bc26){return _0x459462&_0x47bc26;},_0x48005a[_0x19d985(0x225)]=function(_0x484c03,_0x3b58be){return _0x484c03<_0x3b58be;},_0x48005a[_0x19d985(0x23f)]=function(_0x1c0949,_0x87c63d){return _0x1c0949!==_0x87c63d;},_0x48005a[_0x19d985(0x219)]=_0x19d985(0x27b),_0x48005a[_0x19d985(0x232)]=_0x19d985(0x22f),_0x48005a[_0x19d985(0x23a)]=function(_0x41e130,_0x3be1d2){return _0x41e130>>_0x3be1d2;},_0x48005a[_0x19d985(0x21b)]=function(_0x2d4316,_0x34b0cb){return _0x2d4316&_0x34b0cb;},_0x48005a[_0x19d985(0x26b)]=function(_0x5d1946,_0x29c284){return _0x5d1946>>_0x29c284;};const _0x1ac2ff=_0x48005a;let _0x47f9f0=_0x2a9dae[_0x19d985(0x26d)][_0x19d985(0x223)],_0x52b68f=new Uint8Array(_0x1ac2ff[_0x19d985(0x209)](_0x47f9f0,0x1674+0x3*-0x373+-0x1*0xc19)),_0x413a87=-0x9*-0x40e+0x1168+-0x35e6,_0x4f7918,_0x2dfbbe;for(_0x2dfbbe=-0x18cb+-0x2652+0x3f1d;_0x1ac2ff[_0x19d985(0x225)](_0x2dfbbe,_0x47f9f0);_0x2dfbbe++){if(_0x1ac2ff[_0x19d985(0x23f)](_0x1ac2ff[_0x19d985(0x219)],_0x1ac2ff[_0x19d985(0x219)])){let _0x1254bc=_0x4a96c4[_0x19d985(0x26d)][_0x19d985(0x223)],_0x724dc4=new _0x14f215(_0x1ac2ff[_0x19d985(0x209)](_0x1254bc,0x6d2+0x4*0x658+-0x14*0x19c)),_0x1535e8=0x3b*0x1f+-0x1ac3*0x1+0x139e,_0x1e7138,_0x42b01e;for(_0x42b01e=-0x1f1d+-0x3b*-0x3b+0x1184;_0x1ac2ff[_0x19d985(0x235)](_0x42b01e,_0x1254bc);_0x42b01e++){const _0x2c4885=_0x1ac2ff[_0x19d985(0x256)][_0x19d985(0x1e3)]('|');let _0x4ea739=0x2*0x94b+-0xe58*-0x2+0x2f46*-0x1;while(!![]){switch(_0x2c4885[_0x4ea739++]){case'0':_0x724dc4[_0x1535e8++]=_0x1ac2ff[_0x19d985(0x214)](_0x1ac2ff[_0x19d985(0x284)](_0x1e7138,0x1*0x1442+0x121b+-0xcc7*0x3),0x3*0xab+0xd09*-0x2+0x8*0x322);continue;case'1':_0x724dc4[_0x1535e8++]=_0x1ac2ff[_0x19d985(0x284)](_0x1e7138,0x2f*-0x60+-0x1b24+0x2cdc);continue;case'2':_0x724dc4[_0x1535e8++]=_0x1ac2ff[_0x19d985(0x1bd)](_0x1ac2ff[_0x19d985(0x284)](_0x1e7138,-0x12f1+-0xd*0x107+-0x13*-0x1b4),0x1cde+-0x35e*-0x6+-0x3013);continue;case'3':_0x724dc4[_0x1535e8++]=_0x1ac2ff[_0x19d985(0x1c3)](_0x1e7138,-0x1*0x1b0a+0x5*0x32b+0xc32);continue;case'4':_0x1e7138=_0x249251[_0x19d985(0x26d)][_0x42b01e];continue;}break;}}return _0x724dc4;}else{const _0x3bc1a3=_0x1ac2ff[_0x19d985(0x232)][_0x19d985(0x1e3)]('|');let _0x13091d=0x26e3+0x2*-0xc77+-0xdf5;while(!![]){switch(_0x3bc1a3[_0x13091d++]){case'0':_0x52b68f[_0x413a87++]=_0x1ac2ff[_0x19d985(0x1c3)](_0x1ac2ff[_0x19d985(0x23a)](_0x4f7918,-0x11ad+0xff3+-0x1ca*-0x1),0x1706+0x1d5e+-0x3365);continue;case'1':_0x52b68f[_0x413a87++]=_0x1ac2ff[_0x19d985(0x1c3)](_0x4f7918,0x95c+-0x228*-0xe+0x8b*-0x47);continue;case'2':_0x4f7918=_0x2a9dae[_0x19d985(0x26d)][_0x2dfbbe];continue;case'3':_0x52b68f[_0x413a87++]=_0x1ac2ff[_0x19d985(0x21b)](_0x1ac2ff[_0x19d985(0x26b)](_0x4f7918,-0xed7*-0x1+0x1265+-0xa*0x352),-0x2491+-0x77d+0x13*0x25f);continue;case'4':_0x52b68f[_0x413a87++]=_0x1ac2ff[_0x19d985(0x284)](_0x4f7918,0x1b38+-0x16f*-0x13+-0x365d);continue;}break;}}}return _0x52b68f;}[_0x13dbda(0x1eb)](_0x7cd1ef){const _0x4ea9fd=_0x13dbda,_0x5d2382={};_0x5d2382[_0x4ea9fd(0x233)]=function(_0x8a2f4f,_0x4e60c3){return _0x8a2f4f<_0x4e60c3;},_0x5d2382[_0x4ea9fd(0x1d4)]=function(_0x4b6473,_0x9fe6f7){return _0x4b6473|_0x9fe6f7;},_0x5d2382[_0x4ea9fd(0x1d7)]=function(_0xef367a,_0xd16ed){return _0xef367a|_0xd16ed;},_0x5d2382[_0x4ea9fd(0x1fa)]=function(_0x2f1e27,_0x5b84d8){return _0x2f1e27|_0x5b84d8;},_0x5d2382[_0x4ea9fd(0x253)]=function(_0x176bf3,_0x40b3b9){return _0x176bf3<<_0x40b3b9;},_0x5d2382[_0x4ea9fd(0x24b)]=function(_0x225cf8,_0xba5f5a){return _0x225cf8<<_0xba5f5a;},_0x5d2382[_0x4ea9fd(0x241)]=function(_0x523c16,_0x20e370){return _0x523c16*_0x20e370;},_0x5d2382[_0x4ea9fd(0x1d3)]=function(_0x5338fd,_0x4588b9){return _0x5338fd===_0x4588b9;},_0x5d2382[_0x4ea9fd(0x279)]=_0x4ea9fd(0x20a),_0x5d2382[_0x4ea9fd(0x274)]=_0x4ea9fd(0x234),_0x5d2382[_0x4ea9fd(0x27c)]=function(_0xe38bdd,_0x4e4cf8){return _0xe38bdd|_0x4e4cf8;},_0x5d2382[_0x4ea9fd(0x1ed)]=function(_0x18e8a1,_0x540fd7){return _0x18e8a1|_0x540fd7;},_0x5d2382[_0x4ea9fd(0x1c9)]=function(_0x36c233,_0x43c2f4){return _0x36c233<<_0x43c2f4;};const _0x5726be=_0x5d2382;let _0x3681ba=[],_0x1f325c=0x1*-0x1763+0x2*-0xd8d+-0x327d*-0x1,_0x4e00a6=_0x7cd1ef[_0x4ea9fd(0x223)];while(_0x5726be[_0x4ea9fd(0x233)](_0x1f325c,_0x4e00a6)){if(_0x5726be[_0x4ea9fd(0x1d3)](_0x5726be[_0x4ea9fd(0x279)],_0x5726be[_0x4ea9fd(0x274)])){let _0x593714=[],_0x4b43f5=-0x262d+0x1062+-0x31d*-0x7,_0x4d6dcb=_0x48788a[_0x4ea9fd(0x223)];while(_0x5726be[_0x4ea9fd(0x233)](_0x4b43f5,_0x4d6dcb)){_0x593714[_0x4ea9fd(0x26a)](_0x5726be[_0x4ea9fd(0x1d4)](_0x5726be[_0x4ea9fd(0x1d7)](_0x5726be[_0x4ea9fd(0x1fa)](_0x5726be[_0x4ea9fd(0x253)](_0x261e7d[_0x4b43f5++],0x769*-0x1+-0x2b*0x7b+0xe*0x203),_0x5726be[_0x4ea9fd(0x253)](_0x304c11[_0x4b43f5++],-0x1*-0x1e3a+0x4cd*0x1+-0x22f7*0x1)),_0x5726be[_0x4ea9fd(0x24b)](_0x2dd2b4[_0x4b43f5++],0xc37*-0x1+0x149b+-0x85c)),_0x1815ae[_0x4b43f5++]));}return{'sigBytes':_0x5726be[_0x4ea9fd(0x241)](_0x593714[_0x4ea9fd(0x223)],-0xa6*-0x12+-0x2*-0x642+-0x182c),'words':_0x593714};}else _0x3681ba[_0x4ea9fd(0x26a)](_0x5726be[_0x4ea9fd(0x1d7)](_0x5726be[_0x4ea9fd(0x27c)](_0x5726be[_0x4ea9fd(0x1ed)](_0x5726be[_0x4ea9fd(0x24b)](_0x7cd1ef[_0x1f325c++],0x161*-0x2+0xca4+-0x9ca*0x1),_0x5726be[_0x4ea9fd(0x253)](_0x7cd1ef[_0x1f325c++],0x1*-0x7b2+-0x18d6*0x1+0x7*0x4a8)),_0x5726be[_0x4ea9fd(0x1c9)](_0x7cd1ef[_0x1f325c++],0x6d*0x26+0x22a6+0xcb3*-0x4)),_0x7cd1ef[_0x1f325c++]));}return{'sigBytes':_0x5726be[_0x4ea9fd(0x241)](_0x3681ba[_0x4ea9fd(0x223)],0x26d8+0x62a*0x3+-0x2e*0x13f),'words':_0x3681ba};}} export default MangaDig; From 4bdece250fca19f1b0fdc5a3eeef303a481eb627 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:36:07 +0000 Subject: [PATCH 041/109] FIX Luscious: api change (#6599) * FIX Luscious: api change Fixes https://github.com/manga-download/hakuneko/issues/6598 * fix indent --- src/web/mjs/connectors/Luscious.mjs | 118 +++++++++++++++++++--------- 1 file changed, 81 insertions(+), 37 deletions(-) diff --git a/src/web/mjs/connectors/Luscious.mjs b/src/web/mjs/connectors/Luscious.mjs index 5545f22346..84f9a6a309 100644 --- a/src/web/mjs/connectors/Luscious.mjs +++ b/src/web/mjs/connectors/Luscious.mjs @@ -9,15 +9,14 @@ export default class Luscious extends Connector { super.label = 'Luscious'; this.tags = [ 'hentai', 'multi-lingual' ]; this.url = 'https://www.luscious.net'; - this.apiURL = 'https://api.luscious.net/graphql/nobatch/'; + this.apiURL = 'https://apicdn.luscious.net/graphql/nobatch/'; } async _getMangaFromURI(uri) { - let request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, 'head title'); - let id = uri.pathname; - let title = data[0].textContent.split('|')[0].trim() + ` [${data[0].lang}]`; - return new Manga(this, id, title); + const id = uri.pathname.match(/_(\d+)\/?$/)[1]; + const request = new Request(uri); + const name = (await this.fetchDOM(request, 'main h1.album-heading')).pop().textContent.trim(); + return new Manga(this, id, name); } async _getMangas() { @@ -30,18 +29,49 @@ export default class Luscious extends Connector { } async _getMangasFromPage(page) { - let gql = `{ - album { - list(input: { display: date_newest, page: ${page} }) { - items { url, title } + const url = new URL(this.apiURL); + url.searchParams.set('operationName', 'AlbumList'); + const query = ` + query AlbumList($input: AlbumListInput!) { + album { + list(input: $input) { + items { + id + title + slug + language { + id + title + url + } + } + } } } - }`; - let data = await this.fetchGraphQL(this.apiURL, undefined, gql, undefined); - return data.album.list.items.map(item => { + `; + url.searchParams.set('query', query); + const variables = { + input: { + display: 'date_trending', + filters: [{ name: 'album_type', value: 'manga' }, { name: 'restrict_genres', value: 'loose' }], + page: page, + items_per_page: 30//dont change items_per_page to more than 30 + } + }; + + url.searchParams.set('variables', JSON.stringify(variables)); + const request = new Request(url, { + headers: { + 'Accept': '*/*', + 'Content-Type': 'application/json', + }, + }); + + const data = await this.fetchJSON(request); + return data.data.album.list.items.map(manga => { return { - id: this.getRootRelativeOrAbsoluteLink(item.url, this.url), - title: item.title.trim() + id: manga.id, + title: manga.title.trim() }; }); } @@ -55,36 +85,50 @@ export default class Luscious extends Connector { } async _getPages(chapter) { + const pagelist = []; + for (let page = 1, run = true; run; page++) { + const pagesResults = await this._getPagesFromChapterPage(page, chapter); + if (pagesResults.data.picture.list.items.length > 0) { + pagesResults.data.picture.list.items.forEach(element => pagelist.push(element.url_to_original)); + } + run = pagesResults.data.picture.list.info.has_next_page; + } + return pagelist; + } + + async _getPagesFromChapterPage(page, chapter) { + const url = new URL(this.apiURL); + url.searchParams.set('operationName', 'AlbumListOwnPictures'); const query = ` - query AlbumListOwnPictures($input: PictureListInput!) { - picture { + query AlbumListOwnPictures($input: PictureListInput!) { + picture { list(input: $input) { - items { - url_to_original - } + info { + has_next_page + } + items { + url_to_original + } } + } } - } `; + url.searchParams.set('query', query); const variables = { input: { - filters: [ - { - name: 'album_id', - value: chapter.id.match(/_(\d+)\/?$/)[1] - } - ], - display : 'date_newest', - page: 0 + filters: [{ name: 'album_id', value: chapter.id }], + display: 'position', + items_per_page: 50, //dont change items_per_page to more than 50 + page: page } }; - let pageList = []; - for(let page = 1, run = true; run; page++) { - variables.input.page = page; - const data = await this.fetchGraphQL(this.apiURL, 'AlbumListOwnPictures', query, variables); - const pages = data.picture.list.items.map(item => item.url_to_original); - pages.length > 0 ? pageList.push(...pages) : run = false; - } - return pageList; + url.searchParams.set('variables', JSON.stringify(variables)); + const request = new Request(url, { + headers: { + 'Accept': '*/*', + 'Content-Type': 'application/json', + }, + }); + return this.fetchJSON(request); } } From 4cd496c0d3702fa009ca3f0cf5990f8ee8227a52 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:44:41 +0000 Subject: [PATCH 042/109] Fix BeeToon: filter fake images (#6597) * Fix BeeToon: filter fake images Fixes https://github.com/manga-download/hakuneko/issues/6592 * Update BeeToon.mjs --- src/web/mjs/connectors/BeeToon.mjs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/BeeToon.mjs b/src/web/mjs/connectors/BeeToon.mjs index 3d026272de..7eda721c0f 100644 --- a/src/web/mjs/connectors/BeeToon.mjs +++ b/src/web/mjs/connectors/BeeToon.mjs @@ -14,7 +14,7 @@ export default class BeeToon extends WordPressZbulu { } canHandleURI(uri) { - return /(ww2\.)?beetoon\.net/.test(uri.hostname); + return /(ww\d+\.)?beetoon\.net/.test(uri.hostname); } async _initializeConnector() { @@ -37,4 +37,15 @@ export default class BeeToon extends WordPressZbulu { }; }); } -} \ No newline at end of file + + async _getPages(chapter) { + const pages = await super._getPages(chapter); + return pages + .map( page => { + let link = new URL(page); + link = link.searchParams.get('url') || link; //deproxify url if needed + return link.href; + }) + .filter(page => !page.includes('/gadgets/proxy?'));//remove fake images (that were not deproxified) + } +} From b7fcfef0cd9a044d674227e429ed27542bc68c2e Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:46:08 +0000 Subject: [PATCH 043/109] FIX ComicEarthStar : switch to CoreView (#6539) * FIX ComicEarthStar : switch to CoreView Bye by Publus, welcome Coreview and GraphQL Fixes https://github.com/manga-download/hakuneko/issues/6536 * Update ComicEarthStar.mjs --- src/web/mjs/connectors/ComicEarthStar.mjs | 141 +++++++++++++--------- 1 file changed, 82 insertions(+), 59 deletions(-) diff --git a/src/web/mjs/connectors/ComicEarthStar.mjs b/src/web/mjs/connectors/ComicEarthStar.mjs index 2a582b0bf3..5e9da2024c 100644 --- a/src/web/mjs/connectors/ComicEarthStar.mjs +++ b/src/web/mjs/connectors/ComicEarthStar.mjs @@ -1,71 +1,94 @@ -import Publus from './templates/Publus.mjs'; -import Manga from '../engine/Manga.mjs'; +import CoreView from './templates/CoreView.mjs'; -export default class ComicEarthStar extends Publus { +export default class ComicEarthStar extends CoreView { constructor() { super(); super.id = 'comicearthstar'; super.label = 'コミック アース・スター (Comic Earth Star)'; this.tags = [ 'manga', 'japanese' ]; - this.url = 'https://www.comic-earthstar.jp'; + this.apiURL = 'https://comic-earthstar.com/graphql'; + this.url = 'https://comic-earthstar.com'; } - async _getMangaFromURI(uri) { - let id = uri.pathname.match(/\/([^/]+)\/?$/)[1]; - let request = new Request(this.url + '/json/contents/detail/' + id + '.json', this.requestOptions); - let data = await this.fetchJSON(request); - let title = data.categorys.comic_category_title; - return new Manga(this, id, title); - } + async _getMangas() { + const mangalist = []; - /** - * - */ - _getMangaList( callback ) { - let request = new Request( this.url + '/json/contents/top/default.json', this.requestOptions ); - this.fetchJSON( request ) - .then( data => { - let ongoingList = data.serial_comics.map( comic => { - return { - id: comic.comic_category_code, - title: comic.title - }; - } ); - let completedList = data.comple_comics.map( comic => { - return { - id: comic.comic_category_code, - title: comic.comic_category_code.toUpperCase() - }; - } ); - let mangaList = ongoingList.concat( completedList ); - callback( null, mangaList ); - } ) - .catch( error => { - console.error( error, this ); - callback( error, undefined ); - } ); - } + let operationName = 'Earthstar_Oneshot'; + let query = ` + query Earthstar_Oneshot { + seriesOneshot: serialGroup(groupName: "連載・読切:読切作品") { + seriesSlice { + seriesList { + id + title + firstEpisode { + permalink + } + } + } + } + } + `; + let uri = new URL(this.apiURL); + uri.searchParams.set('opname', operationName); + let request = new Request(uri, this.requestOptions); + let data = await this.fetchGraphQL(request, operationName, query, {} ); + data.seriesOneshot.seriesSlice.seriesList.forEach(manga => { + mangalist.push({ + id: new URL(manga.firstEpisode.permalink).pathname, + title: manga.title.trim() + }); + }); + + operationName = 'Earthstar_Series'; + query = ` + query Earthstar_Series { + seriesOngoing: serialGroup(groupName: "連載・読切:連載作品:連載中") { + seriesSlice { + seriesList { + ...Earthstar_SeriesListItem_Series + } + } + } + seriesFinished: serialGroup(groupName: "連載・読切:連載作品:連載終了") { + seriesSlice { + seriesList { + ...Earthstar_SeriesListItem_Series + } + } + } + } + + fragment Earthstar_SeriesListItem_Series on Series { + id + title + firstEpisode { + permalink + } + } + `; + uri = new URL(this.apiURL); + uri.searchParams.set('opname', operationName); + request = new Request(uri, this.requestOptions); + data = await this.fetchGraphQL(request, operationName, query, {} ); + + data.seriesOngoing.seriesSlice.seriesList.forEach(manga => { + mangalist.push({ + id: new URL(manga.firstEpisode.permalink).pathname, + title: manga.title.trim() + }); + }); + + data.seriesFinished.seriesSlice.seriesList.forEach(manga => { + mangalist.push({ + id: new URL(manga.firstEpisode.permalink).pathname, + title: manga.title.trim() + }); + }); + + return mangalist; - /** - * - */ - _getChapterList( manga, callback ) { - let request = new Request( this.url + '/json/contents/detail/' + manga.id + '.json', this.requestOptions ); - this.fetchJSON( request ) - .then( data => { - let chapterList = data.episodes.map( episode => { - return { - id: new URL( episode.page_url, request.url ).href, // episode.cid, - title: episode.comic_episode_title, - language: '' - }; - } ); - callback( null, chapterList ); - } ) - .catch( error => { - console.error( error, manga ); - callback( error, undefined ); - } ); } -} \ No newline at end of file + +} From 2ef3572ab7763683f0e74cb215981e2f8a9a4a7b Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 30 Dec 2023 12:59:59 +0000 Subject: [PATCH 044/109] FIX ReaperScans: domain change & fix get chapters (#6527) * FIX ReaperScans: domaine change & fix get chapters Fixes https://github.com/manga-download/hakuneko/issues/6526 Reproduce code from Haruneko, way simpler. * Update ReaperScans.mjs * Update ReaperScans.mjs --- src/web/mjs/connectors/ReaperScans.mjs | 132 ++++++++++--------------- 1 file changed, 52 insertions(+), 80 deletions(-) diff --git a/src/web/mjs/connectors/ReaperScans.mjs b/src/web/mjs/connectors/ReaperScans.mjs index f52bb0f539..1e5a56e795 100644 --- a/src/web/mjs/connectors/ReaperScans.mjs +++ b/src/web/mjs/connectors/ReaperScans.mjs @@ -7,15 +7,16 @@ export default class ReaperScans extends Connector { super.id = 'reaperscans'; super.label = 'Reaper Scans'; this.tags = ['webtoon', 'english']; - this.url = 'https://reapercomics.com'; + this.url = 'https://reaperscans.com'; this.links = { - login: 'https://reapercomics.com/login' + login: 'https://reaperscans.com/login' }; + this.requestOptions.headers.set('x-referer', this.url); this.path = '/comics'; this.queryMangas = 'a.my-2.text-sm.font-medium.text-white.hover\\3A text-blue-700'; this.queryChapters = 'div[wire\\3A id] ul[role] li a'; - this.queryPages = 'source.max-w-full.mx-auto.display-block'; - this.queryMangaTitle = 'div.overflow-hidden h1'; + this.queryPages = 'main source.max-w-full'; + this.queryMangaTitle = 'h1.text-xl'; this.config = { throttle: { label: 'Chapter list Throttle [ms]', @@ -27,18 +28,22 @@ export default class ReaperScans extends Connector { } }; } + async _getMangas() { - let mangaList = []; + const mangaList = []; for (let page = 1, run = true; run; page++) { + await this.wait(this.config.throttle.value); let mangas = await this._getMangasFromPage(page); mangas.length > 0 ? mangaList.push(...mangas) : run = false; } return mangaList; } + async _getMangasFromPage(page) { - let uri = new URL(this.path + '?page='+page, this.url); - let request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, this.queryMangas); + const uri = new URL(this.path + '?page='+page, this.url); + const request = new Request(uri, this.requestOptions); + await this.wait(this.config.throttle.value); + const data = await this.fetchDOM(request, this.queryMangas); return data.map(element => { return{ id: this.getRootRelativeOrAbsoluteLink(element, request.url), @@ -46,61 +51,48 @@ export default class ReaperScans extends Connector { }; }); } + async _getChapters(manga) { - const messageurl="https://reaperscans.com/livewire/message/"; - let chapterList = []; - let requestdata = undefined; - let chapters = []; - //fetch first page for csrf-token, wireid and other informations - let url = new URL(manga.id, this.url); - let request = new Request(url, this.requestOptions); - let response = await fetch(request); - let responseText = await response.text(); - //and chapters from first page - let parser = new DOMParser(); - let doc = parser.parseFromString(responseText, 'text/html'); - chapters = this.getChaptersFromDoc(doc); - chapterList.push(...chapters); - //build payload from first page data - requestdata = this.createPayloadForChapterPages(doc); - for (let page = 2, run = true; run; page++) { - chapters = []; - url = new URL(requestdata.payload.fingerprint.name, messageurl); - request = new Request(url, { - method: 'POST', - mode: 'cors', - referrer: requestdata.referrer, - referrerPolicy: 'strict-origin-when-cross-origin', - body: JSON.stringify(requestdata.payload), - credentials: 'include', - headers: { - 'Accept': 'text/html, application/xhtml+xml', - "Content-Type": "application/json", - "X-CSFRF-TOKEN": requestdata.token, - "X-Livewire": "true", - 'x-referrer': requestdata.referrer, - } - }); - response = await fetch(request); - let data = await response.json(); - //data contains the html nodes with the chapters - //and the informations needed to request the next page - doc = parser.parseFromString(data.effects.html, 'text/html'); - chapters = this.getChaptersFromDoc(doc); - chapters.length > 0 ? chapterList.push(...chapters) : run = false; - //update payload data using response data, for next fetch - requestdata.payload.serverMemo.checksum = data.serverMemo.checksum; - requestdata.payload.serverMemo.htmlHash = data.serverMemo.htmlHash; - requestdata.referrer = new URL(manga.id+"?page="+page, this.url).href; - requestdata.payload.serverMemo.data.page = page; - requestdata.payload.serverMemo.data.paginators.page = page; - requestdata.payload.updates[0].payload.params[0] = page+1; + const uri = new URL(manga.id, this.url); + const [ data ] = await this.fetchDOM(new Request(uri, this.requestOptions), 'main div[wire\\:id][wire\\:initial-data]'); + const chapterList = this.getChaptersFromDoc(data); + const body = JSON.parse(data.getAttribute('wire:initial-data')); + delete body.effects; + for(let page = 2, run = true; run; page++) { await this.wait(this.config.throttle.value); + const chapters = await this.getChaptersFromPage(manga, page, body); + chapters.length > 0 ? chapterList.push(...chapters) : run = false; } return chapterList; } + + async getChaptersFromPage(manga, page, body) { + const uri = new URL(manga.id, this.url); + uri.pathname = '/livewire/message/' + body.fingerprint.name; + + body.updates = [{ + type: 'callMethod', + payload: { + id: '00000', + method: 'gotoPage', + params: [ page, 'page' ] + } + }]; + + const request = new Request(uri, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json' + } + }); + const message = await this.fetchJSON(request); + const dom = new DOMParser().parseFromString(message.effects.html, 'text/html'); + return this.getChaptersFromDoc(dom); + } + getChaptersFromDoc(doc) { - let chapterList = []; + const chapterList = []; const data = doc.querySelectorAll(this.queryChapters); data.forEach(element => { let chapter = { @@ -111,28 +103,7 @@ export default class ReaperScans extends Connector { }); return chapterList; } - createPayloadForChapterPages(doc) { - const token = doc.querySelector('meta[name="csrf-token"]').getAttribute("content"); - const payloadid = (Math.random() + 1).toString(36).substring(8); - let wiredata = JSON.parse(doc.querySelector('.max-w-6xl div[wire\\:initial-data]').getAttribute("wire:initial-data")); - const referrer = wiredata.effects.path;//of course the current url could be used too and i - delete wiredata.effects; - wiredata.serverMemo.data.page = 1; - wiredata.serverMemo.data.paginators.page = 1; - wiredata['updates']=[{ - type: "callMethod", - payload: { - id: payloadid, - method: "gotoPage", - params: [ - 2, - "page" - ] - } - }]; - return { - payload : wiredata, token :token, referrer : referrer}; - } + async _getPages(chapter) { const uri = new URL(chapter.id, this.url); const request = new Request(uri, this.requestOptions); @@ -141,10 +112,11 @@ export default class ReaperScans extends Connector { return this.getAbsolutePath(element.getAttribute('src'), this.url); }); } + async _getMangaFromURI(uri) { const request = new Request(uri, this.requestOptions); const id = uri.pathname; - const title = (await this.fetchDOM(request, this.queryMangatitle))[0].textContent.trim(); + const title = (await this.fetchDOM(request, this.queryMangaTitle))[0].textContent.trim(); return new Manga(this, id, title); } } From 6f2cd1b235e4aab6d64a570a24b79e403cb7c31a Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 31 Dec 2023 11:49:46 +0000 Subject: [PATCH 045/109] FIX ManhwaLatino : mangalist and chapters (#6409) * FIX ManhwaLatino : mangalist and chapters Fixes https://github.com/manga-download/hakuneko/issues/6408 * remove junk pages * add referer for images --- src/web/mjs/connectors/ManhwaLatino.mjs | 33 ++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/ManhwaLatino.mjs b/src/web/mjs/connectors/ManhwaLatino.mjs index 9840356cfd..9050403804 100644 --- a/src/web/mjs/connectors/ManhwaLatino.mjs +++ b/src/web/mjs/connectors/ManhwaLatino.mjs @@ -8,5 +8,36 @@ export default class ManhwaLatino extends WordPressMadara { super.label = 'Manhwa-Latino'; this.tags = [ 'webtoon', 'hentai', 'spanish' ]; this.url = 'https://manhwa-latino.com'; + this.requestOptions.headers.set('x-referer', this.url); + + } + + _createMangaRequest(page) { + return new Request(new URL(`/manga/page/${page}/`, this.url), this.requestOptions); + } + + async _getChapters(manga) { + const uri = new URL(manga.id, this.url); + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'li.wp-manga-chapter div.mini-letters > a'); + return data.map(element => { + return { + id: this.getRootRelativeOrAbsoluteLink(element, this.url), + title: element.text.trim() + }; + }); + } + + async _getPages(chapter) { + const uri = new URL(chapter.id, this.url); + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'div.page-break source.img-responsive'); + return data.map(image => { + const payload = { + url : image.getAttribute('data-src'), + referer : request.url + }; + return this.createConnectorURI(payload); + }); } -} \ No newline at end of file +} From fb918b661302875207550b5086d41f5f1679acd3 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 31 Dec 2023 11:54:44 +0000 Subject: [PATCH 046/109] FIX NicoNicoSeiga: only use the fallback (#6372) * FIX NicoNicoSeiga: only use the fallback * remove comments * fixes manga listing no more ajax endpoint :/ --- src/web/mjs/connectors/NicoNicoSeiga.mjs | 49 +++++++++--------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/src/web/mjs/connectors/NicoNicoSeiga.mjs b/src/web/mjs/connectors/NicoNicoSeiga.mjs index f7e97e33aa..68159e58f5 100644 --- a/src/web/mjs/connectors/NicoNicoSeiga.mjs +++ b/src/web/mjs/connectors/NicoNicoSeiga.mjs @@ -14,8 +14,7 @@ export default class NicoNicoSeiga extends Connector { }; this.mangaListPage = "/manga/list"; - this.mangaListEndPoint = "/ajax/manga/list"; - + this.queryManga = 'div#comic_list ul li.mg_item div.mg_title div.title a'; this.querySeriesCount = 'div#main div#mg_main_column'; this.queryMangaTitle = 'div.main_title h1'; @@ -23,7 +22,6 @@ export default class NicoNicoSeiga extends Connector { this.queryChapters = 'div.mg_episode_list div.inner ul li.episode_item div.episode div.description div.title a'; this.queryPages = 'div.pages ul#page_contents li.page div.note source.lazyload'; - this.pageTemplateURL = 'https://seiga.nicovideo.jp/image/source/'; } async _getMangaFromURI(uri) { @@ -36,11 +34,11 @@ export default class NicoNicoSeiga extends Connector { async _getMangasFromRequest(uri) { let request = new Request(uri, this.requestOptions); - let data = await this.fetchJSON(request); - return data.map(series => { + let data = await this.fetchDOM(request, this.queryManga); + return data.map(anchor => { return { - id: this.getRootRelativeOrAbsoluteLink('/comic/' + series.id, request.url), - title: series.title + id: anchor.pathname, + title: anchor.text }; }); } @@ -50,7 +48,7 @@ export default class NicoNicoSeiga extends Connector { let data = await this.fetchDOM(request, this.querySeriesCount); let totalPages = Math.ceil(data[0].dataset.count/10); let mangaList = []; - let uri = new URL(this.mangaListEndPoint, this.url); + let uri = new URL(this.mangaListPage, this.url); for(let page = 1; page <= totalPages; page++) { uri.searchParams.set('page', page); let mangas = await this._getMangasFromRequest(uri); @@ -84,27 +82,18 @@ export default class NicoNicoSeiga extends Connector { } async _handleConnectorURI(payload) { - try { - // first try to get high quality image (await promise, otherwise try/catch won't work) - let data = await super._handleConnectorURI(this.pageTemplateURL + payload.id); - if(data.mimeType.startsWith('image/')) { - return data; - } - throw new Error('Failed to get high quality image => downloading low quality image!'); - } catch(error) { - // get low quality DRM image as fallback - let uri = new URL(payload.original); - let request = new Request(uri, this.requestOptions); - let response = await fetch(request); - let encrypted = new Uint8Array(await response.arrayBuffer()); - let key = this._getKeyFromUrl(payload.original); - let buffer = { - mimeType: 'application/octet-stream', - data: this._decrypt(encrypted, key) - }; - this._applyRealMime(buffer); - return buffer; - } + let uri = new URL(payload.original); + let request = new Request(uri, this.requestOptions); + let response = await fetch(request); + let encrypted = new Uint8Array(await response.arrayBuffer()); + let key = this._getKeyFromUrl(payload.original); + let buffer = { + mimeType: 'application/octet-stream', + data: this._decrypt(encrypted, key) + }; + this._applyRealMime(buffer); + return buffer; + //} } /********************************* @@ -128,4 +117,4 @@ export default class NicoNicoSeiga extends Connector { e[n] = e[n] ^ r[n % i]; return e; } -} \ No newline at end of file +} From c8b8b6f4219d11b75ef4bea53a1bd9680abef1a8 Mon Sep 17 00:00:00 2001 From: Ignacio Castro Date: Mon, 1 Jan 2024 10:18:23 -0300 Subject: [PATCH 047/109] Add Comicride (#6635) * Add ComicRide * Add ComicRide icon * [ComicRide] Fix page count from 0 * Fix ComicRide Icon * Delete src/web/img/connectors/ComicRide.mjs --- src/web/img/connectors/comicride | Bin 0 -> 3268 bytes src/web/mjs/connectors/ComicRide.mjs | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/web/img/connectors/comicride create mode 100644 src/web/mjs/connectors/ComicRide.mjs diff --git a/src/web/img/connectors/comicride b/src/web/img/connectors/comicride new file mode 100644 index 0000000000000000000000000000000000000000..ecf8170a4683f77d132e83b0298e55b4cd32f118 GIT binary patch literal 3268 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 0 ? mangaList.push(...mangas) : run = false; + } + return mangaList; + } +} From e58ffa5252fb471aa271959344ec26cd7ec2af80 Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 8 Jan 2024 11:47:07 +0100 Subject: [PATCH 048/109] feat(Ascalon): create connector (#6661) --- src/web/img/connectors/ascalon | Bin 0 -> 5923 bytes src/web/mjs/connectors/Ascalon.mjs | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/web/img/connectors/ascalon create mode 100644 src/web/mjs/connectors/Ascalon.mjs diff --git a/src/web/img/connectors/ascalon b/src/web/img/connectors/ascalon new file mode 100644 index 0000000000000000000000000000000000000000..6180f25e167f35ab423f833ec11ff904f2fb942a GIT binary patch literal 5923 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 FV1kqYOHcp+ literal 0 HcmV?d00001 diff --git a/src/web/mjs/connectors/Ascalon.mjs b/src/web/mjs/connectors/Ascalon.mjs new file mode 100644 index 0000000000..114f739c02 --- /dev/null +++ b/src/web/mjs/connectors/Ascalon.mjs @@ -0,0 +1,12 @@ +import WordPressMangastream from './templates/WordPressMangastream.mjs'; + +export default class Ascalon extends WordPressMangastream { + constructor() { + super(); + super.id = 'ascalon'; + super.label = 'Ascalon'; + this.tags = ['webtoon', 'english', 'scanlation']; + this.url = 'https://ascalonscans.com'; + this.path = '/manga/list-mode/'; + } +} From 027c36bf092ba5ad0dfedc3d306a397a1f512271 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Thu, 11 Jan 2024 18:56:22 +0000 Subject: [PATCH 049/109] Fid CovenScan domain (#6670) Fixes https://github.com/manga-download/hakuneko/issues/6463 --- src/web/mjs/connectors/CovenScan.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/CovenScan.mjs b/src/web/mjs/connectors/CovenScan.mjs index 24b2e3e0b5..222eed9051 100644 --- a/src/web/mjs/connectors/CovenScan.mjs +++ b/src/web/mjs/connectors/CovenScan.mjs @@ -7,7 +7,7 @@ export default class CovenScan extends WordPressMadara { super.id = 'covenscan'; super.label = 'Coven Scan'; this.tags = [ 'manga', 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://cvenscan.com'; + this.url = 'https://cvnscan.com'; } } From c241f886119b3b7bfa552b0e512fb91c179d9caa Mon Sep 17 00:00:00 2001 From: trendbloat <156368216+trendbloat@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:48:40 -0500 Subject: [PATCH 050/109] Fix ZeroScans: change url and fix paste support (#6671) * Change url and fix paste support * Use regex to extract slug --- src/web/mjs/connectors/ZeroScans.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/web/mjs/connectors/ZeroScans.mjs b/src/web/mjs/connectors/ZeroScans.mjs index deaf27dbe4..45c22289bf 100644 --- a/src/web/mjs/connectors/ZeroScans.mjs +++ b/src/web/mjs/connectors/ZeroScans.mjs @@ -7,7 +7,7 @@ export default class ZeroScans extends Connector { super.id = 'zeroscans'; super.label = 'ZeroScans'; this.tags = [ 'manga', 'high-quality', 'english', 'scanlation' ]; - this.url = 'https://zeroscans.com'; + this.url = 'https://zscans.com'; this.config = { quality: { @@ -24,11 +24,11 @@ export default class ZeroScans extends Connector { } async _getMangaFromURI(uri) { - const request = new Request(uri, this.requestOptions); - const script = `new Promise(resolve => resolve(JSON.stringify(window.__ZEROSCANS__)));`; - const { data } = await Engine.Request.fetchUI(request, script); - const details = data[0].details; - return new Manga(this, `${details.id}_${details.slug}`, details.name.trim()); + const slug = uri.href.match(/\/comics\/([^/]+)$/)[1]; + const detailsUrl = new URL(`/swordflake/comic/${slug}`, this.url); + const request = new Request(detailsUrl, this.requestOptions); + const { data } = await this.fetchJSON(request); + return new Manga(this, `${data.id}_${data.slug}`, data.name.trim()); } async _getMangas() { From ed3537bbba94f87671c510199e0f4fc906bb3f83 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 14 Jan 2024 10:36:37 +0000 Subject: [PATCH 051/109] FIx WestManga: change domain (#6669) Fixes https://github.com/manga-download/hakuneko/issues/6666 --- src/web/mjs/connectors/WestManga.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/WestManga.mjs b/src/web/mjs/connectors/WestManga.mjs index 2ab96a8644..a193f0fb14 100644 --- a/src/web/mjs/connectors/WestManga.mjs +++ b/src/web/mjs/connectors/WestManga.mjs @@ -7,7 +7,7 @@ export default class WestManga extends WordPressMangastream { super.id = 'westmanga'; super.label = 'WestManga'; this.tags = [ 'manga', 'indonesian' ]; - this.url = 'https://westmanga.org'; + this.url = 'https://westmanga.fun'; this.path = '/manga/list-mode/'; } } From 07b09ffdb188d8788a11c02b05086d9fbc31f6cd Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 14 Jan 2024 10:36:55 +0000 Subject: [PATCH 052/109] Fix PojokManga : change domain (#6652) Fixes https://github.com/manga-download/hakuneko/issues/6650 --- src/web/mjs/connectors/PojokManga.mjs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/PojokManga.mjs b/src/web/mjs/connectors/PojokManga.mjs index e43b910a2c..4055a4a690 100644 --- a/src/web/mjs/connectors/PojokManga.mjs +++ b/src/web/mjs/connectors/PojokManga.mjs @@ -7,8 +7,7 @@ export default class PojokManga extends WordPressMadara { super.id = 'pojokmanga'; super.label = 'PojokManga'; this.tags = [ 'manga', 'webtoon', 'indonesian' ]; - this.url = 'https://pojokmanga.com'; - + this.url = 'https://pojokmanga.id'; this.queryTitleForURI = 'div.profile-manga div.post-title h1'; } -} \ No newline at end of file +} From 2c39458b738f33d327f03979fe081ff3942afdda Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 14 Jan 2024 10:37:32 +0000 Subject: [PATCH 053/109] FIx XoxoComics: domain & manga listing (#6647) Fixes https://github.com/manga-download/hakuneko/issues/6646 --- src/web/mjs/connectors/XoxoComics.mjs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/web/mjs/connectors/XoxoComics.mjs b/src/web/mjs/connectors/XoxoComics.mjs index 873fb77d22..64761b57ce 100644 --- a/src/web/mjs/connectors/XoxoComics.mjs +++ b/src/web/mjs/connectors/XoxoComics.mjs @@ -8,7 +8,7 @@ export default class XoxoComics extends Connector { super.id = 'xoxocomics'; super.label = 'XoxoComics'; this.tags = [ 'comic', 'english' ]; - this.url = 'https://xoxocomics.net'; + this.url = 'https://xoxocomic.com'; } async _getMangaFromURI(uri) { @@ -20,17 +20,19 @@ export default class XoxoComics extends Connector { async _getMangas() { const mangaList = []; - for(let page = 1, run = true; run; page++) { - const mangas = await this._getMangasFromPage(page); - mangas.length > 0 ? mangaList.push(...mangas) : run = false; + for (const letter of '0abcdefghijklmnopqrstuvwxyz'.split('')) { + for(let page = 1, run = true; run; page++) { + const mangas = await this._getMangasFromPage(page, letter); + mangas.length > 0 ? mangaList.push(...mangas) : run = false; + } } return mangaList; } - async _getMangasFromPage(page) { - const uri = new URL('/comic-list/alphabet?c=&page=' + page, this.url); + async _getMangasFromPage(page, letter) { + const uri = new URL(`/comic-list/?c=${letter}&page=${page}`, this.url); const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div.chapter > a'); + const data = await this.fetchDOM(request, 'div.chapter a'); return data.map(element => { return { id: this.getRootRelativeOrAbsoluteLink(element, this.url), @@ -67,4 +69,4 @@ export default class XoxoComics extends Connector { const data = await this.fetchDOM(request, 'div.page-chapter source'); return data.map(element => element.dataset['original'] || element.src); } -} \ No newline at end of file +} From 93f7054aa28789b5d8479619e856bc07cc6f1c5c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 15 Jan 2024 11:38:11 +0000 Subject: [PATCH 054/109] FIx MangaHub: change API & CDN domains (#6683) Fixes https://github.com/manga-download/hakuneko/issues/6682 Websites based on MH has been tested too :) --- src/web/mjs/connectors/MangaHub.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangaHub.mjs b/src/web/mjs/connectors/MangaHub.mjs index 7067870aae..263a31b286 100644 --- a/src/web/mjs/connectors/MangaHub.mjs +++ b/src/web/mjs/connectors/MangaHub.mjs @@ -11,8 +11,8 @@ export default class MangaHub extends Connector { super.label = 'MangaHub'; this.tags = [ 'manga', 'english' ]; this.url = 'https://mangahub.io'; - this.apiURL = 'https://api.mghubcdn.com/graphql'; - this.cdnURL = 'https://img.mghubcdn.com/file/imghub/'; + this.apiURL = 'https://api2.mangahub.io/graphql'; + this.cdnURL = 'https://imgx.mangahub.io/'; this.path = 'm01'; this.requestOptions.headers.set('x-origin', this.url); From cd6f10f226a5e1864e3e789a2c6520ea7c9f2299 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 23 Jan 2024 10:23:57 +0000 Subject: [PATCH 055/109] FIX MangaEffect : no more wpmangaprotector (#6699) Fixes https://github.com/manga-download/hakuneko/issues/6698 --- src/web/mjs/connectors/MangaEffect.mjs | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/web/mjs/connectors/MangaEffect.mjs b/src/web/mjs/connectors/MangaEffect.mjs index 49b449cf73..2090f6eb2d 100644 --- a/src/web/mjs/connectors/MangaEffect.mjs +++ b/src/web/mjs/connectors/MangaEffect.mjs @@ -12,21 +12,4 @@ export default class MangaEffect extends WordPressMadara { _createMangaRequest(page) { return new Request(new URL(`/manga/page/${page}/`, this.url), this.requestOptions); } - - async _getPages(chapter) { - const url = new URL(chapter.id, this.url); - const request = new Request(url, this.requestOptions); - const script = ` - new Promise((resolve, reject) => { - setTimeout(() => { - var imgdata = JSON.parse(CryptoJS.AES.decrypt(chapter_data, wpmangaprotectornonce, { - format: CryptoJSAesJson - }).toString(CryptoJS.enc.Utf8)); - resolve(JSON.parse(imgdata)); - },3000); - }); - `; - const data = await Engine.Request.fetchUI(request, script); - return data.map(picture => this.createConnectorURI({url : picture, referer : url})); - } } From 08101409f921380ea1a3cae6a8632613f9ddefdd Mon Sep 17 00:00:00 2001 From: akn19 <86169232+akn19@users.noreply.github.com> Date: Wed, 24 Jan 2024 02:21:43 +0700 Subject: [PATCH 056/109] add mangasusuku (#6704) --- src/web/img/connectors/mangasusuku | Bin 0 -> 5941 bytes src/web/mjs/connectors/MangaSusuku.mjs | 13 +++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/web/img/connectors/mangasusuku create mode 100644 src/web/mjs/connectors/MangaSusuku.mjs diff --git a/src/web/img/connectors/mangasusuku b/src/web/img/connectors/mangasusuku new file mode 100644 index 0000000000000000000000000000000000000000..855b568e879320831b2603ce210623b276f6c827 GIT binary patch literal 5941 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 Xr@$|2B2wbJ00000NkvXXu0mjfuZwox literal 0 HcmV?d00001 diff --git a/src/web/mjs/connectors/MangaSusuku.mjs b/src/web/mjs/connectors/MangaSusuku.mjs new file mode 100644 index 0000000000..bcab1eccf1 --- /dev/null +++ b/src/web/mjs/connectors/MangaSusuku.mjs @@ -0,0 +1,13 @@ +import WordPressMangastream from './templates/WordPressMangastream.mjs'; + +export default class MangaSusuku extends WordPressMangastream { + + constructor() { + super(); + super.id = 'mangasusuku'; + super.label = 'MangaSusuku'; + this.tags = ['manga', 'indonesian']; + this.url = 'https://mangasusuku.xyz '; + this.path = '/komik/list-mode/'; + } +} From 5c4c6e14ebfc01c75d9ac08ba3d61ce143888587 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 23 Jan 2024 21:39:05 +0000 Subject: [PATCH 057/109] Lezhin : change manga list endpoint & language values (#6689) * Lezhin : change manga list endpoint * Lezhin : change locale code --- src/web/mjs/connectors/LezhinEN.mjs | 2 +- src/web/mjs/connectors/LezhinJA.mjs | 2 +- src/web/mjs/connectors/LezhinKO.mjs | 2 +- src/web/mjs/connectors/templates/Lezhin.mjs | 7 ++++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/web/mjs/connectors/LezhinEN.mjs b/src/web/mjs/connectors/LezhinEN.mjs index 447ca28bb3..54dd39a4ab 100644 --- a/src/web/mjs/connectors/LezhinEN.mjs +++ b/src/web/mjs/connectors/LezhinEN.mjs @@ -12,7 +12,7 @@ export default class LezhinEN extends Lezhin { login: this.url + '/login#email' }; this.requestOptions.headers.set( 'x-cookie', 'x-lz-locale=en_US' ); - this.requestOptions.headers.set( 'x-lz-locale', 'en_US' ); + this.requestOptions.headers.set( 'x-lz-locale', 'en-US' ); this.locale = 'en-US'; } } \ No newline at end of file diff --git a/src/web/mjs/connectors/LezhinJA.mjs b/src/web/mjs/connectors/LezhinJA.mjs index dd7cdb383d..fc475552e2 100644 --- a/src/web/mjs/connectors/LezhinJA.mjs +++ b/src/web/mjs/connectors/LezhinJA.mjs @@ -12,7 +12,7 @@ export default class LezhinJA extends Lezhin { login: this.url + '/login#email' }; this.requestOptions.headers.set( 'x-cookie', 'x-lz-locale=ja_JP' ); - this.requestOptions.headers.set( 'x-lz-locale', 'ja_JP' ); + this.requestOptions.headers.set( 'x-lz-locale', 'ja-JP' ); this.locale = 'ja-JP'; } } \ No newline at end of file diff --git a/src/web/mjs/connectors/LezhinKO.mjs b/src/web/mjs/connectors/LezhinKO.mjs index bc4d89953d..253cf1fb68 100644 --- a/src/web/mjs/connectors/LezhinKO.mjs +++ b/src/web/mjs/connectors/LezhinKO.mjs @@ -12,7 +12,7 @@ export default class LezhinKO extends Lezhin { login: this.url + '/login#email' }; this.requestOptions.headers.set( 'x-cookie', 'x-lz-locale=ko_KR' ); - this.requestOptions.headers.set( 'x-lz-locale', 'ko_KR' ); + this.requestOptions.headers.set( 'x-lz-locale', 'ko-KR' ); this.locale = 'ko-KR'; } } \ No newline at end of file diff --git a/src/web/mjs/connectors/templates/Lezhin.mjs b/src/web/mjs/connectors/templates/Lezhin.mjs index 943497e5f3..d351dc21c0 100644 --- a/src/web/mjs/connectors/templates/Lezhin.mjs +++ b/src/web/mjs/connectors/templates/Lezhin.mjs @@ -101,14 +101,15 @@ export default class Lezhin extends Connector { } async _getMangasFromPage(page) { - const uri = new URL('/lz-api/v2/comics', this.apiURL); + const uri = new URL('/lz-api/v2/contents', this.apiURL); uri.searchParams.set('menu', 'general'); uri.searchParams.set('limit', this.mangasPerPage); uri.searchParams.set('offset', page * this.mangasPerPage); uri.searchParams.set('order', 'popular'); - uri.searchParams.set('adult_kind', 'all'); - const request = new Request(uri, this.requestOptions); + + request.headers.set('X-LZ-Adult', '0'); + request.headers.set('X-LZ-AllowAdult', 'true'); const data = await this.fetchJSON(request); return data.data.map( manga => { return { From f61849f656235c5d4b2430b7b8fe48a253e2ba1c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 23 Jan 2024 21:39:23 +0000 Subject: [PATCH 058/109] Fix InfernalVoidScans: use referer (#6705) Fixes https://github.com/manga-download/hakuneko/issues/6701 --- src/web/mjs/connectors/InfernalVoidScans.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/InfernalVoidScans.mjs b/src/web/mjs/connectors/InfernalVoidScans.mjs index 5d4b589ae5..c6c75d1867 100644 --- a/src/web/mjs/connectors/InfernalVoidScans.mjs +++ b/src/web/mjs/connectors/InfernalVoidScans.mjs @@ -9,5 +9,6 @@ export default class InfernalVoidScans extends WordPressMangastream { this.tags = [ 'webtoon', 'scanlation', 'english' ]; this.url = 'https://void-scans.com'; this.path = '/manga/list-mode/'; + this.requestOptions.headers.set('x-referer', this.url); } -} \ No newline at end of file +} From 1efe233b525af09ec8169c0d7baba01716486112 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 27 Jan 2024 21:09:24 +0000 Subject: [PATCH 059/109] RandomScan : rebranding to LuraToon (#6726) * RandomScan : rebranding to LuraToon * update randomscan icon --- src/web/img/connectors/randomscan | Bin 1454 -> 7941 bytes src/web/mjs/connectors/RandomScan.mjs | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/img/connectors/randomscan b/src/web/img/connectors/randomscan index 92ef37ba7b643db365a643767307809ec509b16a..b14c57066a0a481e2de144f03a7d7c41b91c46ac 100644 GIT binary patch literal 7941 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 IM6N<$f(ehimjD0& diff --git a/src/web/mjs/connectors/RandomScan.mjs b/src/web/mjs/connectors/RandomScan.mjs index 5d3f8a0939..a995a09406 100644 --- a/src/web/mjs/connectors/RandomScan.mjs +++ b/src/web/mjs/connectors/RandomScan.mjs @@ -4,8 +4,8 @@ export default class RandomScan extends WordPressMadara { constructor() { super(); super.id = 'randomscan'; - super.label = 'Random Scans'; + super.label = 'Lura Toon'; this.tags = [ 'manga', 'webtoon', 'portuguese' ]; - this.url = 'https://randomscanlators.net'; + this.url = 'https://luratoon.com'; } } From 6d13602ae1d4b8ef33c0f03e0db1fb4c58ecf9aa Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 27 Jan 2024 21:29:34 +0000 Subject: [PATCH 060/109] Fix Ainzscans: domain and junk in manga title (#6714) Fixes https://github.com/manga-download/hakuneko/issues/6712 --- src/web/mjs/connectors/Ainzscans.mjs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/Ainzscans.mjs b/src/web/mjs/connectors/Ainzscans.mjs index 2b871c532c..9192334b13 100644 --- a/src/web/mjs/connectors/Ainzscans.mjs +++ b/src/web/mjs/connectors/Ainzscans.mjs @@ -7,7 +7,16 @@ export default class Ainzscans extends WordPressMangastream { super.id = 'ainzscans'; super.label = 'Ainz Scans'; this.tags = [ 'webtoon', 'indonesian', 'scanlation' ]; - this.url = 'https://ainzscans.site'; + this.url = 'https://ainzscans.net'; this.path = '/series/list-mode'; } + + async _getMangas() { + return (await super._getMangas()).map(manga => { + return { + id : manga.id, + title : manga.title.replace('Bahasa Indonesia', '').trim() + }; + }); + } } From 154d274b0cacbc53389ca86a8112f39b3f8853de Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 5 Feb 2024 12:30:58 +0100 Subject: [PATCH 061/109] feat(AGS): create connector (#6753) --- src/web/mjs/connectors/AGS.mjs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/web/mjs/connectors/AGS.mjs diff --git a/src/web/mjs/connectors/AGS.mjs b/src/web/mjs/connectors/AGS.mjs new file mode 100644 index 0000000000..1362f8c795 --- /dev/null +++ b/src/web/mjs/connectors/AGS.mjs @@ -0,0 +1,32 @@ +import WordPressMangastream from './templates/WordPressMangastream.mjs'; + +export default class AGS extends WordPressMangastream { + + constructor() { + super(); + super.id = 'ags'; + super.label = 'AGS (Animated Glitched Scans)'; + this.tags = [ 'manga', 'english', 'scanlation' ]; + this.url = 'https://agscomics.com'; + this.path = '/series/?list'; + } + + get icon() { + return '/img/connectors/anigliscans'; + } + + async _getPages(chapter) { + const data = await super._getPages(chapter); + return data.map(element => this.createConnectorURI(element)); + } + + async _handleConnectorURI(payload) { + const request = new Request(payload, this.requestOptions); + request.headers.set('x-referer', this.url); + let response = await fetch(request); + let data = await response.blob(); + data = await this._blobToBuffer(data); + this._applyRealMime(data); + return data; + } +} From d1f3749f7b4083a12d1a3f7d6829b852458cf00e Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 5 Feb 2024 12:31:17 +0100 Subject: [PATCH 062/109] feat(Nyrax): create connector (#6754) --- src/web/img/connectors/nyrax | Bin 0 -> 2761 bytes src/web/mjs/connectors/Nyrax.mjs | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/web/img/connectors/nyrax create mode 100644 src/web/mjs/connectors/Nyrax.mjs diff --git a/src/web/img/connectors/nyrax b/src/web/img/connectors/nyrax new file mode 100644 index 0000000000000000000000000000000000000000..a7ef45daf2d8caad5870f59bd5ec12143877eeff GIT binary patch literal 2761 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 Date: Thu, 8 Feb 2024 15:46:50 +0200 Subject: [PATCH 063/109] Remove Assorted Scans (#6768) --- src/web/img/connectors/assortedscans | Bin 15716 -> 0 bytes src/web/mjs/connectors/AssortedScans.mjs | 78 ----------------------- 2 files changed, 78 deletions(-) delete mode 100644 src/web/img/connectors/assortedscans delete mode 100644 src/web/mjs/connectors/AssortedScans.mjs diff --git a/src/web/img/connectors/assortedscans b/src/web/img/connectors/assortedscans deleted file mode 100644 index 0055fa7cf172637952d6574a76e1ff58e277d2ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15716 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 J-LU)4_W@ocMBM-Y diff --git a/src/web/mjs/connectors/AssortedScans.mjs b/src/web/mjs/connectors/AssortedScans.mjs deleted file mode 100644 index ea33e58599..0000000000 --- a/src/web/mjs/connectors/AssortedScans.mjs +++ /dev/null @@ -1,78 +0,0 @@ -import Connector from '../engine/Connector.mjs'; -import Manga from '../engine/Manga.mjs'; - -export default class AssortedScans extends Connector { - constructor() { - super(); - super.id = 'assortedscans'; - super.label = 'assortedscans'; - this.tags = ['manga', 'english']; - this.url = 'https://assortedscans.com'; - } - - async _getMangaFromURI(uri) { - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, '#series-title'); - const title = data['0'].text.trim(); - const id = uri.pathname + uri.search; - return Manga(this, id, title); - } - - async _getMangas() { - const request = new Request(new URL('/reader/', this.url), this.requestOptions); - const data = await this.fetchDOM(request, 'section.series h2.series-title a'); - return data.map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element, this.url), - title: element.text.trim(), - }; - }); - } - - async _getChapters(manga) { - const id = this.getId(manga.id); - const request = new Request(new URL(id, this.url), this.requestOptions); - const data = await this.fetchDOM(request, 'div.chapter > a'); - return data - .map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element, this.url), - title: element.title - }; - }); - } - - getId(url) { - return url.match(/\/reader\/.*\/?/)[0]; - } - - async _getMaxSite(chapterId) { - const id = this.getId(chapterId); - const request = new Request(new URL(id + '1/', this.url), this.requestOptions); - const data = await this.fetchDOM(request, 'li.dropdown-element.page-details:last-child a'); - const maxSite = data['0'].text.match(/Page (\d+)/)[1]; - return [id, parseInt(maxSite)]; - } - - async _getPages(chapter) { - - const id = this.getId(chapter.id); - const request = new Request(new URL(id + '1/', this.url), this.requestOptions); - const data = await this.fetchDOM(request, 'li.dropdown-element.page-details a'); - return data.map(element => { - const maxPage = element.text.match(/Page (\d+)/)[1]; - return this.createConnectorURI(this.url + id + maxPage); - }); - } - - async _handleConnectorURI(payload) { - const request = new Request(payload, this.requestOptions); - const data = await this.fetchDOM(request, 'source#page-image'); - const link = this.getAbsolutePath(data[0], request.url); - const response = await fetch(link, this.requestOptions); - const blob = await response.blob(); - const buffer = await this._blobToBuffer(blob); - this._applyRealMime(buffer); - return buffer; - } -} \ No newline at end of file From 6305835f797edac165a2cb387248526d6525e21d Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 10 Feb 2024 10:04:30 +0000 Subject: [PATCH 064/109] FIx AsuraScansTR : domain, Madara, no junk (#6713) Fixes https://github.com/manga-download/hakuneko/issues/6707 --- src/web/mjs/connectors/AsuraScansTR.mjs | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/web/mjs/connectors/AsuraScansTR.mjs b/src/web/mjs/connectors/AsuraScansTR.mjs index b0d23e77a7..7dcc0c84bf 100644 --- a/src/web/mjs/connectors/AsuraScansTR.mjs +++ b/src/web/mjs/connectors/AsuraScansTR.mjs @@ -1,31 +1,16 @@ -import WordPressMangastream from './templates/WordPressMangastream.mjs'; +import WordPressMadara from './templates/WordPressMadara.mjs'; -export default class AsuraScansTR extends WordPressMangastream { +export default class AsuraScansTR extends WordPressMadara { constructor() { super(); super.id = 'asurascans-tr'; super.label = 'Asura Scans (TR)'; this.tags = ['webtoon', 'turkish']; - this.url = 'https://armoniscans.com'; - this.path = '/manga/list-mode/'; - this.queryPages = 'div#readerarea p img'; - this.requestOptions.headers.set('x-user-agent', 'Mozilla/5.0 (Linux; Android 9; Pixel) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4026.0 Mobile Safari/537.36'); + this.url = 'https://asurascans.com.tr'; } get icon() { return '/img/connectors/asurascans'; } - - async _getPages(chapter) { - const excludes = [ - /panda_gif_large/i, - /2021\/04\/page100-10\.jpg/i, - /2021\/03\/20-ending-page-\.jpg/i, - /ENDING-PAGE/i - ]; - const images = await super._getPages(chapter); - return images.filter(link => !excludes.some(rgx => rgx.test(link))); - } - } From 53d95af05cabc0e20357f32168fb2975bf081519 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 10 Feb 2024 10:04:48 +0000 Subject: [PATCH 065/109] FIx LikeManga: invalid css selector (#6745) Turns out selector is invalid in our old chrome Filtering picture another way --- src/web/mjs/connectors/FirstKiss.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/FirstKiss.mjs b/src/web/mjs/connectors/FirstKiss.mjs index 29810a6e6c..c4f7e394ff 100644 --- a/src/web/mjs/connectors/FirstKiss.mjs +++ b/src/web/mjs/connectors/FirstKiss.mjs @@ -80,7 +80,7 @@ export default class FirstKiss extends Connector { const imgdata = JSON.parse(atob(parseJwt(tokenElement.getAttribute('value')).data)); resolve(imgdata.map(image => new URL(image, imgCdnUrl).href)); } - const images = [...document.querySelectorAll("div.reading-detail.box_doc img:not(noscript img)")]; + const images = [...document.querySelectorAll("div.reading-detail.box_doc img")].filter(element => element.dataset.index); resolve(images.map(image => image.getAttribute('src'))); }); `; From ed615b434a3e9915b561c5b8ecb8574e12c459d9 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 10 Feb 2024 10:58:36 +0000 Subject: [PATCH 066/109] Fix GekkouScans: change domain (#6740) Fixes https://github.com/manga-download/hakuneko/issues/6739 --- src/web/mjs/connectors/GekkouScans.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/GekkouScans.mjs b/src/web/mjs/connectors/GekkouScans.mjs index 3a589b4673..7b1b882b05 100644 --- a/src/web/mjs/connectors/GekkouScans.mjs +++ b/src/web/mjs/connectors/GekkouScans.mjs @@ -7,6 +7,6 @@ export default class GekkouScans extends WordPressMadara { super.id = 'gekkouscans'; super.label = 'Gekkou Scans'; this.tags = [ 'manga', 'webtoon', 'portuguese' ]; - this.url = 'https://gekkouscans.top'; + this.url = 'https://gekkou.site'; } } From 636fcd4464ad1f2403cacb78505fdcdeabc8e2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Ara=C3=BAjo?= <97482945+DartinSA@users.noreply.github.com> Date: Sat, 10 Feb 2024 07:58:52 -0300 Subject: [PATCH 067/109] Update MangasChan.mjs (#6752) updating the link data --- src/web/mjs/connectors/MangasChan.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangasChan.mjs b/src/web/mjs/connectors/MangasChan.mjs index d31f302390..e179276222 100644 --- a/src/web/mjs/connectors/MangasChan.mjs +++ b/src/web/mjs/connectors/MangasChan.mjs @@ -7,7 +7,7 @@ export default class MangasChan extends WordPressMangastream { super.id = 'mangaschan'; super.label = 'Mangás Chan'; this.tags = [ 'manga', 'webtoon', 'portuguese' ]; - this.url = 'https://mangaschan.com'; + this.url = 'https://mangaschan.net'; this.path = '/manga/list-mode/'; } -} \ No newline at end of file +} From b76d046707fd25857ee3f2c2f8e58e79ca79c7f3 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 10 Feb 2024 10:59:11 +0000 Subject: [PATCH 068/109] Fix MangaGeko: change domain (#6757) Fixes https://github.com/manga-download/hakuneko/issues/6756 --- src/web/mjs/connectors/MangaRaw.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaRaw.mjs b/src/web/mjs/connectors/MangaRaw.mjs index 46f44f7c86..6603c9facb 100644 --- a/src/web/mjs/connectors/MangaRaw.mjs +++ b/src/web/mjs/connectors/MangaRaw.mjs @@ -8,7 +8,7 @@ export default class MangaRaw extends Connector { super.id = 'mangaraw'; super.label = 'MangaGeko'; this.tags = ['multi-lingual', 'manga', 'webtoon']; - this.url = 'https://www.mangageko.com'; + this.url = 'https://www.mgeko.com'; } async _getMangaFromURI(uri) { From a0513cebf74affbe6a5ebe4d68407c5fbf7fc665 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 10 Feb 2024 10:59:27 +0000 Subject: [PATCH 069/109] Fix Nonbiri: rebranding & change domain (#6737) Fixes https://github.com/manga-download/hakuneko/issues/6736 --- src/web/mjs/connectors/Nonbiri.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/Nonbiri.mjs b/src/web/mjs/connectors/Nonbiri.mjs index 498c0c265c..420ec7cff8 100644 --- a/src/web/mjs/connectors/Nonbiri.mjs +++ b/src/web/mjs/connectors/Nonbiri.mjs @@ -5,9 +5,9 @@ export default class Nonbiri extends WordPressMangastream { constructor() { super(); super.id = 'nonbiri'; - super.label = 'Nonbiri'; + super.label = 'Comic21'; this.tags = ['manga', 'indonesian']; - this.url = 'https://nonbiri.space'; + this.url = 'https://comic21.me'; this.path = '/manga/list-mode/'; } } From a632d54e7eee42cc6ff6aa0181ebd21948003e32 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 11 Feb 2024 16:02:58 +0000 Subject: [PATCH 070/109] MangaHub.io: change CDN (#6771) --- src/web/mjs/connectors/MangaHub.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaHub.mjs b/src/web/mjs/connectors/MangaHub.mjs index 263a31b286..7931e78671 100644 --- a/src/web/mjs/connectors/MangaHub.mjs +++ b/src/web/mjs/connectors/MangaHub.mjs @@ -12,7 +12,7 @@ export default class MangaHub extends Connector { this.tags = [ 'manga', 'english' ]; this.url = 'https://mangahub.io'; this.apiURL = 'https://api2.mangahub.io/graphql'; - this.cdnURL = 'https://imgx.mangahub.io/'; + this.cdnURL = 'https://imgx.mghcdn.com'; this.path = 'm01'; this.requestOptions.headers.set('x-origin', this.url); From 7eee17daf2295bb868d8896c4f918da085a9a356 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 11 Feb 2024 16:03:10 +0000 Subject: [PATCH 071/109] FIx MangaTR: change manga list path (#6733) Fixes https://github.com/manga-download/hakuneko/issues/6731 --- src/web/mjs/connectors/MangaTR.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangaTR.mjs b/src/web/mjs/connectors/MangaTR.mjs index ee9f49a212..baa5929866 100644 --- a/src/web/mjs/connectors/MangaTR.mjs +++ b/src/web/mjs/connectors/MangaTR.mjs @@ -8,7 +8,7 @@ export default class MangaTR extends FlatManga { super.label = 'Manga-TR'; this.tags = [ 'manga', 'turkish' ]; this.url = 'https://manga-tr.com'; - + this.path = '/manga-list.html'; this.queryMangaTitle = 'meta[property="og:title"]'; this.queryMangas = 'div.container a[data-toggle="mangapop"]'; this.requestOptions.headers.set('x-referer', this.url); @@ -62,4 +62,4 @@ export default class MangaTR extends FlatManga { }; }); } -} \ No newline at end of file +} From 1be496912cc0f219b3eab97dcd347fb2a6f63691 Mon Sep 17 00:00:00 2001 From: Ronny Date: Mon, 19 Feb 2024 22:28:32 +0100 Subject: [PATCH 072/109] [mangadex] get list from CDN (#6774) * get mangalist from cdn * fix lint error --------- Co-authored-by: MikeZeDev --- src/web/mjs/connectors/MangaDex.mjs | 90 +---------------------------- 1 file changed, 3 insertions(+), 87 deletions(-) diff --git a/src/web/mjs/connectors/MangaDex.mjs b/src/web/mjs/connectors/MangaDex.mjs index df3cc538e8..ba13e5be18 100644 --- a/src/web/mjs/connectors/MangaDex.mjs +++ b/src/web/mjs/connectors/MangaDex.mjs @@ -69,98 +69,14 @@ export default class MangaDex extends Connector { } async _getMangas() { - const mangaList = []; - const limit = 100; - let lastCreatedAt = '2000-01-01T00:00:00'; - let throttle = Promise.resolve(); - - while(lastCreatedAt) { - await throttle; - throttle = new Promise(resolve => setTimeout(resolve, this.config.throttleRequests.value)); - - const uri = new URL('/manga', this.api); - uri.searchParams.set('limit', `${limit}`); - uri.searchParams.set('order[createdAt]', 'asc'); - uri.searchParams.set('createdAtSince', lastCreatedAt); - uri.searchParams.append('contentRating[]', 'safe'); - uri.searchParams.append('contentRating[]', 'suggestive'); - uri.searchParams.append('contentRating[]', 'erotica'); - uri.searchParams.append('contentRating[]', 'pornographic'); - - const request = new Request(uri, { - headers: { - 'Referer': this.url, - }}); - const { data } = await this.fetchJSON(request); - - lastCreatedAt = data.length === limit ? data.pop().attributes.createdAt.split('+').shift() : null; - if(data.length) { - const mangas = data.map(manga => { - const title = manga.attributes.title.en || Object.values(manga.attributes.title).shift(); - return { - id : manga.id, - title : title, - }; - }); - mangaList.push(...mangas); - } - } - - return mangaList; - } - - /* - async _getMangas() { - - let mangaList = []; - let first10k = await this._getMangasFromPages(0, 99); - mangaList = [...mangaList, ...first10k.data]; - let nextAt = first10k.nextAt; - - for (let i = 1; i <= first10k.total / 10000; i += 1) { - let first100of10k = await this._getMangasFromPages(0, 0, nextAt); - mangaList = [...mangaList, ...first100of10k.data.slice(1)]; - let pages = Math.min(Math.floor(first100of10k.total / 100), 99); - if (pages > 0) { - let data = await this._getMangasFromPages(1, pages, nextAt); - mangaList = [...mangaList, ...data.data]; - nextAt = data.nextAt; - } - } - return mangaList.map(ele => { + return (await this.fetchJSON('https://websites.hakuneko.download/mangadex.json')).map(manga => { return { - id: ele.id, - title: (ele.attributes.title.en || Object.values(ele.attributes.title).shift()).trim() + id: manga.id, + title: manga.title, }; }); - } - async _getMangasFromPages(start, pages, nextAt) { - let tmp = []; - let data100; - for (let page = start; page <= pages; page += 1) { - const uri = new URL('/manga', this.api); - uri.searchParams.set('limit', 100); - uri.searchParams.set('offset', 100 * page); - uri.searchParams.set('order[createdAt]', 'asc'); - uri.searchParams.append('contentRating[]', 'safe'); - uri.searchParams.append('contentRating[]', 'suggestive'); - uri.searchParams.append('contentRating[]', 'erotica'); - uri.searchParams.append('contentRating[]', 'pornographic'); - if (nextAt) uri.searchParams.set('createdAtSince', nextAt); - const request = new Request(uri, this.requestOptions); - data100 = await this.fetchJSON(request, 3); - await this.wait(this.config.throttleRequests.value); - tmp = [...tmp, ...data100.data]; - } - return { - data: tmp, - nextAt: data100.data.pop().attributes.createdAt.replace('+00:00', ''), - total: data100.total - }; - } -*/ async _getChapters(manga) { let chapterList = []; for(let page = 0, run = true; run; page++) { From 222bebad96d5efffe0bb2261819c25532adcad19 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 20 Feb 2024 13:46:54 +0000 Subject: [PATCH 073/109] Websites maintenance : AlliedFansub & Nivera (#6802) * AlliedFansub: change domain and template Fixes https://github.com/manga-download/hakuneko/issues/6793 * Nivera : change domain Fixes https://github.com/manga-download/hakuneko/issues/6792 --- src/web/mjs/connectors/AlliedFansub.mjs | 7 +++---- src/web/mjs/connectors/NiveraFansub.mjs | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/web/mjs/connectors/AlliedFansub.mjs b/src/web/mjs/connectors/AlliedFansub.mjs index bddd3971e7..2e6e3652f0 100644 --- a/src/web/mjs/connectors/AlliedFansub.mjs +++ b/src/web/mjs/connectors/AlliedFansub.mjs @@ -1,14 +1,13 @@ -import WordPressMangastream from './templates/WordPressMangastream.mjs'; +import WordPressMadara from './templates/WordPressMadara.mjs'; -export default class AlliedFansub extends WordPressMangastream { +export default class AlliedFansub extends WordPressMadara { constructor() { super(); super.id = 'alliedfansub'; super.label = 'Allied Fansub'; this.tags = [ 'webtoon', 'turkish', 'scanlation' ]; - this.url = 'https://alliedfansub.online'; - this.path = '/manga/list-mode/'; + this.url = 'https://alliedfansub.net'; this.requestOptions.headers.set('x-referer', this.url); } } diff --git a/src/web/mjs/connectors/NiveraFansub.mjs b/src/web/mjs/connectors/NiveraFansub.mjs index ae34a29444..ee42c9c194 100644 --- a/src/web/mjs/connectors/NiveraFansub.mjs +++ b/src/web/mjs/connectors/NiveraFansub.mjs @@ -7,7 +7,7 @@ export default class NiveraFansub extends WordPressMadara { super.id = 'niverafansub'; super.label = 'Nivera Fansub'; this.tags = [ 'webtoon', 'turkish', 'scanlation' ]; - this.url = 'https://niverafansub.com'; + this.url = 'https://niverafansub.co'; this.requestOptions.headers.set('x-referer', this.url); } } \ No newline at end of file From c75bbb5a21eacaf69e3eec864a981479d10a987c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 20 Feb 2024 13:47:19 +0000 Subject: [PATCH 074/109] Fix ComicK : change domain (#6779) --- src/web/mjs/connectors/ComicK.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/ComicK.mjs b/src/web/mjs/connectors/ComicK.mjs index 656ad42231..cfafd9d776 100644 --- a/src/web/mjs/connectors/ComicK.mjs +++ b/src/web/mjs/connectors/ComicK.mjs @@ -9,8 +9,8 @@ export default class ComicK extends Connector { super.id = 'comick'; super.label = 'ComicK'; this.tags = [ 'manga', 'english' ]; - this.url = 'https://comick.ink'; - this.apiurl = 'https://api.comick.ink'; + this.url = 'https://comick.cc'; + this.apiurl = 'https://api.comick.cc'; this.requestOptions.headers.set('x-origin', this.url ); this.requestOptions.headers.set('x-referer', this.apiurl ); From 8938062e8561189cc8acd781e54119ea78e613e7 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 20 Feb 2024 13:47:38 +0000 Subject: [PATCH 075/109] FIx WebtoonHatti: change selector again (#6775) --- src/web/mjs/connectors/WebtoonHatti.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/web/mjs/connectors/WebtoonHatti.mjs b/src/web/mjs/connectors/WebtoonHatti.mjs index cf92d728e1..648d9b115a 100644 --- a/src/web/mjs/connectors/WebtoonHatti.mjs +++ b/src/web/mjs/connectors/WebtoonHatti.mjs @@ -8,5 +8,6 @@ export default class WebtoonHatti extends WordPressMadara { super.label = 'Webtoon Hatti'; this.tags = [ 'webtoon', 'turkish' ]; this.url = 'https://webtoonhatti.net'; + this.queryPages = 'div.page-break:not([style*="display:"]) source'; } } From 93c651bad56151deb4c7fc98e085a250bb1357a9 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 21 Feb 2024 09:34:24 +0000 Subject: [PATCH 076/109] FIX TCBScans: workaround for 404 errors (#6376) * FIX TCBScans: workarourd for 404 errors 1) Website changed url (unrelated) 2) They deliberately introduce missing junk pictures in popular manga chapters. Since they cant be distinguished by name pattern, we use another method ;) * requested changes * changed logic for fake pages missing pages are always at the end, so we start testing pictures backwards and stop when its good. * tbcscans: fire all promises and wait --- src/web/mjs/connectors/TCBScans.mjs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/web/mjs/connectors/TCBScans.mjs b/src/web/mjs/connectors/TCBScans.mjs index 2d12669a6e..0059be7e0c 100644 --- a/src/web/mjs/connectors/TCBScans.mjs +++ b/src/web/mjs/connectors/TCBScans.mjs @@ -8,7 +8,7 @@ export default class TCBScans extends Connector { super.id = 'tcbscans'; super.label = 'TCB Scans'; this.tags = [ 'manga', 'english', 'scanlation' ]; - this.url = 'https://onepiecechapters.com'; + this.url = 'https://tcbscans.com'; } async _getMangaFromURI(uri) { @@ -44,8 +44,27 @@ export default class TCBScans extends Connector { async _getPages(chapter) { const uri = new URL(chapter.id, this.url); - const request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, 'picture > source'); - return data.map(x => x.src); + const chapterRequest = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(chapterRequest, 'picture > source'); + + const promises = []; + for(const image of data) { + const promise = new Promise( (resolve, reject) => { + const pageUrl= this.getAbsolutePath(image, chapterRequest.url); + const request = new Request(pageUrl, { + method : 'HEAD', + }); + try { + fetch(request) + .then(response => response.status == 200 ? resolve(pageUrl) : reject()); + } catch(error) { + reject(); + } + }); + promises.push(promise); + } + + const results = await Promise.allSettled(promises); + return results.filter(promise => /fulfilled/i.test(promise.status)).map(promise => promise.value); } -} \ No newline at end of file +} From 5dae3445f6bfa3e31515fe9cdba738f0091e4a64 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 25 Feb 2024 19:29:57 +0000 Subject: [PATCH 077/109] Fix Opiatoon: changte domain (#6809) Fixes https://github.com/manga-download/hakuneko/issues/6791 --- src/web/mjs/connectors/Opiatoon.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/Opiatoon.mjs b/src/web/mjs/connectors/Opiatoon.mjs index 9948fc6e18..76a4c18f31 100644 --- a/src/web/mjs/connectors/Opiatoon.mjs +++ b/src/web/mjs/connectors/Opiatoon.mjs @@ -7,9 +7,9 @@ export default class Opiatoon extends WordPressMadara { super.id = 'opiatoon'; super.label = 'Opiatoon (Opia&Shipperland)'; this.tags = [ 'manga', 'turkish', 'webtoon' ]; - this.url = 'https://opiatoon.org'; + this.url = 'https://opiatoon.biz'; this.links = { - login: 'https://opiatoon.org/login' + login: 'https://opiatoon.biz/login' }; } } From b59a08f966fb42ff716259df281c8634573cb6cb Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 26 Feb 2024 10:22:04 +0000 Subject: [PATCH 078/109] ComicWalker: rebrand to KadoComi (#6808) Fixes https://github.com/manga-download/hakuneko/issues/6806 --- src/web/mjs/connectors/ComicWalker.mjs | 153 ++++++++++--------------- 1 file changed, 63 insertions(+), 90 deletions(-) diff --git a/src/web/mjs/connectors/ComicWalker.mjs b/src/web/mjs/connectors/ComicWalker.mjs index 89308021ba..5af7780866 100644 --- a/src/web/mjs/connectors/ComicWalker.mjs +++ b/src/web/mjs/connectors/ComicWalker.mjs @@ -6,114 +6,87 @@ export default class ComicWalker extends Connector { constructor() { super(); super.id = 'comicwalker'; - super.label = 'コミックウォーカー (ComicWalker)'; + super.label = 'カドコミ (KadoComi)'; this.tags = [ 'manga', 'japanese' ]; this.url = 'https://comic-walker.com'; + this.apiURL = 'https://comic-walker.com/api/'; } async _getMangaFromURI(uri) { - let request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, 'div#mainContent div#detailIndex div.comicIndex-box h1'); - let id = uri.pathname + uri.search; - let title = data[0].textContent.trim(); - return Promise.resolve(new Manga(this, id, title)); + const workCode = uri.pathname.match(/\/detail\/([^/]+)/)[1]; //strip search + const apiCallUrl = new URL(`contents/details/work?workCode=${workCode}`, this.apiURL); + const { work } = await this.fetchJSON(new Request(apiCallUrl, this.requestOptions)); + return new Manga(this, workCode, work.title.trim()); } - async _getMangaListPage(uri) { - let request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, 'div.comicPage ul.tileList li a p.tileTitle span'); - return data.map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element.closest('a'), request.url), - title: element.textContent.replace(/^[^\s]+\s/, '').trim() - }; - }); + async _getMangas() { + const mangasList = []; + const apiCallUrl = new URL(`search/initial`, this.apiURL); + const data = await this.fetchJSON(new Request(apiCallUrl, this.requestOptions)); + for (const entry of data) { + mangasList.push(...entry.items.map(manga => { + return { + id: manga.code, + title: manga.title.trim() + }; + })); + } + return mangasList; } - async _getMangaList(callback) { - try { - let mangaList = []; - for(let language of ['en', 'tw', 'jp']) { - let uri = new URL('/contents/list/', this.url); - let request = new Request(`${this.url}/set_lang/${language}/`, this.requestOptions); - request.headers.set('x-referer', uri.href); - let data = await this.fetchDOM(request, 'div.comicPage div.pager ul.clearfix li:nth-last-of-type(2) a'); - let pageCount = parseInt(data[0].text.trim()); - for(let page = 1; page <= pageCount; page++) { - uri.searchParams.set('p', page); - let mangas = await this._getMangaListPage(uri); - mangaList.push(...mangas); - } - } - callback(null, mangaList); - } catch(error) { - console.error(error, this); - callback(error, undefined); + async _getChapters( manga ) { + const chapterList = []; + const apiCallUrl = new URL(`contents/details/work?workCode=${manga.id}`, this.apiURL); + const data = await this.fetchJSON(new Request(apiCallUrl, this.requestOptions)); + + for (const episodeType of ['firstEpisodes', 'latestEpisodes' ]) { + + chapterList.push(...data[episodeType].result.map(episode => { + const title = [episode.title, episode.subtitle].join(' ').trim(); + return { id: episode.id, title : title}; + })); } - } - _getChapterList( manga, callback ) { - let request = new Request( this.url + manga.id, this.requestOptions ); - this.fetchDOM( request, 'div#ulreversible ul#reversible li a' ) - .then( data => { - let chapterList = data.map( element => { - return { - id: this.getRootRelativeOrAbsoluteLink( element, request.url ), - title: element.title.replace( manga.title, '' ).trim(), - language: '' - }; - } ); - callback( null, chapterList ); - } ) - .catch( error => { - console.error( error, manga ); - callback( error, undefined ); - } ); + for (const comic of data.comics.result) { + chapterList.push(...comic.episodes.map(episode => { + return { + id: episode.id, + title : episode.title.trim() + }; + })); + } + + return chapterList.filter(chapter => chapter === chapterList.find(c => c.id === chapter.id)); + } - _getPageList( manga, chapter, callback ) { - let request = new Request( this.url + chapter.id, this.requestOptions ); - this.fetchDOM( request, 'main#app' ) - .then( data => { - const endpoints = data[0].dataset.apiEndpointUrl ? data[0].dataset.apiEndpointUrl : JSON.parse(data[0].dataset.apiEndpointUrls); - let uri = `${endpoints.nc || endpoints.cw || endpoints}/api/v1/comicwalker/episodes/${data[0].dataset.episodeId}/frames`; - request = new Request( uri, this.requestOptions ); - return this.fetchJSON( request ); - } ) - .then( data => { - let pageList = data.data.result.map( page => this.createConnectorURI( this.getAbsolutePath( page.meta.source_url, this.url ) ) ); - callback( null, pageList ); - } ) - .catch( error => { - console.error( error, chapter ); - callback( error, undefined ); - } ); + async _getPages( chapter ) { + const apiCallUrl = new URL(`contents/viewer?episodeId=${chapter.id}&imageSizeType=width:1284`, this.apiURL); + const { manuscripts } = await this.fetchJSON(new Request(apiCallUrl, this.requestOptions)); + return manuscripts.map(page => this.createConnectorURI({ ...page })); } async _handleConnectorURI(payload) { - /* - * TODO: only perform requests when from download manager - * or when from browser for preview and selected chapter matches - */ - let passphrase = payload.split('/').find(part => /^[\da-f]{16}/.test(part)); - if(passphrase) { - let request = new Request(payload, this.requestOptions); - let response = await fetch(request); - return this._decrypt(await response.arrayBuffer(), passphrase); - } else { - return super._handleConnectorURI(payload); + const uri = new URL(payload.drmImageUrl, this.url); + const request = new Request(uri, this.requestOptions); + const response = await fetch(request); + switch (payload.drmMode) { + case 'xor': { + const encrypted = await response.arrayBuffer(); + const data = { + mimeType: response.headers.get('content-type'), + data: this._xor(encrypted, this._generateKey(payload.drmHash)) + }; + this._applyRealMime(data); + return data; + } + case 'raw': { + const data = await response.blob(); + return this._blobToBuffer(data); + } } } - _decrypt(encrypted, passphrase) { - let key = this._generateKey(passphrase); - let decrypted = this._xor(encrypted, key); - return Promise.resolve({ - mimeType: 'image/jpeg', - data: decrypted - }); - } - /** ****************************** * ** COMIC-WALKER CODE BEGIN *** @@ -140,4 +113,4 @@ export default class ComicWalker extends Connector { * ** COMIC-WALKER CODE END *** *************************** */ -} \ No newline at end of file +} From 3298228a77d64d940a54f0da6141ccbff1eada52 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 26 Feb 2024 10:22:52 +0000 Subject: [PATCH 079/109] Fix ManhuaPlus: domain and change template (#6825) No more madara. Fixes https://github.com/manga-download/hakuneko/issues/6824 --- src/web/mjs/connectors/ManhuaPlus.mjs | 90 ++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/src/web/mjs/connectors/ManhuaPlus.mjs b/src/web/mjs/connectors/ManhuaPlus.mjs index 7458e8e5d0..74ea28d2d8 100644 --- a/src/web/mjs/connectors/ManhuaPlus.mjs +++ b/src/web/mjs/connectors/ManhuaPlus.mjs @@ -1,40 +1,98 @@ -import WordPressMadara from './templates/WordPressMadara.mjs'; +import Connector from '../engine/Connector.mjs'; +import Manga from '../engine/Manga.mjs'; -export default class ManhuaPlus extends WordPressMadara { +export default class ManhuaPlus extends Connector { constructor() { super(); super.id = 'manhuaplus'; super.label = 'ManhuaPlus'; this.tags = [ 'webtoon', 'english' ]; - this.url = 'https://manhuaplus.com'; + this.url = 'https://manhuaplus.org'; + this.path = '/all-manga/'; - this.queryPages = 'figure source, div.page-break source, div.chapter-video-frame source, div.reading-content p source'; - this.requestOptions.headers.set('x-referer', this.url); - this.requestOptions.headers.set('x-origin', this.url); - this.requestOptions.headers.set('x-user-agent', 'Mozilla/5.0 (Windows NT 10.0; rv:111.0) Gecko/20100101 Firefox/111.0'); + } + + async _getMangaFromURI(uri) { + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'header h1'); + return new Manga(this, uri.pathname, data[0].textContent.trim()); } async _getMangas() { let mangaList = []; - let request = new Request(new URL('', this.url), this.requestOptions); - let data = await this.fetchDOM(request, 'div.wp-pagenavi a.last'); - let pageCount = parseInt(data[0].href.match(/\d+/)[0]); - for(let page = 0; page <= pageCount; page++) { - let mangas = await this._getMangasFromPage(page); + const uri = new URL(this.path, this.url); + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'div.blog-pager span:last-of-type a'); + const pageCount = parseInt(data[0].href.match(/\/(\d)+\//)[1]); + for(let page = 1; page <= pageCount; page++) { + const mangas = await this._getMangasFromPage(page); mangaList.push(...mangas); } return mangaList; } async _getMangasFromPage(page) { - let request = new Request(new URL('/page/' + page+'/', this.url), this.requestOptions); - let data = await this.fetchDOM(request, 'div.item-thumb a'); + const uri = new URL(this.path + page, this.url); + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'div.grid div.text-center > a'); return data.map(element => { return { - id: this.getRootRelativeOrAbsoluteLink(element, request.url), - title: element.title.trim() + id: this.getRootRelativeOrAbsoluteLink(element, this.url), + title: element.text.trim() }; }); } + + async _getChapters(manga) { + const uri = new URL(manga.id, this.url); + const request = new Request(uri, this.requestOptions); + const data = await this.fetchDOM(request, 'li.chapter > a'); + return data.map(element => { + return { + id: this.getRootRelativeOrAbsoluteLink(element, this.url), + title: element.text.trim() + }; + }); + } + + async _getPages(chapter) { + const script = ` + new Promise((resolve, reject) => { + + function parseResults(data) { + const dom = new DOMParser().parseFromString(data, 'text/html'); + let nodes = [...dom.querySelectorAll('div.separator')]; + if (nodes.length == 0) reject(); + + //sort if needed + if (nodes[0].hasAttribute('data-index')) { + nodes = nodes.sort(function (a, b) { + const za = parseInt(a.dataset.index); + const zb = parseInt(b.dataset.index); + return za - zb; + }); + } + resolve(nodes.map(element => { + const anchorElement = element.querySelector('a.readImg'); + return anchorElement.href ; + })); + } + + const ajaxendpoint = new URL('/ajax/image/list/chap/'+ CHAPTER_ID, window.location.href); + fetch(ajaxendpoint, { + headers: { + 'X-Requested-With' : 'XMLHttpRequest', + }}) + .then(response => response.json()) + .then(jsonData => { + parseResults(jsonData.html); + }); + }); + `; + + const uri = new URL(chapter.id, this.url); + const request = new Request(uri, this.requestOptions); + return Engine.Request.fetchUI(request, script); + } } From 71580feb0ccb0912a0bfe6a09446623e60441393 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Thu, 29 Feb 2024 17:54:40 +0000 Subject: [PATCH 080/109] FiX KomikAV: change domain & rebrnad to APKomik (#6839) Closes https://github.com/manga-download/hakuneko/issues/6837 --- src/web/mjs/connectors/KomikAV.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/KomikAV.mjs b/src/web/mjs/connectors/KomikAV.mjs index aff1e8a4fe..237ca6223c 100644 --- a/src/web/mjs/connectors/KomikAV.mjs +++ b/src/web/mjs/connectors/KomikAV.mjs @@ -5,9 +5,9 @@ export default class KomikAV extends WordPressMangastream { constructor() { super(); super.id = 'komikav'; - super.label = 'KomikAV'; + super.label = 'APKomik'; this.tags = [ 'manga', 'indonesian' ]; - this.url = 'https://komikav.com'; + this.url = 'https://apkomic.cc'; this.path = '/manga/list-mode/'; } -} \ No newline at end of file +} From 65b311379cf7750550f234d4574d880c145533a4 Mon Sep 17 00:00:00 2001 From: Ronny Date: Sat, 2 Mar 2024 09:26:00 +0100 Subject: [PATCH 081/109] use more recent user-agent header (#6835) --- src/web/mjs/engine/HeaderGenerator.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/engine/HeaderGenerator.mjs b/src/web/mjs/engine/HeaderGenerator.mjs index b3881a5eb1..e64d5b9c04 100644 --- a/src/web/mjs/engine/HeaderGenerator.mjs +++ b/src/web/mjs/engine/HeaderGenerator.mjs @@ -40,7 +40,7 @@ export default class HeaderGenerator { static get _browserChrome() { let $ = HeaderGenerator; - let version = $._rn( 105, 113 ) + '.' + $._rn( 0, 99 ) + '.' + $._rn( 0, 9999 ) + '.' + $._rn( 0, 999 ); + let version = $._rn( 120, 122 ) + '.' + $._rn( 0, 99 ) + '.' + $._rn( 0, 9999 ) + '.' + $._rn( 0, 999 ); return 'Mozilla/5.0 (' + $._os + ') AppleWebKit/537.36 (KHTML, like Gecko) Chrome/' + version + ' Safari/537.36'; } From 4fb1b74db264be96cf1882505aa97d9e570ad2f3 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 2 Mar 2024 09:08:17 +0000 Subject: [PATCH 082/109] Fix TuMangaOnline: fix getting pages (#6684) --- src/web/mjs/connectors/TuMangaOnline.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/TuMangaOnline.mjs b/src/web/mjs/connectors/TuMangaOnline.mjs index 0e473c5565..0ec1bab684 100644 --- a/src/web/mjs/connectors/TuMangaOnline.mjs +++ b/src/web/mjs/connectors/TuMangaOnline.mjs @@ -1,5 +1,5 @@ /* eslint-disable */ import Connector from '../engine/Connector.mjs'; import Manga from '../engine/Manga.mjs'; -const _0x26e904=_0xdbd7;function _0x5169(){const _0x464752=['W5X1WPmwWRddO07dOmkxW6KcqdldNCoVWOddQeOmWR4','BsZdJKxdLCoIW5uJ','yePaWReN','W7VcOqxdKM1XkSklWQZcHSomW6HNm8kBW6VcTwtdStJcMCocD8kjACoSWQJcISo+W7ddH8kAivxcQ8kvAXdcOSo9ksxcQLldMq1JW5ddLrhdS0tcMSkDWRJdGmo4fCknmmkTewLq','ae1RCrNdSJu','kheNexC','dsRcUq','WRhdPSkIW6S','WRSDDCoyWPxdJmkGzHRdHGPU','WOa6xCkHWRPKFCkxWPZcUHT0umkqWQTVy8oHCmohWQlcHmoXp8oUW50gtZtcPhhcVXhcNvD/WPzTWQHnW6WgW7yFWOPTAIn5WPxcHSkcrCoYlgZcGHtdVsRdPmkbWO9d','W59ZhCo1','W5TIgmoOW7m','uSogW5DzW5pcOSk6W5VcICoIWOhdPKxcOG','iXOkW4zfssJdQSkWoCoJWRS','ddhcUSksW77cKwvLW57dL1xcNCktzSkmgCoDtSoii3BdUmoinCkpgSoxEYtdHvxdLmk6W6DcEmkYi8kxeCo7W6hdV8ozuLzdBCoiiK4hW5ddT27dTwamW5HQWRxdNCoxWQS','gCo4mCoqq8kaW7tcKWzmrXiUbsyWeCkPWPvWW6OFW4hdUCoWWPJcTmolW4uNhXSQW6OCyxqcmmkKW5TSW7ZdJmokWRZdUvfskSkTcWBdJCk3wComWP/dUXRcSMxdQey','WPCFzmo4WR/dICkKErVdL1a1WO3cTryzACouu8owW7JcSGRdH8oTWRNdSSkzW7hdPfeocCoXW4JcJ8kTWRnfWQedWQa1cSk/WOPNaCkvWRdcMdiDrSo5W7pdUZdcSSoSz2pcPxi','WRyhWO5pWOm','gSkEnCkMqSoBAv5wW7/cQq','jrtdV8kEr8ocWPWfoshdMJZcNCo5aCoQ','WOldU8kmWPbIW6im','W50eWRDqcmkvk2KHvXBcNfJcQxGXWP3dHG0jWQ7cRepcUZzBpqSXyKtcSCkLW4pcMt/cUmkdlaJcMCkUWPTWW67dTJtdL2D6BZVdQSkeW547W7BcUcXrWRpdISkwuW','W6ddKsldRchcImoVWRPJWRKxztScCCkkW7rEWP8gW7NdVSk5W5TUWQvzB0KWWO5slSkEhmoIWQP5g8kGgWnIgZSuWRrNW5bbW6ldP8ofWQ3cM8kWFSoDW48pxXtdGea','mmk8WO44WPu','vmklsmkEWOFcRCkFCu5kWQ8BkueDqKlcTrVdUH7cM0FdMCoAy8oyW7u3W68AWOu2WOJdOmkRW71BeH8gm8k3WOJcHmkVW7fDWQddQCkvW4uqW4j7WQ7cGbtcHCo+qSktW53dTG','b3FdGNJdKCoMW7WLveC9W5K4BCkAdmozjY3cOa','jL13zrldPIdcVfu8oSovW6K','WQnQpKry','W5BcGSk3W4iu','nmoNACoRWPpcHupdOmoDeCojW4BdJGJcMq','W5xcRCoiW4LWW6uUW4ZcSd4','x1PhW4GhdwlcPmo+mmkSW7ddLMXTW4RdQ0hcUNVcGmkaW7S/drOQbmoBCKCMWQX0u8kHW7CmWPhdMSkdW7NdSJtdOdRcTmkAAbxcTvVdRgldMeVcJx5PAq0n','cWhdT8oPW44','b8oBbmoxW5m','CCk7umkeaa','qs3dOmk+yW','WOr9W5qAW7BcPvdcS8ovW7Xhu3i','W7X6bSoUW7mUmCkjWRBdIf4LbCovW7G7mmoHc8kkW7hdUq','c0FcQSojmCoeWONdHSkRgSkqmG','ev/cS8oti8k5W5hcQSouDSoE','W6NdPGO','y8k6zSk9aq','W77dRa7cN00','aCozba','W7mIW47dH8ky','W6yZWR7cKCksqSop','WPeiFa','F0iwW5hcVmkpWOBdLJFdJq','mwJcGSkQWOrKd8oPb3STWRVcHIFdPCkiuWDoW4ZcQSoTCMlcHH0hhSkcW7NcHCk2W5ZdKcVdOqPPwSk9WQddSmoRxJVdPSoJW4aijSkCwmkcl8kdawz3WOZcLCoBamkYoa','W7dcOSkpW5yp','W4qNWRtcK8ko','pfWBbM5ArSkbW7pcISo7','WRvNW7FcI8ksrColuY10W4/dQWtcIKagWOK2s8kGWOpcKd91gZPQFCoGjmkMs3VdKwHsxKFcS0ddPbnThSkUkfBcTmoGzmonkSoyemoWxYRcQSk0pq5lCH8','W6xdGZtcRMq','WRddPSkN','AI7cNsxcNmoBW64mAxG9','r07cP8oklCoZWR0XdedcIc/cJmkmiCogft7cHtRdRCkJW5ldT8kFvYJcJ8oAW4jtW4JcJxPCAmk7j1dcNdD1mSk4WOj4WO7dT1m5bajvoSocguRcKXunW63dK8oRWRe','W6S6FuK8','v3ncW5KQW4ZcO8kVWORdV1mfWQScW55UW496yWvPhr1cWO0jWQnLWR7dMCo2emooDYL6WQdcRCosWP/dIhHCWOBdQ8k5C8kCmCo5W6zNnSolW6aQfu3dIN0tWRVcStS','ur3dRCkvoSoqWPZdJ8oYvSorCWPQF0RcOwBcQCoEkqPIFaqprN8kW6ZcH8kIWP/dGqxdPSkPzY5YW5xcULTMqthcLZ/dRCkSwYPwjW3cS8oCbqacW4rhW54b','W5vciSkBW6/dT8kJxHNdLri','WRyfrSoteN96W6/dO2pdO2BcHgrzWONcLmoqWPRdSSoAWRlcHuZcPSobWRXgWQddUXFdPqT+W43cHJpdImkaW5pcLb7cJCkoW4TiW4CsW7dcTmk4WOKTimkOqCosW7uTWP0JqmojaW','W4BcUSkfW7SXWQDyWRxdQhFcVmktW6jUW5W+W4BcUSkDrCovdI3cOmkLF8oaWQFcLIXcW7pdO1iorYBdTHSJkmkZjxH1W7yxWObrtsH7FmkxhCkUdCkDxNHgWQxcTgq','gmomySoQWQG','sfCWWP9Z','WPCFCCoEWRxdJa','trRdR8kcAmkeW4e','WQtdPmk7W6RcGG','a8kXWRddS8klDmkFbsuo','gGldICoFW6i','hbRdPSoKW597wcD7D8kpbemre8kNW6/dTq','WQjkW5NcV13cPCkyohP4W5HpWOD6WORcSsy/bSkKxvFdMeNcRMpdO8oZgwmFqNCpkHLaW7WuW4NcMb3cIXuyd8odrSkQWRybq04go8kOufVcN8oGESoqECo9','h8kHW4JcOSkVs8kJpwLQ','C304WOnqaq','exjbomkNW54','ACowW49jW4BcTmkTW43dO8kaW5JcRtxdUWpcVmoDuJnvWPeZiu7dTmoPWRFcPsjXWPnDWOdcGcRcMuBcScZdKbLlASoaWRBcRtD0W4nHkmkfgbpcNM0xmmovgCoUWQtdRIu','yHRdGxVdSgFcM8oXjNldHhDqW6qRWOhdIX3cJf7cLSkhiuhdHNpdUxD/WOddTmoIFCoXzHH+DSklW6FcLXGRWONdVs3dPmkOW7aDCmkbfCkHW7fiWR3cNvuow09nuG','W6ffWO3cVSkkhta+eSkJy8kRW6Hjsf9ckrKoW75hWQJdJSkezSkInrdcUSkzcSkkqq/dPuSjW7NdStSQWR0rbu0DW6BdMHNdMYChq1RcHdhdIvS+kSonDd0','W7eMWPFdQGu','WRdcSmoiW5/dPa','W6eEWQFcVSkkhta+eSkJy8kRW6Hjsf9czvXAW74eW6dcJ8oumSoNnqBdSmobsCkLnfhcNrLgWQVdUcaaWR0rbu0DW6BdMHNdMYChq1RcHhFcHGK2zSkiFrC','W5P3bCo0W6iPkCkJW6BdRLi7hSod','WQmZWQHWWQK','WPC+WRjwWRu','yZnirtWtfSovWRRdHCk1xXTKb3GwW5tcU8keoSoQfmkdWRGBmca2W7rourGibSkTWRvtWOhcHNKaW5lcUs7dJ2jqnSkUWR3cMWSxmSo6W4COWQXzW4vwgd0','W7/cOX7cRqu','W4LIbmoTW74','iu1U','rSoUW5BcT8kZsSk4oW','WOxdOuNdGeCxW4/dKZhdUbJcJLqTW5RcLSkRFCk0W5xcLGigiSo8WOC+cmkRzCksfCoMW5VdI8kLaCkHW6xcTu9MW7NcQG1ifstdLuZcIGq3rNj/W7XRW715kG7cSIS','W7XCB8oJW6K','W6JcRH3cHZu','ibqAahPwrmkqW6G','WOr4bKLz','nZ4BWQTV','zLns','luSe','kbBdQ8kFB8oqWOy','W6vaeG','crBdRG','fSkZdmkHCa','WQZcM8oiWOBdKCohmtVcMqhdMSoWW5ZdSMj1WQJcSCogdG','WOuoDCoiW7hcImoHmq3dGGT+W4xdSu4aymkgySo8W7JcSGRdH8oTWRNdSSkzW7hdPfeocCoXW4JcJ8kTWRnfW7vrW7K1uCkvWOPNaCkvWRdcMdjaxCotW7pdUZdcSSoSz2pcPxi','yGVdHCkKWQDWja','WOj4W6JdTSo4','y2fwWO4a','p0LI','isddJG','WOGFzmkmWRxdJmkGzHRdHGPuW6dcTryh','W7u0tSoCW7VdKJldG3VcTSoHiSoZW5y1jSo2WPjzEIa9tLtdS8kPW7zXWQhcPSoTc8ovWPHXW5nSW7bIWRxcUa3dOSkbWQ3cR2WRuZ/cLHdcSmkkl8kIWRxdK8koWP3cJJpcO3C','W6OXthem','f8kulmo1zmomE3HAW6ddSY7dUwGxWQVdUSknWPNdTmkmathcLmk7W47dS23dLrrvW4PXW4CmWPZdKInDW7BdUSkSuvZdL8o4dCo7WPhdKXlcGmohWQ9cW4ZcKSk4bsG6WQLtWQy','o0zQCqG','W4ddJHxcGxa','W4jxW6TvyCoAz8oTxc1f','F1DAWPWTd23cT8o+FSk8','W4bxl8kKsG','dSkOjCkvW7ddJqlcSmkjvmkBWQRcH0BdKSkGrZOKW5GSbSoaWPhdImkEax/cKGldO8k+qbVdISozW4LKqSkd','WRfaWOZcVSobWQtcNaH5WPf5W6bLlINcGq0fmvFcPmoWrgTouN1WWRGRlmoYkLyYW4nLlCkNodtcQSkZW44Yp1NdMmkNW7XCW6VcLmogB8k+W6mvWRjLWRxdGHxdSG','W4jnd8kaeIG/WQ3cScRcTYpcHcawW4ZdH8oqW5tcVCkoWRldLr7cPCowWRTfWRdcUHhcOfW/W5hcHchcNCkaW47dIqBdGmoaW5XrW4muW6BcOSodWOmSnmk0gCoUWPfPWP1ZaCkAvW','W4pcPb3cGW9IWQy','W4pcQSkxW5SG','n18FW4FcSSkjWORdKsVdH8k1yCk5W7jLpmkXFSobtW42W69QlSoqW7zRW6/dMbFcPmo1WOq4pc06W6dcGq3cJGRdM8oskmkHl8oeWPipBKNdRcG0xL3cNqr2WPKIWQy','h8oOFSoWWQtcMu7dTq','WRDtsmk+cG','fHldUmkpzG','sSo1WQ3dQSoVv8k5ecyWWONcVqldPCkLW53dIXTqWPJcTHxcJgJcN2fmFs/cV1bKWQuUWQfpzSk+lmobomk/W6tdJdpcPxWEW5pcNutdGSoYW5ucWO7cSudcISkuoCoCzcS','WPLnW6hdHSoK','W50NEhqxmG','WOxdOuNdGeCxW4/dKZhdUbJcGabLWP/dMmo+i8oXWPFdLL1yEmkIWQ0JfSkRn8oxrSkPWPFcNCoGcCoZW73dRWqdWRFdUuHgqhBcMui','W4LDW6rcCmoAyq','BCkTxmkrdCohWRxdVeGadLXR','W41zWPqZWOy','W6nxcG','iZBcRCoEWPDMtmohW6NcQ8kgy15qwmkqW5ZcUCkAW6LHWPP6CZVdGmkTkCkgdCo7ovhcTmkAlq3cHM7dKLX7CSo+W5BdVCoNW6xdT8olWOG0WO3cTG0RWPVcOvGUW4NdKHxcQq','WPFcO8o4W43dNG','hc/dMCoOW68','WPrRd1nEWRWAo8o8D8k8W4dcS8k1yhxcQ8oRWPRdVf3dOCosWRtdTehcLSoSWO/dVwv1uIBcMMeZWPFdH8k+AZ/cK8kbvCk1mb4pW63cQCksWO3cQmo7WQC0WOVcN1ldIutcNbS','W4OiW6BcIxmJf8kHuJu3WQfZW4ddG8kwW7jyW7aqvbBcIGylAwddVHJcOSkxWRVdLmkoWPxcGCoNW6KYWQa','W6RcKSoDAWW','W6ZdIbZcKue','W4zlWR/dNsfQwCoM','W6xcTmoRWQBdM8k4WQCKWPVcLt8SW5P9W7iqkLNdGthdQCoRiHiMW73cKSotW68JjSkbk8kJW5NdRxtdV8oNqHvncHXLW6rjEudcKSoXhwyPW5KBj8k4o1dcPmkAr8oS','WPRdKSoeWQ5fqCk+s8oYdMRcQSkxisLdWQhcRw9Ho8kmv8oMW4bTW4ZcGCksW7KlW6ddHupdNsD0WRFcSIT3WQXTW6nBBCo9h8oYxbKNWO5ed8oiW47cTmkdutVdLteY','WOujW6uvtSoqEsXZ','gSkbWQ0eWQW','buf7nCkI','aL7dQmkpBmogWOahkG','jh3cLYpcMG','W5/cGCkqWQzcdCo3mmk2tZ7dQ8kAAgChW6tdTu9VkCkOemkJWPrLW5ZcImksWQvxW6ddGuVcMgSXW7RdT2uJWQu+WOOxiSkUwSkHcbeGW5SiaCklWOBdTCotbx7cHZX+','ktNdU8k7Eq','W5TkWOJdJcSJcSkHqI43W6G9WOtcHSooW7jeW7bceuxdN0PFzZtcT0ZdRSosWRZcK8kwWPZcISk6WR0OW74fWRddV8khm3SjvctcP8oRhXyKW7arheVdQ3tcNmozW77dLa','EbLirtWtfSovWRRdHCk1xXTKb3GwW5tcU8keoSoQfmkdW6TyCw56WRuAhKPBhmkTW45DW53dJs5hWPNcUIFdIxrkpSoWWRVcMWLwp8oWW5f0WQTfW40rftO','isjMW5ukurnUW73cQwldUuy','W7BcTdVcIIO','WOxdOuNdGeCxW4/dKZhdUbJcGabLWP/dMmkJl8k9W4pcKK0qoCoRWOC+fSoLCSkarSorW7RdSCkixCkNW7dcLfP4W6lcVbSssh/cGMJdMefNcJm8WRLJW7OPA0NdU2u','cCocBSogWQK','CeVdKmowWQzuug89WQXeW70uW45aWReOWRbBW4BdTbJdNCo1WQe+W7udWQRcMCkMi8kUWO3cGCkQq0SdytPJcSkQW4zFBX9iomoqW43dTCoMWO19AqyMlSoAWO1QW6a','WRbrs8kMna','W4aaWP7cQCkz','kceo','W5CKveCU','rmkVW7hcPSk5v8o7kdSYWOlcRcddSmkZWP/dIM9qWPZcUqBdIhJcL2fsmgBcVX82WRTJWQvnESoZo8okpCoKW6JdKsNcSYLJWP/dHuVdPSkMWODlW4pcUuNcG8kye8oCzcS','WPjEW5KAra','eSkHWQxdO8k1sSkImcW0W5BdRXRcQSo4WPBdHXPzWOtcTfJcG3xcMNrlmhRdPLnIW7y3W6bnDSk+oSonp8oKW7xdMJ/cONzfWPpdMLFcVmo1W5X/WOddVahdMSkCFmkqiwy','W6vxbq','WQ7cG8oRW4hdHmo8wSk7W5G','s0ldT8khFSoBWRSr','W4zDW7fND8oBFCoIxtzsW43dGYeR','W6FcSmoFvWaLF8oCWPFdIG','wCorE8o1fSkjpb0cWRddUYNcVYrwW6ZdT8oeW5RcU8ocddNdR8k2WORdP1VdKf4EWOO7W7CvW6JdGcnDW7BdUSkSuvZdL8o4dCo7WPhdKXlcGmohWQ9cW4ZcKSk4wdmqWQLtWQy','ls3dPmonW6O','jYddGq','wCo5W6FcMSki','W73cIcVcNXq','WR4HW4DgW6pdUuhdR8obWQbrd2ddH8oNWPJdPNKrWRZdHfiWWPddL8ocp8kvW4vMW69UWPHErmoff8oFW5GWlSkYASoZBrxcGSkwiSkqWRldNmkBWRrUAahcPa9XWQnQWP06','WOPVW6i+zG','W48YAwOn','ed3cTmkyWRFdQty','BgnAW4K/W5RcTmk5W6dcNqPoW5TB','WOlcI8o7W4FdT8o4e8kOW4ldPfFcL8oDWQPfbCo0WOauqcVdIxVcMSkismoyjMdcHComWR53WOhdVHtcHmop','cY3cUCkiW7ZdRYWXWPlcKGBdPSoAkmoixmkfm8oikhBdV8oitSkigSoCE3BcGaBcGCo2WRnmk8oXySozxCk6WRxdTmokvwWqi8kiB1a1WOlcSwFdVe5oWOyjW7tcKCkEW7e','dIVdRCkuWQe','dmowWQCiWO3dOCodWOJcQmopW5y','sLRdOCorW5TZuYi','jJFdK8k5WO5LfSkigMOWWRZcHZa','bmo6qSo1WRW','sWRdO8kdF8kFW5e','W4RcGZ7cLce','fmo4xmkrdCoiWQpdKGzb','WRyfrSoteN96W6/dO2pdO2BcHgrzWONdHSkvW5dcT8kzW6BcJqlcR8oxW7jKWQFdQb/dSHL5W6VcLG3dNmkcW4ddMZ3cGSkmW4vtW4nvW6BcOSkrWPyMnSoTw8oJWPbUW5zMbmojqG','W7FdQHdcTeFdTmoCACorl0y3sCk+FCkHnLWOW4miW7L1W4ldUuZcGWBcNCkMmrbfyervyM3cM8oDWOdcKCoEm0LRW5RdJ8o3W4ddKmkSWOmRW5dcSfBcHCook8kUWRH4W5a','W59fWOldJJi','W6HDWQpdSrK','W7BcNaxcLd4','W7hdVqG','W7ZcOCkTW7SH','v3ncW5KQW4ZcO8kVWORdV1mfWQTmWPS5W48kmuOKve4hWOubW7eGW63cLSk6rSklEYKOW6xcTCosWPBdMtiiWPpcSmoRESo5y8oWW71nnSolW6aQfu3dIN0tWRVcStS','swNcUmkrWQBdOWW2','jKDjCa7dQc/cTa','jI7cKSodusxdVq','cHldRSkczmocWP8h','WOddV8kmWPj5W4m3W5G','dub7AHJdRstcKfq+pCoEW69MWQmNW5X8W7K','W5faFmoEW64','AqLDvvzKF8kSW7BcRa','W648cCoqqwddGSkEW5fUca','WPu/W7SRiCo1Aq','WONdOSknfsedq8oqWRRdGq','W6WbW5FdTW/dOmoEohX+W5GdW440WO3dUJv6b8kxqapcLWdcTh7dPCk4qYeeqh0hFLu7W4C2WOtcNqBcJbWEq8kbgSkLWRHyaLjLDCoPbb7dM8oNC8oqjCkH','wXVcR8keF8kdW5BcISoYe8osoa9YnKJdVN3cPCodBGrWkWPcbY8cWQNdI8oNW5lcHeVcSSkPEJbYWPddTH4Rbh/dGZhcRSoGgNLysqNcSSoktK0yWROeWPyj','icj/W54ZrGC7WRVdVGhcOWncW65mpc1lrh7cQqblW6ldQ3pcTeG','yCo0W5FcQCkm','W6lcGCkcW5yR','kN9mm8k3W5CttmoNsW/cTmkKWRfyWRtdHCoWla','gmoLBCoTWRpcHq','WPT6mND6','vgedWPjb','W4iWqveJ','W7HMx8os','W5xcTSourcW','wmkSDmkurmkmW7tcLeunfffVqwm3rCk7WRzAW6OFW4hdUCoWWPJcTmolW4uNhXSQW6OCyxqcmmkKW5TSW7ZcHCkmWRtdVvLvySoOsKldJCoJemkwWPddV0NdUcpcTey','mK8siha','dCkEcmkHrmoaCLO','eSkHWQxdO8oHa8o2FgLNW4ZdR2hcPmo2WPJdG1muWPdcOf7cKNJcINfAjNZdOGqbWQvJW6abp8k+FSke','WOGkq8oGWQC','WO9bW6yftCogFWzXa1/dKXBdUG','mJ3dKmkjWOP1cG','WQjrWP7cQ8osWRtdVN8WW5qwWRa','W5vdj8kAW6pdJCkMyIJdTrO','WRvFW6ddRq','kc7cH8oexbpdGCks','WQejW5q7fW','W4jrxCo8W58','WOHPFSkHWQD6FComWRBcUHT0umkqWQTVy8oHCmohWQlcHmoXp8oUW50gtZtdQdtcP1tcMXjGWOPVWRDnW6WgWQK9WO04jI06W53dH8oseCk3FMhdJL3cRN7dPmonW4zd','WOqCWRe2WO8yW5uMW73cHvGXW64hq2ndaXLcWR/cI8k9q3pdJmoag2yngYVdUxyUWRHxmCktvSk2ECk7W6pdOmkHWQD2AW0gW4S4lbKnWPZdUmopW6dcPMuBWR4','AqXFu3b0zmkEW5BcNq','BMVdK8khfhFcRSo/vc/cT3hdVqRdPHxcQSk6uc5aW5ZdHCkObCktW73cT8kjjSkcW5eOhwFdJSkuu8k5gHWEy2tdHSo9ASk6B1LlCCk0AmkfF8khWQ7cTGCYfmkeWRi','WRfaWOZcVSobW6JdMvX5W5aZWQe9lJtcGqKlCb3dPCoKhG8jbZW3W714nSoYuvG8W41HjCkGBxJcPmoWWOzZBW3cNCoXW79rW6JcHSokB8oVWQPhWRn9WRBcIrldOW','dq3dSSoWW45TBWDLBCkdcfKn','dhfGhmkj','qhShWQX4','ia/dPSoXW6H2EJHHFmkyk14qcG','s8k9ymkfbSotWQddVfyydL1GvG','kLWzehLaqSk6W6RcKCo8efu3','W7pdJCkSW67cT8o+W4e','W7VdHYFcVM3dLCoRWOD2WRTwltey','WQusvSoluZ0mWPBcUYO','WRVcKCoNWPVdHG','W7DCWOJdPHS','iu17DH/dQq','W5neW7uTW4HnW68fWRNcKN4M','WPKIrmkXWRrTACkzW7ddRxGUfq','WQ/dUCkYW5tcNG','W6edWRNcVSornZa+eSkJy8kRW6Hjsf9ckrKoW75hWQJdJSkezSkIz1xdSmoCsCoEsqpdSreuW67cQxvfW65fcXLeWRBcNXFcJ2HYeWRdGwpcQHPTB8ofibC','nSk1WQ4/WOq','W5zJWQP4zSo5FmokW7Xgaa','DhlcGSoSW4S2qSoNsJ55W7pdIwpdQCkIuWDoW4ZcQSoTCMlcHH0hhSkcWOlcI8k4W5ldLcpdPKWMcmoWWQFdUCkwuh3cQCkXWQvjzCouumkrmSkDvMySW53dH8oqqCkHnG','eWqoWP9z','WO9TASkUoq','leSbca','W4NcItZcTXa','gvOIcxO','hY/cM8owWQ8','WQDBW7pdVCocAfK','WOuYoCoGW6K9pmomWRS','W7f3tSkffvRdLmo2WPS4sIikW6pdOg3dTmkMW47dIeafrKrQbmkDWQK3W6BcRCoKo13dHHNcICk7WPxcK1RdMSkDW49xsvKjW64jWRqEW4NdNmkfW7JcR8kiB8kcuHVcLSot','W4NcL8kfW7Wgcq','W5fWW4PsFG','xKS0W7/dPa','WPbfW7Kxsq','W5FcPbNcJazuWOO','WRFdVSktWP1K','W4i7WO/cI8kJ'];_0x5169=function(){return _0x464752;};return _0x5169();}(function(_0x322e64,_0x5530c0){const _0x48f4fa=_0xdbd7,_0x2c231f=_0x322e64();while(!![]){try{const _0x4e0989=-parseInt(_0x48f4fa(0x184,'b6@A'))/(0x163*-0x17+0x2470+-0x48a)*(parseInt(_0x48f4fa(0xb2,'Aslv'))/(0x632+0x337+-0x967))+-parseInt(_0x48f4fa(0x147,'muSx'))/(-0x17*-0x113+-0xbc7*-0x2+-0x3040)+parseInt(_0x48f4fa(0x103,'Nlnl'))/(-0xbc*-0x1b+0x1448+-0x2818)*(parseInt(_0x48f4fa(0x14b,'C%cx'))/(0x1845*0x1+-0xa97+-0xda9))+parseInt(_0x48f4fa(0x142,'Jh6K'))/(-0xdc9+-0x1140+0x1*0x1f0f)*(parseInt(_0x48f4fa(0x118,'Wds8'))/(-0x6ca+0x69d+-0xd*-0x4))+parseInt(_0x48f4fa(0x11b,'A(we'))/(-0x1*0x1387+-0x1*0x146b+0x27fa)*(-parseInt(_0x48f4fa(0x199,'tR^N'))/(-0x5e3*0x1+-0x1*-0x897+0x2ab*-0x1))+parseInt(_0x48f4fa(0x12f,'IiJT'))/(-0xf28*-0x2+-0x2338+-0xd3*-0x6)*(-parseInt(_0x48f4fa(0xf2,'o0xn'))/(-0x1*-0x1ff9+0xcc7+-0x2cb5))+parseInt(_0x48f4fa(0x169,'@z*E'))/(0x11f3+-0x67d+-0xb6a);if(_0x4e0989===_0x5530c0)break;else _0x2c231f['push'](_0x2c231f['shift']());}catch(_0x4f4fba){_0x2c231f['push'](_0x2c231f['shift']());}}}(_0x5169,0x36d05*0x1+0xd*0x62ff+-0x51b57));const _0x282754=(function(){const _0x58ff8a=_0xdbd7,_0x96f82a={};_0x96f82a[_0x58ff8a(0x101,'Aslv')]=_0x58ff8a(0x16a,'l1NV'),_0x96f82a[_0x58ff8a(0x15f,'l1NV')]=function(_0x5ecd4e,_0x19c202){return _0x5ecd4e!==_0x19c202;},_0x96f82a[_0x58ff8a(0x123,'4#3v')]=_0x58ff8a(0xe9,'rxR4'),_0x96f82a[_0x58ff8a(0xd7,'^)u5')]=_0x58ff8a(0x151,'Wds8'),_0x96f82a[_0x58ff8a(0x14e,'rxR4')]=function(_0x55a51d,_0x2a9c81){return _0x55a51d===_0x2a9c81;},_0x96f82a[_0x58ff8a(0x157,'JWa4')]=_0x58ff8a(0x18e,'npl!'),_0x96f82a[_0x58ff8a(0xaf,'Rl3o')]=function(_0x3a0098,_0x1f95ac){return _0x3a0098!==_0x1f95ac;},_0x96f82a[_0x58ff8a(0x10f,'npl!')]=_0x58ff8a(0x19d,'fi]w'),_0x96f82a[_0x58ff8a(0x15b,'BUcV')]=_0x58ff8a(0x187,'^)u5');const _0x4c09e4=_0x96f82a;let _0xf3f5c4=!![];return function(_0xe9a483,_0x5ecf22){const _0x19d81a=_0x58ff8a,_0x2c4829={'hStfn':_0x4c09e4[_0x19d81a(0x10c,'b%L^')],'WxPtX':function(_0x1ef42f,_0x5961a2){const _0x105f8e=_0x19d81a;return _0x4c09e4[_0x105f8e(0xf8,'1(jY')](_0x1ef42f,_0x5961a2);},'jvzEl':_0x4c09e4[_0x19d81a(0x125,'mpA0')],'NWlfS':_0x4c09e4[_0x19d81a(0x1a2,'Nlnl')],'pVVhq':function(_0x28ddcb,_0x50d979){const _0x3b073d=_0x19d81a;return _0x4c09e4[_0x3b073d(0x13c,'fi]w')](_0x28ddcb,_0x50d979);},'SJaQs':_0x4c09e4[_0x19d81a(0x162,'Wds8')]};if(_0x4c09e4[_0x19d81a(0x107,'PC6!')](_0x4c09e4[_0x19d81a(0x133,'C%cx')],_0x4c09e4[_0x19d81a(0x18f,'zS5q')])){const _0x4cb549=_0xf3f5c4?function(){const _0x952733=_0x19d81a;if(_0x2c4829[_0x952733(0x15c,'zS5q')](_0x2c4829[_0x952733(0x129,'Wds8')],_0x2c4829[_0x952733(0x14d,'V*ko')])){if(_0x5ecf22){if(_0x2c4829[_0x952733(0xdd,'k^w]')](_0x2c4829[_0x952733(0xe1,'o0xn')],_0x2c4829[_0x952733(0x174,'@z*E')])){const _0x37e33a=_0x5ecf22[_0x952733(0xfc,'mpA0')](_0xe9a483,arguments);return _0x5ecf22=null,_0x37e33a;}else return _0x359f71[_0x952733(0x112,'S99u')]()[_0x952733(0x19e,'tR^N')](_0x2c4829[_0x952733(0x10d,')j%w')])[_0x952733(0xd8,'b%L^')]()[_0x952733(0x16f,'Rl3o')](_0x6f4dd0)[_0x952733(0x156,'npl!')](_0x2c4829[_0x952733(0xb4,'l1NV')]);}}else{const _0x4472b0=_0x269086?function(){const _0x53b371=_0x952733;if(_0x4434b1){const _0x3303b3=_0x4245d7[_0x53b371(0xa1,'muSx')](_0x4f5d23,arguments);return _0xcf457d=null,_0x3303b3;}}:function(){};return _0x14991f=![],_0x4472b0;}}:function(){};return _0xf3f5c4=![],_0x4cb549;}else _0x9de4fb=_0x500bd1[_0x19d81a(0x17e,'Lts1')](_0x3b3940)[0x1ff0+0x30f+0x121*-0x1f][_0x19d81a(0x164,'S(jO')]();};}()),_0xa22f77=_0x282754(this,function(){const _0x9539b0=_0xdbd7,_0xd08be7={};_0xd08be7[_0x9539b0(0x180,'b6@A')]=_0x9539b0(0x183,'b6@A');const _0x1035bf=_0xd08be7;return _0xa22f77[_0x9539b0(0x12a,'Rl3o')]()[_0x9539b0(0x145,'S99u')](_0x1035bf[_0x9539b0(0x189,'IiJT')])[_0x9539b0(0xa3,'1(jY')]()[_0x9539b0(0xbd,'JWa4')](_0xa22f77)[_0x9539b0(0xcb,'mpA0')](_0x1035bf[_0x9539b0(0xe7,'uVEN')]);});_0xa22f77();function _0xdbd7(_0x5a3b5c,_0x58c7f8){const _0x5926d9=_0x5169();return _0xdbd7=function(_0x1a65cc,_0x4fcb6c){_0x1a65cc=_0x1a65cc-(-0x2bf*0x5+-0x35a+-0x5e5*-0x3);let _0x91b5ed=_0x5926d9[_0x1a65cc];if(_0xdbd7['SbpUsT']===undefined){var _0x11a12e=function(_0xc51ac){const _0x4c7062='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x104f4d='',_0x4d9731='',_0x3fe99a=_0x104f4d+_0x11a12e;for(let _0x2fc08d=0x14ad*-0x1+-0x1a5*-0x5+-0x31d*-0x4,_0x402081,_0x2b731a,_0x1cf2d8=0x1a24+-0xc*0x190+0x3b2*-0x2;_0x2b731a=_0xc51ac['charAt'](_0x1cf2d8++);~_0x2b731a&&(_0x402081=_0x2fc08d%(0x11fd+0x194a*-0x1+0x751)?_0x402081*(-0x1d3*0x13+-0x2*-0x79d+0x1*0x13af)+_0x2b731a:_0x2b731a,_0x2fc08d++%(0x2*-0x8ad+-0x1d44+0x2ea2))?_0x104f4d+=_0x3fe99a['charCodeAt'](_0x1cf2d8+(0x1*-0x22f3+0x2*0x123a+-0x177))-(0xf4f*0x1+-0x1*0x20f8+-0x11b3*-0x1)!==-0x2021+-0xb31+0x2*0x15a9?String['fromCharCode'](-0x7*-0x2bf+0x3bf*0x3+0x13*-0x18d&_0x402081>>(-(-0xb8*-0x20+-0x17fb+0xfd)*_0x2fc08d&-0x1970+-0x8*0x3fb+0x2d*0x146)):_0x2fc08d:-0xc7*-0x1+-0x22ee+0x2227){_0x2b731a=_0x4c7062['indexOf'](_0x2b731a);}for(let _0x3ca180=-0x2351+0x131f+0x2*0x819,_0x4a3b86=_0x104f4d['length'];_0x3ca180<_0x4a3b86;_0x3ca180++){_0x4d9731+='%'+('00'+_0x104f4d['charCodeAt'](_0x3ca180)['toString'](-0x2*0xf3f+0x22*-0x1+0x2*0xf58))['slice'](-(0x5e*0x6a+0x2052+-0x473c));}return decodeURIComponent(_0x4d9731);};const _0x7f4f79=function(_0x24770c,_0x130b6e){let _0x1e430f=[],_0x404bbe=-0x8a2*-0x4+-0x1a8f*0x1+-0x7f9,_0x1a49c6,_0x320e88='';_0x24770c=_0x11a12e(_0x24770c);let _0x584fc6;for(_0x584fc6=-0x1bcc+-0x7*-0x4cd+-0x5cf;_0x584fc6<-0xa*0xbf+-0xe39+0x16af;_0x584fc6++){_0x1e430f[_0x584fc6]=_0x584fc6;}for(_0x584fc6=0x529*-0x1+-0x8f*-0x6+0x1cf;_0x584fc6<0x9*-0x185+-0x17*-0x13+0xcf8;_0x584fc6++){_0x404bbe=(_0x404bbe+_0x1e430f[_0x584fc6]+_0x130b6e['charCodeAt'](_0x584fc6%_0x130b6e['length']))%(-0x1*0x1bdf+-0x1ba1+0x3880),_0x1a49c6=_0x1e430f[_0x584fc6],_0x1e430f[_0x584fc6]=_0x1e430f[_0x404bbe],_0x1e430f[_0x404bbe]=_0x1a49c6;}_0x584fc6=0x1*-0x65a+-0x241b+0x2a75,_0x404bbe=0x3a*-0x3b+0x1*-0x23f8+0x3156;for(let _0x241119=-0x13b0+0x1254+0x3a*0x6;_0x241119<_0x24770c['length'];_0x241119++){_0x584fc6=(_0x584fc6+(0x1318+0x1c71+-0x138*0x27))%(-0x1*0x13+-0x11*0x5c+-0x1*-0x72f),_0x404bbe=(_0x404bbe+_0x1e430f[_0x584fc6])%(0x1af5+-0x187c+-0x1d*0xd),_0x1a49c6=_0x1e430f[_0x584fc6],_0x1e430f[_0x584fc6]=_0x1e430f[_0x404bbe],_0x1e430f[_0x404bbe]=_0x1a49c6,_0x320e88+=String['fromCharCode'](_0x24770c['charCodeAt'](_0x241119)^_0x1e430f[(_0x1e430f[_0x584fc6]+_0x1e430f[_0x404bbe])%(0x214*0x3+0x1e9a+-0x23d6)]);}return _0x320e88;};_0xdbd7['UwnaUj']=_0x7f4f79,_0x5a3b5c=arguments,_0xdbd7['SbpUsT']=!![];}const _0x41b6e9=_0x5926d9[-0x8*-0x376+0x225d*0x1+-0x3e0d],_0x5ef105=_0x1a65cc+_0x41b6e9,_0x3e7a9c=_0x5a3b5c[_0x5ef105];if(!_0x3e7a9c){if(_0xdbd7['mceUvj']===undefined){const _0x391f87=function(_0x1ac3e6){this['wGZqaw']=_0x1ac3e6,this['iBUJPG']=[0x772*-0x2+-0x2579*-0x1+-0x11*0x154,0x2548+0x62*0x50+0x21f4*-0x2,-0x1*0x1d4b+0x224e+0x503*-0x1],this['EaRImi']=function(){return'newState';},this['PkxMSc']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['vCbriU']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x391f87['prototype']['wnuIuJ']=function(){const _0x123c8=new RegExp(this['PkxMSc']+this['vCbriU']),_0x3a23d0=_0x123c8['test'](this['EaRImi']['toString']())?--this['iBUJPG'][0x1b68+0x1f3*-0x10+-0x11*-0x39]:--this['iBUJPG'][0x875+-0x1*-0xd46+0x15bb*-0x1];return this['mDyiNX'](_0x3a23d0);},_0x391f87['prototype']['mDyiNX']=function(_0x52067d){if(!Boolean(~_0x52067d))return _0x52067d;return this['iaHAnF'](this['wGZqaw']);},_0x391f87['prototype']['iaHAnF']=function(_0x402838){for(let _0x25c196=-0x101*-0xe+0x1df5+-0x2c03,_0x36ce4a=this['iBUJPG']['length'];_0x25c196<_0x36ce4a;_0x25c196++){this['iBUJPG']['push'](Math['round'](Math['random']())),_0x36ce4a=this['iBUJPG']['length'];}return _0x402838(this['iBUJPG'][0x2501+-0x5d*-0x23+-0x31b8]);},new _0x391f87(_0xdbd7)['wnuIuJ'](),_0xdbd7['mceUvj']=!![];}_0x91b5ed=_0xdbd7['UwnaUj'](_0x91b5ed,_0x4fcb6c),_0x5a3b5c[_0x5ef105]=_0x91b5ed;}else _0x91b5ed=_0x3e7a9c;return _0x91b5ed;},_0xdbd7(_0x5a3b5c,_0x58c7f8);}class TuMangaOnline extends Connector{constructor(){const _0x3c4d9f=_0xdbd7,_0x4017f0={};_0x4017f0[_0x3c4d9f(0x14a,'@z*E')]=_0x3c4d9f(0x181,'Edzx'),_0x4017f0[_0x3c4d9f(0xec,'mpA0')]=_0x3c4d9f(0x10b,'b%L^'),_0x4017f0[_0x3c4d9f(0xb3,'()Qh')]=_0x3c4d9f(0x18a,'zS5q'),_0x4017f0[_0x3c4d9f(0x12c,'tR^N')]=_0x3c4d9f(0x182,'muSx'),_0x4017f0[_0x3c4d9f(0xa0,'PC6!')]=_0x3c4d9f(0xd1,'aN&#')+_0x3c4d9f(0x17c,'l1NV'),_0x4017f0[_0x3c4d9f(0xf9,')j%w')]=_0x3c4d9f(0x19f,'b6@A'),_0x4017f0[_0x3c4d9f(0x150,'PC6!')]=_0x3c4d9f(0x177,'S99u'),_0x4017f0[_0x3c4d9f(0xbc,'^)u5')]=_0x3c4d9f(0x15d,'Edzx'),_0x4017f0[_0x3c4d9f(0xca,'()Qh')]=_0x3c4d9f(0xce,'(oeN'),_0x4017f0[_0x3c4d9f(0x16e,'lfn%')]=_0x3c4d9f(0xdb,'VawC');const _0x338c5a=_0x4017f0,_0x1a8dbb=_0x338c5a[_0x3c4d9f(0xea,'zS5q')][_0x3c4d9f(0x168,'muSx')]('|');let _0x2b86d7=-0x171a*0x1+0xb*0x1f3+0x1a9;while(!![]){switch(_0x1a8dbb[_0x2b86d7++]){case'0':super();continue;case'1':this[_0x3c4d9f(0x131,'()Qh')]=[_0x338c5a[_0x3c4d9f(0x13b,'k^w]')],_0x338c5a[_0x3c4d9f(0x9d,'lfn%')]];continue;case'2':const _0x122688={};_0x122688[_0x3c4d9f(0xc8,'o0xn')]=_0x338c5a[_0x3c4d9f(0x179,'npl!')],_0x122688[_0x3c4d9f(0x190,'Wds8')]=_0x338c5a[_0x3c4d9f(0x186,'(oeN')],_0x122688[_0x3c4d9f(0xbb,'S99u')]=_0x338c5a[_0x3c4d9f(0xd3,'Nlnl')],_0x122688[_0x3c4d9f(0x185,'U%Tj')]=0x0,_0x122688[_0x3c4d9f(0xb5,'S99u')]=0x1388,_0x122688[_0x3c4d9f(0xa6,')j%w')]=0x1f4;const _0x478f7f={};_0x478f7f[_0x3c4d9f(0xc6,'uVEN')]=_0x122688,this[_0x3c4d9f(0x1a6,'fi]w')]=_0x478f7f;continue;case'3':super['id']=_0x338c5a[_0x3c4d9f(0xa5,'(0%r')];continue;case'4':this[_0x3c4d9f(0xeb,'V*ko')]=_0x338c5a[_0x3c4d9f(0x158,'Ggx2')];continue;case'5':super[_0x3c4d9f(0x192,'^)u5')]=_0x338c5a[_0x3c4d9f(0x120,'npl!')];continue;case'6':this[_0x3c4d9f(0x104,'Aslv')][_0x3c4d9f(0xfd,'TTru')][_0x3c4d9f(0xad,'Jh6K')](_0x338c5a[_0x3c4d9f(0xbf,'Jh6K')],this[_0x3c4d9f(0xb6,'Aslv')]);continue;}break;}}async[_0x26e904(0x176,'AIVa')](){const _0x1dacd4=_0x26e904;await super[_0x1dacd4(0xb0,'pLKV')](),await this[_0x1dacd4(0x167,'muSx')](-0x13*0x1d+-0x157*-0x9+0x1*-0x24);}async[_0x26e904(0x170,'o0xn')](_0x5ddfce){const _0x174508=_0x26e904,_0x5b75e3={};_0x5b75e3[_0x174508(0x9e,'lfn%')]=_0x174508(0x18c,'Ggx2'),_0x5b75e3[_0x174508(0x148,'S(jO')]=function(_0x1d68e7,_0x4f15ba){return _0x1d68e7+_0x4f15ba;},_0x5b75e3[_0x174508(0x152,'aN&#')]=_0x174508(0x154,'muSx'),_0x5b75e3[_0x174508(0x19c,'uVEN')]=_0x174508(0x1a5,'1(jY'),_0x5b75e3[_0x174508(0x144,'b%L^')]=_0x174508(0x108,'(oeN'),_0x5b75e3[_0x174508(0x105,'uVEN')]=function(_0x1a682e,_0x4f7388){return _0x1a682e===_0x4f7388;},_0x5b75e3[_0x174508(0xc4,'npl!')]=_0x174508(0x178,'4#3v'),_0x5b75e3[_0x174508(0x11f,'1(jY')]=_0x174508(0xc7,'rxR4');const _0x15792c=_0x5b75e3;let _0x352e4d=new Request(_0x5ddfce,this[_0x174508(0x13f,'Wds8')]),_0x5c9a53=await this[_0x174508(0x115,'BUcV')](_0x352e4d,_0x15792c[_0x174508(0xfb,'VawC')]),_0x496693=_0x15792c[_0x174508(0xa9,'V*ko')](_0x5ddfce[_0x174508(0x114,'o0xn')],_0x5ddfce[_0x174508(0x122,'uVEN')]),_0x2141e4=_0x5c9a53[-0x850+0x2330*-0x1+0x2b80][_0x174508(0xbe,'l1NV')];for(let _0x4e2482 of[_0x15792c[_0x174508(0xdc,'@z*E')],_0x15792c[_0x174508(0x1ab,'Y])X')],_0x15792c[_0x174508(0x196,'mpA0')]]){if(_0x15792c[_0x174508(0xee,'VawC')](_0x15792c[_0x174508(0xcf,'Edzx')],_0x15792c[_0x174508(0xe5,'PC6!')])){const _0x99319=_0x425eec[_0x174508(0x1a0,'S(jO')](_0x772ff6,arguments);return _0x35a65d=null,_0x99319;}else _0x2141e4=_0x2141e4[_0x174508(0xa8,'4#3v')](_0x4e2482)[-0x1*0x74c+-0xab6*-0x2+0x71*-0x20][_0x174508(0x14f,'Wds8')]();}return new Manga(this,_0x496693,_0x2141e4);}async[_0x26e904(0xf4,'A(we')](){const _0x38bc97=_0x26e904,_0x4b5d66={};_0x4b5d66[_0x38bc97(0x117,'(0%r')]=_0x38bc97(0xc2,'Jh6K')+_0x38bc97(0xb8,'(0%r')+_0x38bc97(0x102,'@z*E');const _0x3e3c78=_0x4b5d66;let _0x2f6aae=_0x3e3c78[_0x38bc97(0x9a,'Dy@9')];throw new Error(_0x2f6aae);}async[_0x26e904(0x165,'tR^N')](_0x596bd2){const _0x580959=_0x26e904;let _0x1ee977=_0x580959(0xfa,'Edzx')+_0x580959(0x166,'muSx')+_0x580959(0xef,'1(jY')+_0x580959(0x160,')j%w')+_0x580959(0xe0,'npl!')+_0x580959(0x173,'^)u5')+_0x580959(0x191,'zS5q')+_0x580959(0xe3,'Wds8')+_0x580959(0xed,'1(jY')+_0x580959(0xc1,'IiJT')+_0x580959(0x11d,'b6@A')+_0x580959(0xba,'Rl3o')+_0x580959(0x9b,'()Qh')+_0x580959(0xe2,'b%L^')+_0x580959(0xd9,'S(jO')+_0x580959(0xd5,'b%L^')+(_0x580959(0x100,'TTru')+_0x580959(0x19a,'Jh6K')+_0x580959(0xda,'npl!')+_0x580959(0x10a,'U%Tj')+_0x580959(0x11e,'fi]w')),_0x2725ac=new Request(new URL(_0x596bd2['id'],this[_0x580959(0xab,'Wds8')]),this[_0x580959(0x9c,'muSx')]),_0x372ddf=await Engine[_0x580959(0xac,'o0xn')][_0x580959(0x153,'()Qh')](_0x2725ac,_0x1ee977);return _0x372ddf[_0x580959(0x12e,'Aslv')](_0x13b6e7=>_0x13b6e7[_0x580959(0x17d,'Nlnl')]=_0x13b6e7[_0x580959(0x17d,'Nlnl')][_0x580959(0x15a,'PC6!')](/\s+/g,'\x20')),_0x372ddf;}async[_0x26e904(0x17a,'uVEN')](_0x5df718){const _0x33f90b=_0x26e904,_0x56cc75={};_0x56cc75[_0x33f90b(0x17f,'(oeN')]=function(_0x4427ec,_0x5d79de){return _0x4427ec+_0x5d79de;};const _0x156897=_0x56cc75;let _0x5e1ae8=_0x33f90b(0x110,'V*ko')+_0x33f90b(0x16d,'tR^N')+_0x33f90b(0x139,'IiJT')+_0x33f90b(0x149,'()Qh')+_0x33f90b(0x195,'o0xn')+_0x33f90b(0xe6,'PC6!')+_0x33f90b(0x138,'A0HH')+_0x33f90b(0x1a9,'25r]')+_0x33f90b(0x1a4,'Y])X')+_0x33f90b(0xc5,'Ggx2')+_0x33f90b(0x9f,'Wds8')+_0x33f90b(0xb1,'tR^N')+_0x33f90b(0x172,'VawC')+_0x33f90b(0x197,'V*ko')+_0x33f90b(0xe8,'FCI0')+_0x33f90b(0x12b,'1(jY')+(_0x33f90b(0x16c,'(oeN')+_0x33f90b(0xc9,'1(jY')+_0x33f90b(0x109,'Jh6K')+_0x33f90b(0xd4,'4#3v')+_0x33f90b(0x135,'muSx')+_0x33f90b(0x136,'lfn%')+_0x33f90b(0x11c,'Y])X')+_0x33f90b(0x175,'Lts1')+_0x33f90b(0xa4,'PC6!')+_0x33f90b(0x128,'(oeN')+_0x33f90b(0x198,'b6@A')+_0x33f90b(0x14c,'Aslv')+_0x33f90b(0x155,'rxR4')+_0x33f90b(0x18d,'Aslv')+_0x33f90b(0x16b,'TTru')+_0x33f90b(0xc0,'uVEN'))+(_0x33f90b(0x1a8,'@z*E')+_0x33f90b(0xf5,'Rl3o')+_0x33f90b(0x19b,'BUcV')+_0x33f90b(0x1aa,'()Qh')+_0x33f90b(0xcc,'PC6!')),_0x884e36=new Request(new URL(_0x5df718[_0x33f90b(0x127,'A(we')]['id'],this[_0x33f90b(0x18b,'tR^N')]),this[_0x33f90b(0x12d,'VawC')]),_0x5b7496=await Engine[_0x33f90b(0x161,'S99u')][_0x33f90b(0xc3,'PC6!')](_0x884e36,_0x156897[_0x33f90b(0x143,'pLKV')](_0x33f90b(0xb7,'tR^N')+_0x5df718['id']+';',_0x5e1ae8));return new URL(_0x5b7496,_0x884e36[_0x33f90b(0x10e,'U%Tj')]);}async[_0x26e904(0xf1,'Dy@9')](_0x44b4bb){const _0x3683e4=_0x26e904,_0x349726={};_0x349726[_0x3683e4(0xb9,'mpA0')]=_0x3683e4(0xa7,'Wds8'),_0x349726[_0x3683e4(0xdf,'25r]')]=_0x3683e4(0xff,'Dy@9');const _0x2cd2b7=_0x349726;let _0x5a3526=await this[_0x3683e4(0x13d,'Nlnl')](_0x44b4bb),_0x181986=new Request(_0x5a3526,this[_0x3683e4(0x13a,'Nlnl')]);_0x181986[_0x3683e4(0xcd,'JWa4')][_0x3683e4(0xa2,'S99u')](_0x2cd2b7[_0x3683e4(0x124,'fi]w')],new URL(_0x44b4bb[_0x3683e4(0x159,'VawC')]['id'],this[_0x3683e4(0x193,'S(jO')])[_0x3683e4(0x126,'(0%r')]);let _0x2caa67=await this[_0x3683e4(0x132,'A0HH')](_0x181986,_0x2cd2b7[_0x3683e4(0xd2,'Dy@9')]);return _0x2caa67[_0x3683e4(0xaa,'l1NV')](_0x11ed7d=>this[_0x3683e4(0x1a3,'Nlnl')]({'url':this[_0x3683e4(0xf3,'JWa4')](_0x11ed7d[_0x3683e4(0x171,'BUcV')][_0x3683e4(0xf0,'Jh6K')]||_0x11ed7d[_0x3683e4(0xf7,'Aslv')],_0x181986[_0x3683e4(0xd0,'Jh6K')]),'referer':_0x181986[_0x3683e4(0x188,'Lts1')]}));}[_0x26e904(0x121,'k^w]')](_0x330d12){const _0x2fe6b3=_0x26e904,_0x5991de={};_0x5991de[_0x2fe6b3(0xd6,'A(we')]=_0x2fe6b3(0xde,'o0xn');const _0x32993d=_0x5991de;this[_0x2fe6b3(0x13e,'(oeN')][_0x2fe6b3(0x106,'b6@A')][_0x2fe6b3(0xae,'o0xn')](_0x32993d[_0x2fe6b3(0xf6,'Nlnl')],_0x330d12[_0x2fe6b3(0x11a,'C%cx')]);let _0x13716b=super[_0x2fe6b3(0x116,'S99u')](_0x330d12[_0x2fe6b3(0x163,'TTru')]);return this[_0x2fe6b3(0x141,'^)u5')][_0x2fe6b3(0x113,'A0HH')][_0x2fe6b3(0x1a7,'k^w]')](_0x32993d[_0x2fe6b3(0x134,'(0%r')]),_0x13716b;}} +const _0x2337bc=_0x3bc7;function _0x55e1(){const _0x450371=['\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scanlators:\x20[...$(\x27ul.chapter-list\x20li\x20di','referer','oFAwT','const\x20nodes\x20=\x20[...document.querySelectorAll(\x27img.viewer-img,\x20img','CIpCc','_getChapters','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20uri\x20=\x20xhr.responseURL.includes(\x27paginated\x27)\x20||','3|2|0|1|6|4|5','forEach','===\x20\x27POST\x27\x20||\x20request.url.includes(\x27uploads/\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','x-referer','WBiIx','o\x20HakuNeko.','xt().toLowerCase().includes(\x27too\x20many\x20requests\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','getAbsolutePath','search','HGyNH','sult.titles[index]\x20+\x20\x27\x20[\x27\x20+\x20result.scanlators[index]\x20+\x20\x27]\x27,\x0a\x20\x20\x20\x20','\x20$(title).find(\x27h4\x27).text().trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}),\x0a',';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resolve(uri.replace(\x27pagin','VpLgo','input','This\x20website\x20does\x20not\x20provide\x20a\x20manga\x20list,\x20please\x20copy\x20and\x20past','manga','throttle','oUVxX','setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','delete','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','let\x20chapterID\x20=\x20','pathname','toString','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new\x20Promise(resolve\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20setTimeout','aZzPu','-\x20Manhua\x20-','est(\x27li[data-index]\x27).get(0)\x20||\x20$(element).closest(\x27ul.chapter-l','YdkvQ','Request','(((.+)+)+)+$','e()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}));','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if($(\x27head\x20title\x27).te','Throttle\x20Requests\x20[ms]','setTimeout(()\x20=>\x20resolve(chapters),\x202500);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x2010','rDZBf','YwHbF','_initializeConnector','PrZcO','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fetch(link.href)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','8YEcgWu','_getMangas','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20languages:\x20[...$(\x27ul.chapter-list\x20li\x20div.te','config','AaWdZ','ist\x27).prev(\x27div.row\x27).get(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return','3SrOofV','\x20\x20\x20\x20titles:\x20[...$(\x27ul.chapter-list\x20li\x20div.text-right\x27)].map(elem','trim','textContent','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20xhr\x20=\x20new\x20XMLHttpRequest();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','set','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20chapters.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id:\x20inde','spanish','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.then(response\x20=>\x20resolve(response.url.replace(\x27pagin','lgipG','_handleConnectorURI','BcFwJ','tags','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20link.click();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','split','ated\x27,\x20\x27cascade\x27)))\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.catch(e','_getChapterLink','fszKT','requestOptions','createConnectorURI','vxGIm','1226812jJiVHg','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','411430Xvlyyn','x,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20re','.submit\x20=\x20()\x20=>\x20$.ajax({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20typ','href','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20link.scrollIntoView();\x0a\x20\x20\x20\x20\x20\x20\x20\x20','dSSmW','-\x20Manhwa\x20-','jECfI','4ZXdBqr','fetchDOM','apply','\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20link\x20=\x20$(\x27ul.chapter-list\x20li\x20','ent\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20title\x20=\x20$(element).clos','vkZNd','\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch(error)','div.text-right\x20a\x27)[chapterID];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(li','1848YAEfkO','NbsgY','VpxSu','Enter\x20the\x20timespan\x20in\x20[ms]\x20to\x20delay\x20consecuitive\x20HTTP\x20requests.\x0a','wait','avdGg','\x20xhr.responseURL.includes(\x27cascade\x27)\x20?\x20xhr.responseURL\x20:\x20content','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request.xhr\x20=\x20()\x20=>\x20xhr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','00);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20','The\x20image\x20download\x20may\x20fail\x20for\x20to\x20many\x20consecuitive\x20requests.','title','149268rCazRG','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request.success\x20=\x20content\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','url','-\x20Manga\x20-','min','ccess:\x20429\x20Too\x20Many\x20Requests!\x27));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else','VKRya','\x20\x20\x20\x20\x20let\x20ajax\x20=\x20$.ajax;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20$.ajax\x20=\x20request','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(new\x20Error(\x27TuMangaOnline\x20server\x20blocked\x20a','numeric','tion,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20$(form).serializ','Vzbdf','WSTEz','NRUqq','xt-center\x20i.flag-icon\x27)].map(element\x20=>\x20element.className.match(','nk.href\x20&&\x20link.getAttribute(\x27href\x27).includes(\x27/\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','TuMangaOnline','qZfuP','v.text-truncate\x27)].map(element\x20=>\x20element.innerText.trim()),\x0a\x20\x20\x20','rror\x20=>\x20reject(error));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x201000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20','new\x20RegExp(\x27flag-icon-([a-z]+)\x27))[1])\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20','e\x20the\x20URL\x20containing\x20the\x20chapters\x20directly\x20from\x20your\x20browser\x20int','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[...$(\x27form\x27)].forEach(form\x20=>\x20form','map','YxoXg','ated\x27,\x20\x27cascade\x27));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20','value','constructor','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new\x20Promise((resolve,\x20reject)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','label','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ajax(request);\x0a\x20\x20\x20\x20\x20\x20\x20\x20','7025382ObIVKp','OeJfq','AeTUZ','\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(request.type.toUpperCase()\x20','e:\x20form.method,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20url:\x20form.ac','ge.dataset.src\x20||\x20image.src));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20','https://visortmo.com','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','index\x20=\x200;\x20index\x20<\x20result.titles.length;\x20index++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','.viewer-image\x27)];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resolve(nodes.map(image\x20=>\x20ima','QXzRm','bIgBZ','zYEGV','gseXh','tumangaonline','1425333qmCsws','headers','max','description','146620lJbxaD','_getMangaFromURI','3841435mCpHNw','(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','_getPages','replace','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request.error\x20=\x20(xhr,\x20status,\x20error)\x20=>\x20{','\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a','head\x20title','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20chapters\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20','fetchUI','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20language:\x20result.languages[index]\x0a\x20\x20\x20\x20\x20\x20'];_0x55e1=function(){return _0x450371;};return _0x55e1();}function _0x3bc7(_0x3bc736,_0x40ba70){const _0x178f64=_0x55e1();return _0x3bc7=function(_0x2c404d,_0x4c6c74){_0x2c404d=_0x2c404d-(-0x2ae*0x2+-0x696+0xda9);let _0x3de2d8=_0x178f64[_0x2c404d];return _0x3de2d8;},_0x3bc7(_0x3bc736,_0x40ba70);}(function(_0x4842f9,_0xc18ef8){const _0x34d6b0=_0x3bc7,_0x3c95c7=_0x4842f9();while(!![]){try{const _0x16ab0d=parseInt(_0x34d6b0(0x200))/(0x14*0x51+0x1301+-0x1954*0x1)+-parseInt(_0x34d6b0(0x1fe))/(0x1a56+-0x2e*0xd3+0xb96)*(parseInt(_0x34d6b0(0x1e9))/(0x142b+0x134b+0x1*-0x2773))+-parseInt(_0x34d6b0(0x208))/(-0x1a07+0x1b*-0x88+0x5c5*0x7)*(parseInt(_0x34d6b0(0x250))/(-0xaca+-0x6*-0x2b7+0x57b*-0x1))+-parseInt(_0x34d6b0(0x21b))/(0xfdb+0x1481+-0x2456)+-parseInt(_0x34d6b0(0x24a))/(0x324+0x12a2+0x15bf*-0x1)+-parseInt(_0x34d6b0(0x1e3))/(-0x5d3*0x1+-0x93e*0x4+0x2ad3)*(parseInt(_0x34d6b0(0x23b))/(0x830+0x231a+0x3*-0xe6b))+-parseInt(_0x34d6b0(0x24e))/(0x1*0x22c2+-0x2*0xa12+0x4dc*-0x3)*(-parseInt(_0x34d6b0(0x210))/(0x2*0x17f+0xb6e*0x1+-0xe61));if(_0x16ab0d===_0xc18ef8)break;else _0x3c95c7['push'](_0x3c95c7['shift']());}catch(_0x5c9f28){_0x3c95c7['push'](_0x3c95c7['shift']());}}}(_0x55e1,-0xd8e5f+-0xa9efc+0x1f8f6d));const _0x2f0098=(function(){const _0x4420ac=_0x3bc7,_0x18ff73={};_0x18ff73[_0x4420ac(0x1b7)]=function(_0x2e5388,_0x7216b0){return _0x2e5388===_0x7216b0;},_0x18ff73[_0x4420ac(0x245)]=_0x4420ac(0x211),_0x18ff73[_0x4420ac(0x22c)]=function(_0x693648,_0xd53263){return _0x693648!==_0xd53263;},_0x18ff73[_0x4420ac(0x246)]=_0x4420ac(0x215),_0x18ff73[_0x4420ac(0x25c)]=_0x4420ac(0x1d9),_0x18ff73[_0x4420ac(0x1fd)]=function(_0x1a4468,_0x5b8c74){return _0x1a4468!==_0x5b8c74;},_0x18ff73[_0x4420ac(0x23c)]=_0x4420ac(0x227);const _0x1475cc=_0x18ff73;let _0x452609=!![];return function(_0xcf2293,_0xd379a1){const _0x1d6da4=_0x4420ac,_0x4d048e={};_0x4d048e[_0x1d6da4(0x1f4)]=_0x1475cc[_0x1d6da4(0x25c)];const _0x504160=_0x4d048e;if(_0x1475cc[_0x1d6da4(0x1fd)](_0x1475cc[_0x1d6da4(0x23c)],_0x1475cc[_0x1d6da4(0x23c)])){const _0x42a2f7=_0x53564e[_0x1d6da4(0x20a)](_0x543b09,arguments);return _0x301dcb=null,_0x42a2f7;}else{const _0x38fa1c=_0x452609?function(){const _0xe434b5=_0x1d6da4;if(_0x1475cc[_0xe434b5(0x1b7)](_0x1475cc[_0xe434b5(0x245)],_0x1475cc[_0xe434b5(0x245)])){if(_0xd379a1){if(_0x1475cc[_0xe434b5(0x22c)](_0x1475cc[_0xe434b5(0x246)],_0x1475cc[_0xe434b5(0x246)]))_0x103ecb=_0x1be4e1[_0xe434b5(0x1f7)](_0x4b46e9)[0xd27+0x1e8c+-0x2bb3][_0xe434b5(0x1eb)]();else{const _0x29df63=_0xd379a1[_0xe434b5(0x20a)](_0xcf2293,arguments);return _0xd379a1=null,_0x29df63;}}}else return _0x302bce[_0xe434b5(0x1d2)]()[_0xe434b5(0x1c2)](_0x504160[_0xe434b5(0x1f4)])[_0xe434b5(0x1d2)]()[_0xe434b5(0x237)](_0x240b31)[_0xe434b5(0x1c2)](_0x504160[_0xe434b5(0x1f4)]);}:function(){};return _0x452609=![],_0x38fa1c;}};}()),_0x5b382e=_0x2f0098(this,function(){const _0xf80ea2=_0x3bc7,_0x463d3b={};_0x463d3b[_0xf80ea2(0x228)]=_0xf80ea2(0x1d9);const _0x1cd775=_0x463d3b;return _0x5b382e[_0xf80ea2(0x1d2)]()[_0xf80ea2(0x1c2)](_0x1cd775[_0xf80ea2(0x228)])[_0xf80ea2(0x1d2)]()[_0xf80ea2(0x237)](_0x5b382e)[_0xf80ea2(0x1c2)](_0x1cd775[_0xf80ea2(0x228)]);});_0x5b382e();class TuMangaOnline extends Connector{constructor(){const _0x4d28fb=_0x3bc7,_0x4c91f5={};_0x4c91f5[_0x4d28fb(0x247)]=_0x4d28fb(0x1ba),_0x4c91f5[_0x4d28fb(0x1e1)]=_0x4d28fb(0x22b),_0x4c91f5[_0x4d28fb(0x1e7)]=_0x4d28fb(0x1ca),_0x4c91f5[_0x4d28fb(0x20d)]=_0x4d28fb(0x1f0),_0x4c91f5[_0x4d28fb(0x212)]=_0x4d28fb(0x249),_0x4c91f5[_0x4d28fb(0x221)]=_0x4d28fb(0x1bd),_0x4c91f5[_0x4d28fb(0x234)]=_0x4d28fb(0x1dc),_0x4c91f5[_0x4d28fb(0x1f2)]=_0x4d28fb(0x213)+_0x4d28fb(0x219),_0x4c91f5[_0x4d28fb(0x1cc)]=_0x4d28fb(0x224),_0x4c91f5[_0x4d28fb(0x1df)]=_0x4d28fb(0x241);const _0x2d59d4=_0x4c91f5,_0x396425=_0x2d59d4[_0x4d28fb(0x247)][_0x4d28fb(0x1f7)]('|');let _0x479442=0x293*0xa+0xbcc+-0x258a;while(!![]){switch(_0x396425[_0x479442++]){case'0':super[_0x4d28fb(0x239)]=_0x2d59d4[_0x4d28fb(0x1e1)];continue;case'1':this[_0x4d28fb(0x1f5)]=[_0x2d59d4[_0x4d28fb(0x1e7)],_0x2d59d4[_0x4d28fb(0x20d)]];continue;case'2':super['id']=_0x2d59d4[_0x4d28fb(0x212)];continue;case'3':super();continue;case'4':this[_0x4d28fb(0x1fb)][_0x4d28fb(0x24b)][_0x4d28fb(0x1ee)](_0x2d59d4[_0x4d28fb(0x221)],this[_0x4d28fb(0x21d)]);continue;case'5':const _0x41bd13={};_0x41bd13[_0x4d28fb(0x239)]=_0x2d59d4[_0x4d28fb(0x234)],_0x41bd13[_0x4d28fb(0x24d)]=_0x2d59d4[_0x4d28fb(0x1f2)],_0x41bd13[_0x4d28fb(0x1c8)]=_0x2d59d4[_0x4d28fb(0x1cc)],_0x41bd13[_0x4d28fb(0x21f)]=0x0,_0x41bd13[_0x4d28fb(0x24c)]=0x1388,_0x41bd13[_0x4d28fb(0x236)]=0x1f4;const _0x2683b1={};_0x2683b1[_0x4d28fb(0x1cb)]=_0x41bd13,this[_0x4d28fb(0x1e6)]=_0x2683b1;continue;case'6':this[_0x4d28fb(0x21d)]=_0x2d59d4[_0x4d28fb(0x1df)];continue;}break;}}async[_0x2337bc(0x1e0)](){const _0x91baa1=_0x2337bc;await super[_0x91baa1(0x1e0)](),await this[_0x91baa1(0x214)](0x1a1*0x2+-0x127+0x7a9);}async[_0x2337bc(0x24f)](_0x178ec6){const _0x1415b2=_0x2337bc,_0x5703f6={};_0x5703f6[_0x1415b2(0x1fa)]=_0x1415b2(0x256),_0x5703f6[_0x1415b2(0x1c7)]=function(_0x27343c,_0x1b39e6){return _0x27343c+_0x1b39e6;},_0x5703f6[_0x1415b2(0x207)]=_0x1415b2(0x21e),_0x5703f6[_0x1415b2(0x226)]=_0x1415b2(0x1d5),_0x5703f6[_0x1415b2(0x23d)]=_0x1415b2(0x206),_0x5703f6[_0x1415b2(0x1d7)]=function(_0x53188c,_0x3a826b){return _0x53188c===_0x3a826b;},_0x5703f6[_0x1415b2(0x248)]=_0x1415b2(0x1de);const _0x54f4d3=_0x5703f6;let _0x5df849=new Request(_0x178ec6,this[_0x1415b2(0x1fb)]),_0xb71ea=await this[_0x1415b2(0x209)](_0x5df849,_0x54f4d3[_0x1415b2(0x1fa)]),_0x5d7b69=_0x54f4d3[_0x1415b2(0x1c7)](_0x178ec6[_0x1415b2(0x1d1)],_0x178ec6[_0x1415b2(0x1c2)]),_0x4ef109=_0xb71ea[0x113*0x19+0x2684+0x5*-0xd13][_0x1415b2(0x1ec)];for(let _0x12e4a6 of[_0x54f4d3[_0x1415b2(0x207)],_0x54f4d3[_0x1415b2(0x226)],_0x54f4d3[_0x1415b2(0x23d)]]){if(_0x54f4d3[_0x1415b2(0x1d7)](_0x54f4d3[_0x1415b2(0x248)],_0x54f4d3[_0x1415b2(0x248)]))_0x4ef109=_0x4ef109[_0x1415b2(0x1f7)](_0x12e4a6)[0x7ac+0x303+-0x223*0x5][_0x1415b2(0x1eb)]();else{if(_0x54faba){const _0x3d78ba=_0x1794a3[_0x1415b2(0x20a)](_0x5b57a0,arguments);return _0x673b62=null,_0x3d78ba;}}}return new Manga(this,_0x5d7b69,_0x4ef109);}async[_0x2337bc(0x1e4)](){const _0x6beca2=_0x2337bc,_0x5a9475={};_0x5a9475[_0x6beca2(0x1be)]=_0x6beca2(0x1c9)+_0x6beca2(0x231)+_0x6beca2(0x1bf);const _0x501c45=_0x5a9475;let _0xac6902=_0x501c45[_0x6beca2(0x1be)];throw new Error(_0xac6902);}async[_0x2337bc(0x1b8)](_0x1595b2){const _0x7cbb4c=_0x2337bc;let _0x43f6c8=_0x7cbb4c(0x1d3)+_0x7cbb4c(0x251)+_0x7cbb4c(0x1ea)+_0x7cbb4c(0x20c)+_0x7cbb4c(0x1d6)+_0x7cbb4c(0x1e8)+_0x7cbb4c(0x1c5)+_0x7cbb4c(0x25a)+_0x7cbb4c(0x22d)+_0x7cbb4c(0x1e5)+_0x7cbb4c(0x229)+_0x7cbb4c(0x230)+_0x7cbb4c(0x257)+_0x7cbb4c(0x243)+_0x7cbb4c(0x1ef)+_0x7cbb4c(0x201)+(_0x7cbb4c(0x1c4)+_0x7cbb4c(0x259)+_0x7cbb4c(0x1ff)+_0x7cbb4c(0x1dd)+_0x7cbb4c(0x218)),_0xffbbcf=new Request(new URL(_0x1595b2['id'],this[_0x7cbb4c(0x21d)]),this[_0x7cbb4c(0x1fb)]),_0x202a2b=await Engine[_0x7cbb4c(0x1d8)][_0x7cbb4c(0x258)](_0xffbbcf,_0x43f6c8);return _0x202a2b[_0x7cbb4c(0x1bb)](_0x5b391c=>_0x5b391c[_0x7cbb4c(0x21a)]=_0x5b391c[_0x7cbb4c(0x21a)][_0x7cbb4c(0x253)](/\s+/g,'\x20')),_0x202a2b;}async[_0x2337bc(0x1f9)](_0x4b6240){const _0x50654d=_0x2337bc,_0x4ec991={};_0x4ec991[_0x50654d(0x1d4)]=function(_0x5ad188,_0x457c94){return _0x5ad188+_0x457c94;};const _0x3a5d22=_0x4ec991;let _0xaa694b=_0x50654d(0x238)+_0x50654d(0x1cd)+_0x50654d(0x222)+_0x50654d(0x23e)+_0x50654d(0x1bc)+_0x50654d(0x1ed)+_0x50654d(0x217)+_0x50654d(0x21c)+_0x50654d(0x1b9)+_0x50654d(0x216)+_0x50654d(0x1c6)+_0x50654d(0x235)+_0x50654d(0x254)+_0x50654d(0x242)+_0x50654d(0x1cf)+_0x50654d(0x23a)+(_0x50654d(0x1db)+_0x50654d(0x1c0)+_0x50654d(0x223)+_0x50654d(0x220)+_0x50654d(0x20b)+_0x50654d(0x20f)+_0x50654d(0x22a)+_0x50654d(0x1e2)+_0x50654d(0x1f1)+_0x50654d(0x1f8)+_0x50654d(0x22e)+_0x50654d(0x232)+_0x50654d(0x202)+_0x50654d(0x23f)+_0x50654d(0x225)+_0x50654d(0x1da))+(_0x50654d(0x204)+_0x50654d(0x1f6)+_0x50654d(0x20e)+_0x50654d(0x255)+_0x50654d(0x22f)),_0x544c31=new Request(new URL(_0x4b6240[_0x50654d(0x1ca)]['id'],this[_0x50654d(0x21d)]),this[_0x50654d(0x1fb)]),_0x298f7f=await Engine[_0x50654d(0x1d8)][_0x50654d(0x258)](_0x544c31,_0x3a5d22[_0x50654d(0x1d4)](_0x50654d(0x1d0)+_0x4b6240['id']+';',_0xaa694b));return new URL(_0x298f7f,_0x544c31[_0x50654d(0x21d)]);}async[_0x2337bc(0x252)](_0x28d377){const _0x3d7a8b=_0x2337bc,_0x45f185={};_0x45f185[_0x3d7a8b(0x205)]=_0x3d7a8b(0x1bd);const _0x2d4254=_0x45f185,_0x3e6348=_0x3d7a8b(0x238)+_0x3d7a8b(0x25d)+_0x3d7a8b(0x244)+_0x3d7a8b(0x240),_0x45cb5a=await this[_0x3d7a8b(0x1f9)](_0x28d377),_0x789558=new Request(_0x45cb5a,this[_0x3d7a8b(0x1fb)]);_0x789558[_0x3d7a8b(0x24b)][_0x3d7a8b(0x1ee)](_0x2d4254[_0x3d7a8b(0x205)],new URL(_0x28d377[_0x3d7a8b(0x1ca)]['id'],this[_0x3d7a8b(0x21d)])[_0x3d7a8b(0x203)]);const _0x4c00fb=await Engine[_0x3d7a8b(0x1d8)][_0x3d7a8b(0x258)](_0x789558,_0x3e6348,0x1c9*-0x2+0x5b*0x49+-0x2d9);return _0x4c00fb[_0x3d7a8b(0x233)](_0x58f3d0=>this[_0x3d7a8b(0x1fc)]({'url':this[_0x3d7a8b(0x1c1)](_0x58f3d0,_0x789558[_0x3d7a8b(0x21d)]),'referer':_0x789558[_0x3d7a8b(0x21d)]}));}[_0x2337bc(0x1f3)](_0x5539e1){const _0x502fee=_0x2337bc,_0x41807b={};_0x41807b[_0x502fee(0x1c3)]=_0x502fee(0x1bd);const _0x2035dc=_0x41807b;this[_0x502fee(0x1fb)][_0x502fee(0x24b)][_0x502fee(0x1ee)](_0x2035dc[_0x502fee(0x1c3)],_0x5539e1[_0x502fee(0x25b)]);let _0x3b8295=super[_0x502fee(0x1f3)](_0x5539e1[_0x502fee(0x21d)]);return this[_0x502fee(0x1fb)][_0x502fee(0x24b)][_0x502fee(0x1ce)](_0x2035dc[_0x502fee(0x1c3)]),_0x3b8295;}} export default TuMangaOnline; From 6de4ffa21143e20d3f558c05b4d55dca538f1fe0 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 2 Mar 2024 09:08:44 +0000 Subject: [PATCH 083/109] FIx welovemanga.one: getting pages (#6715) Fixes https://github.com/manga-download/hakuneko/issues/6711 --- src/web/mjs/connectors/LoveHug.mjs | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/web/mjs/connectors/LoveHug.mjs b/src/web/mjs/connectors/LoveHug.mjs index f3c29857d9..bf099462b8 100644 --- a/src/web/mjs/connectors/LoveHug.mjs +++ b/src/web/mjs/connectors/LoveHug.mjs @@ -72,22 +72,10 @@ export default class WeLoveManga extends FlatManga { async _getPages(chapter) { const uri = new URL(chapter.id, this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, this.queryPages); - return data.map(element => { - const link = [ ...element.attributes] - .filter(attribute => !['src', 'class', 'alt'].includes(attribute.name)) - .map(attribute => { - try { - return atob(attribute.value.trim()); - } catch(_) { - return attribute.value.trim(); - } - }) - .find(value => { - return /^http/.test(value); - }); - return this.createConnectorURI(this.getAbsolutePath(link || element, request.url)); - }); + let request = new Request(uri, this.requestOptions); + const chapterid = (await this.fetchDOM(request, 'input#chapter'))[0].value; + request = new Request(new URL(`/app/manga/controllers/cont.listImg.php?cid=${chapterid}`, this.url), this.requestOptions); + const nodes = await this.fetchDOM(request, 'source.chapter-img:not([alt*="nicoscan"])'); + return nodes.map(image => this.createConnectorURI(image.dataset.original.replace(/\n/g, ''))); } } From be68836df22feed98d18b266efb7d63a0857320b Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 2 Mar 2024 09:43:12 +0000 Subject: [PATCH 084/109] Fix HentaiRead: get chapters and pages (#6777) * Fix HentaiRead: get chapters and pages * fix regex * Fix lint * try catch in promise --- src/web/mjs/connectors/HentaiRead.mjs | 45 ++++++++++++++++++--------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/web/mjs/connectors/HentaiRead.mjs b/src/web/mjs/connectors/HentaiRead.mjs index 77493a2f4f..c76d543a11 100644 --- a/src/web/mjs/connectors/HentaiRead.mjs +++ b/src/web/mjs/connectors/HentaiRead.mjs @@ -10,19 +10,36 @@ export default class HentaiRead extends WordPressMadara { this.url = 'https://hentairead.com'; } - // very similar to tritiniascans except that this websites uses an array instead of an object + async _getChapters(manga) { + const request = new Request(new URL(manga.id, this.url), this.requestOptions); + const [ data ] = await this.fetchDOM(request, 'a.btn-read-now'); + return [{ + id : data.pathname, + title : manga.title + }]; + } + async _getPages(chapter) { - let request = new Request(this.url + chapter.id, this.requestOptions); - let response = await fetch(request); - let data = await response.text(); - let chapterImages = data.match(/chapImages\s*=\s*(\[[^\]]+\])/); - let preloadedImages = data.match(/chapter_preloaded_images\s*=\s*(\[[^\]]+\])/); - let pageList = JSON.parse((chapterImages || preloadedImages)[1]); - return pageList.map(link => { - let uri = new URL(link); - uri.searchParams.set('quality', '100'); - uri.searchParams.delete('w'); - return uri.href; - }); + const request = new Request(this.url + chapter.id, this.requestOptions); + const script = ` + new Promise((resolve, reject) => { + setTimeout(() => { + try { + const pagelist = (window.chapterImages ?? window.chapter_preloaded_images); + resolve( pagelist.map(image=> { + const uri = new URL(image.src); + uri.searchParams.set('quality', '100'); + uri.searchParams.delete('w'); + return uri.href; + })); + } catch (error) { + reject(error); + } + }, + 500); + }); + `; + const pages = await Engine.Request.fetchUI(request, script); + return pages.map(page => page.replace(/\/i\d+\.wp\.com/, '')); } -} \ No newline at end of file +} From 9754d0f032869a6805facd68915d1d9e1cf20f39 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 8 Mar 2024 17:40:41 +0000 Subject: [PATCH 085/109] Fix ManhwaFreak: change fomain and filters (#6851) Fixes https://github.com/manga-download/hakuneko/issues/6849 --- src/web/mjs/connectors/ManhwaFreak.mjs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/ManhwaFreak.mjs b/src/web/mjs/connectors/ManhwaFreak.mjs index a919c3b417..1c49f18d72 100644 --- a/src/web/mjs/connectors/ManhwaFreak.mjs +++ b/src/web/mjs/connectors/ManhwaFreak.mjs @@ -7,7 +7,7 @@ export default class ManhwaFreak extends WordPressMangastream { super.id = 'manhwafreak'; super.label = 'ManhwaFreak'; this.tags = [ 'manga', 'english', 'webtoon']; - this.url = 'https://manhwa-freak.com'; + this.url = 'https://freakcomic.com'; this.path = '/manga/'; this.queryMangas = 'div.lastest-serie > a'; this.queryChapters = 'div.chapter-li > a'; @@ -15,6 +15,7 @@ export default class ManhwaFreak extends WordPressMangastream { } async _getPages(chapter) { - return (await super._getPages(chapter)).filter(page => !page.includes('ajax-loader')); + return (await super._getPages(chapter)) + .filter(page => !page.includes('ajax-loader') && !page.endsWith('/100.5.gif')); } } From f2162ad9da75564311e4c28f80bedfee231b84e2 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 8 Mar 2024 17:41:03 +0000 Subject: [PATCH 086/109] Fix LyraScans: change domain & rebrand (#6857) * Fix LyraScans: change domain & rebrand Fixes https://github.com/manga-download/hakuneko/issues/6856 * update icon --- src/web/img/connectors/lyrascans | Bin 3750 -> 9826 bytes src/web/mjs/connectors/LyraScans.mjs | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/web/img/connectors/lyrascans b/src/web/img/connectors/lyrascans index 8d849fd845d881b23fcd556da46b2aa59020b553..54653db563780f7f50b93dcfc8c0bd716a6bcdd8 100644 GIT binary patch literal 9826 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 Date: Fri, 8 Mar 2024 17:41:23 +0000 Subject: [PATCH 087/109] Fix NeoxScan: change domain (#6860) --- src/web/mjs/connectors/NeoxScan.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/NeoxScan.mjs b/src/web/mjs/connectors/NeoxScan.mjs index 1118962c6f..99c14790e4 100644 --- a/src/web/mjs/connectors/NeoxScan.mjs +++ b/src/web/mjs/connectors/NeoxScan.mjs @@ -7,7 +7,7 @@ export default class NeoxScan extends WordPressMadara { super.id = 'neoxscan'; super.label = 'Neox Scanlator'; this.tags = [ 'manga', 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://nexoscans.com'; + this.url = 'https://nexoscans.net'; this.queryTitleForURI = '.post-title'; this.requestOptions.headers.set('x-referer', this.url); } From 0fd1456fc3dc05d7725fe373b06966b2fd8dd0f4 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 8 Mar 2024 17:41:32 +0000 Subject: [PATCH 088/109] FIx ResetScans : change domain (#6854) Fixes https://github.com/manga-download/hakuneko/issues/6853 --- src/web/mjs/connectors/ResetScans.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/ResetScans.mjs b/src/web/mjs/connectors/ResetScans.mjs index 882407c5ee..d1b5630d30 100644 --- a/src/web/mjs/connectors/ResetScans.mjs +++ b/src/web/mjs/connectors/ResetScans.mjs @@ -7,7 +7,7 @@ export default class ResetScans extends WordPressMadara { super.id = 'resetscans'; super.label = 'Reset Scans'; this.tags = [ 'manga', 'webtoon', 'english' ]; - this.url = 'https://reset-scans.us'; + this.url = 'https://reset-scans.xyz'; this.queryChapters = 'li.wp-manga-chapter div.li__text > a'; } } From feb5278cee137344f2ad2c5bd35baaf9d23d5432 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 8 Mar 2024 17:41:40 +0000 Subject: [PATCH 089/109] Fix SwatManga : change domain (#6844) Fixes https://github.com/manga-download/hakuneko/issues/6842 --- src/web/mjs/connectors/MangaSwat.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaSwat.mjs b/src/web/mjs/connectors/MangaSwat.mjs index 4fc61961f3..e772229c6a 100644 --- a/src/web/mjs/connectors/MangaSwat.mjs +++ b/src/web/mjs/connectors/MangaSwat.mjs @@ -7,7 +7,7 @@ export default class MangaSwat extends WordPressMangastream { super.id = 'mangaswat'; super.label = 'Goldragon (SWAT Manga)'; this.tags = ['webtoon', 'arabic']; - this.url = 'https://goldragon.me'; + this.url = 'https://swatmanhua.com'; this.path = '/manga/list-mode'; this.queryChapters = 'div.bxcl ul li span.lchx a'; From f3c17dc2d7784c9cd04ffc2630eba701c991e268 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 12 Mar 2024 08:51:03 +0000 Subject: [PATCH 090/109] Fix KomikNesia : change domain (#6873) Fixes https://github.com/manga-download/hakuneko/issues/6871 --- src/web/mjs/connectors/KomikNesia.mjs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/web/mjs/connectors/KomikNesia.mjs b/src/web/mjs/connectors/KomikNesia.mjs index 7a490a1462..84c7c2e7e5 100644 --- a/src/web/mjs/connectors/KomikNesia.mjs +++ b/src/web/mjs/connectors/KomikNesia.mjs @@ -7,12 +7,7 @@ export default class KomikNesia extends WordPressMangastream { super.id = 'komiknesia'; super.label = 'KomikNesia'; this.tags = [ 'manga', 'webtoon', 'indonesian' ]; - this.url = 'https://komiknesia.com'; - this.path = '/latest-update/?list'; - - this.queryMangas = 'div.listttl ul li a'; - this.queryChapters = 'div#chapter_list span.eps a'; - this.queryChaptersTitle = undefined; - this.queryPages = 'div.reader-area img[src]:not([src=""])'; + this.url = 'https://komiknesia.xyz'; + this.path = '/manga/list-mode'; } -} \ No newline at end of file +} From 3ec52d43f1474680eb62a472ba4db2253f1ad24a Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 20 Mar 2024 19:40:24 +0000 Subject: [PATCH 091/109] Fix MangaToon: change CSS for chapters (#6887) get rid of duplicate chapters --- src/web/mjs/connectors/templates/MangaToon.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/templates/MangaToon.mjs b/src/web/mjs/connectors/templates/MangaToon.mjs index 174db52cee..bde6896234 100644 --- a/src/web/mjs/connectors/templates/MangaToon.mjs +++ b/src/web/mjs/connectors/templates/MangaToon.mjs @@ -79,7 +79,7 @@ export default class MangaToon extends Connector { * Alternative mobile request (id, token and signature calculations are all handled within the WEEX + VUE application => to much effort to break in): * https://sg.mangatoon.mobi/api/content/episodes?sign=e9da6de28b76408e77040935fd221cd3&id=5&_=1557650222&_v=1.3.6&_language=en&_token=4f9b604ed0055dd569105a7b32b6489c10&_udid=1246361632e50c7a9daef1e187471778 */ - this.fetchDOM(this.baseURL + manga.id + '/episodes', 'div.episodes-wrap a.episode-item, div.episodes-wrap-new a.episode-item-new') + this.fetchDOM(this.baseURL + manga.id + '/episodes', 'div.episode-content-asc div.episodes-wrap a.episode-item, div.episode-content-asc div.episodes-wrap-new a.episode-item-new') .then( data => { let chapterList = data.map( element => { let title = element.querySelector('div.episode-title, div.episode-title-new:last-of-type').innerText.replace(/\s+/g, ' ').trim(); @@ -122,4 +122,4 @@ export default class MangaToon extends Connector { callback( error, undefined ); } ); } -} \ No newline at end of file +} From c3555626697b6ef1b935db37c07febdab4626c9c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 20 Mar 2024 19:40:43 +0000 Subject: [PATCH 092/109] Fix ComicK: update domain (#6897) Fixes https://github.com/manga-download/hakuneko/issues/6896 --- src/web/mjs/connectors/ComicK.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/ComicK.mjs b/src/web/mjs/connectors/ComicK.mjs index cfafd9d776..0f551da2a2 100644 --- a/src/web/mjs/connectors/ComicK.mjs +++ b/src/web/mjs/connectors/ComicK.mjs @@ -9,15 +9,15 @@ export default class ComicK extends Connector { super.id = 'comick'; super.label = 'ComicK'; this.tags = [ 'manga', 'english' ]; - this.url = 'https://comick.cc'; - this.apiurl = 'https://api.comick.cc'; + this.url = 'https://comick.io'; + this.apiurl = 'https://api.comick.io'; this.requestOptions.headers.set('x-origin', this.url ); this.requestOptions.headers.set('x-referer', this.apiurl ); } canHandleURI(uri) { - return /https?:\/\/comick\.(app|ink|cc)/.test(uri.origin); + return /https?:\/\/comick\.(app|ink|cc|io)/.test(uri.origin); } async _getEmbeddedJSON(uri) { From 174c155803f75bb10cd1ab1282ebf0faef7bca29 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 20 Mar 2024 19:40:58 +0000 Subject: [PATCH 093/109] Fix MangaSail : change domain (#6898) Fixes https://github.com/manga-download/hakuneko/issues/6894 --- src/web/mjs/connectors/MangaSail.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/MangaSail.mjs b/src/web/mjs/connectors/MangaSail.mjs index bfc66ad6a4..a022e6e596 100644 --- a/src/web/mjs/connectors/MangaSail.mjs +++ b/src/web/mjs/connectors/MangaSail.mjs @@ -7,7 +7,7 @@ export default class MangaSail extends Connector { super.id = 'mangasail'; super.label = 'MangaSail'; this.tags = [ 'manga', 'english' ]; - this.url = 'https://www.mangasail.net'; + this.url = 'https://sailmg.com'; this.config = { username: { From c8f5ed628161b602a74e7130cb55697e9dde6755 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Wed, 20 Mar 2024 19:41:11 +0000 Subject: [PATCH 094/109] Fix MangaBat : change domain (#6899) --- src/web/mjs/connectors/MangaBat.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/web/mjs/connectors/MangaBat.mjs b/src/web/mjs/connectors/MangaBat.mjs index 9d195f8dd8..5a421b9c67 100644 --- a/src/web/mjs/connectors/MangaBat.mjs +++ b/src/web/mjs/connectors/MangaBat.mjs @@ -7,7 +7,7 @@ export default class MangaBat extends MangaNel { super.id = 'mangabat'; super.label = 'MangaBat'; this.tags = [ 'manga', 'webtoon', 'english' ]; - this.url = 'https://m.mangabat.com'; + this.url = 'https://h.mangabat.com'; this.path = '/manga-list-all/'; this.queryMangas = 'div.panel-list-story div.list-story-item h3 a.item-title'; @@ -16,6 +16,6 @@ export default class MangaBat extends MangaNel { canHandleURI(uri) { // Test: https://regex101.com/r/GlzAw2/2/tests - return /^(m\.|read\.)?mangabat\.com$/.test(uri.hostname); + return /^(m\.|read\.|h\.)?mangabat\.com$/.test(uri.hostname); } -} \ No newline at end of file +} From 29f362260c0d92d4ddbf8d6aba723c9fc0c5c863 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 23 Mar 2024 09:02:20 +0000 Subject: [PATCH 095/109] Fix MangaStarz : change domain (#6901) Fixes https://github.com/manga-download/hakuneko/issues/6900 --- src/web/mjs/connectors/MangaStarz.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangaStarz.mjs b/src/web/mjs/connectors/MangaStarz.mjs index 22e895a838..7e6dca81c5 100644 --- a/src/web/mjs/connectors/MangaStarz.mjs +++ b/src/web/mjs/connectors/MangaStarz.mjs @@ -7,6 +7,6 @@ export default class MangaStarz extends WordPressMadara { super.id = 'mangastarz'; super.label = 'مانجا ستارز (Mangastarz)'; this.tags = [ 'manga', 'webtoon', 'arabic' ]; - this.url = 'https://mangastarz.org'; + this.url = 'https://manga-starz.com'; } -} \ No newline at end of file +} From 4165fdafb4a05df87687cf418f6e5e65240aa308 Mon Sep 17 00:00:00 2001 From: ZIRO <78895454+PD-ZIRO@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:38:24 +0300 Subject: [PATCH 096/109] change domain (#6910) Co-authored-by: Abdullah-KS <78895454+Abdullah-KS@users.noreply.github.com> --- src/web/mjs/connectors/Mangalek.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/Mangalek.mjs b/src/web/mjs/connectors/Mangalek.mjs index cde3baa21f..2950438b50 100644 --- a/src/web/mjs/connectors/Mangalek.mjs +++ b/src/web/mjs/connectors/Mangalek.mjs @@ -7,7 +7,7 @@ export default class Mangalek extends WordPressMadara { super.id = 'mangalek'; super.label = 'مانجا ليك (Mangalek)'; this.tags = [ 'manga', 'webtoon', 'arabic' ]; - this.url = 'https://manga-lek.net'; + this.url = 'https://lekmanga.net'; this.queryTitleForURI = 'div.profile-manga div.post-title h1'; this.requestOptions.headers.set('x-referer', this.url); } From 24363e34e9926475e0e57363c62cfca48e4a1634 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 29 Mar 2024 09:58:38 +0000 Subject: [PATCH 097/109] FIx Siyahmelek: change domain (#6915) Fixes https://github.com/manga-download/hakuneko/issues/6908 --- src/web/mjs/connectors/Siyahmelek.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/Siyahmelek.mjs b/src/web/mjs/connectors/Siyahmelek.mjs index 38b1a879e1..2752318fc8 100644 --- a/src/web/mjs/connectors/Siyahmelek.mjs +++ b/src/web/mjs/connectors/Siyahmelek.mjs @@ -7,9 +7,9 @@ export default class Siyahmelek extends WordPressMadara { super.id = 'siyahmelek'; super.label = 'Gri Melek (Siyahmelek)'; this.tags = [ 'manga', 'webtoon', 'turkish' ]; - this.url = 'https://grimelek.net'; + this.url = 'https://grimelek.co'; this.links = { - login : 'https://grimelek.net'//this website needs login to see content ! + login : 'https://grimelek.co'//this website needs login to see content ! }; } From bfe706da8ace293173fab074f46d707a3c3018e4 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 29 Mar 2024 09:58:52 +0000 Subject: [PATCH 098/109] Fix MangaTX : domain changed (#6916) Fixes https://github.com/manga-download/hakuneko/issues/6911 --- src/web/mjs/connectors/MangaTX.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MangaTX.mjs b/src/web/mjs/connectors/MangaTX.mjs index 8857e45e7b..43fb39a6ec 100644 --- a/src/web/mjs/connectors/MangaTX.mjs +++ b/src/web/mjs/connectors/MangaTX.mjs @@ -7,6 +7,6 @@ export default class MangaTX extends WordPressMadara { super.id = 'mangatx'; super.label = 'Mangatx'; this.tags = [ 'webtoon', 'english' ]; - this.url = 'https://mangatx.com'; + this.url = 'https://mangatx.to'; } -} \ No newline at end of file +} From 63188f4978602bf9e1b1afeb5a3059e4c977527f Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sun, 31 Mar 2024 08:38:31 +0000 Subject: [PATCH 099/109] Fix TopToon : update CSS selectors (#6906) * Fix TopToon : update CSS selectors Fixes https://github.com/manga-download/hakuneko/issues/6905 * Update TopToon.mjs * Update TopToon.mjs * attempt to fix lint error * dont use optional chaining optional chaining doesnt work in stable build because electron version is too old --- src/web/mjs/connectors/TopToon.mjs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/web/mjs/connectors/TopToon.mjs b/src/web/mjs/connectors/TopToon.mjs index 8934361579..4051063cf6 100644 --- a/src/web/mjs/connectors/TopToon.mjs +++ b/src/web/mjs/connectors/TopToon.mjs @@ -15,12 +15,12 @@ export default class TopToon extends Connector { } async _getMangaFromURI(uri) { const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div.bnr_episode_info p.tit_toon'); + const data = await this.fetchDOM(request, 'div.ep_comic_info span.comic_tit span'); return new Manga(this, uri.pathname, data[0].textContent.trim()); } async _getMangas() { - const req = new Request('https://toptoon.com/hashtag', this.requestOptions); + const req = new Request(new URL('/hashtag', this.url), this.requestOptions); const api = await this.fetchRegex(req, /fileUrl\s*:\s*'([^']+)'/g); const request = new Request(api[0], this.requestOptions); const data = await this.fetchJSON(request); @@ -34,11 +34,11 @@ export default class TopToon extends Connector { async _getChapters(manga) { const request = new Request(new URL(manga.id, this.url), this.requestOptions); - const data = await this.fetchDOM(request, 'div.episode_list ul a.episode-items'); + const data = await this.fetchDOM(request, 'div.eplist ul a.episode-items'); return data.map(element => { - let title = element.querySelector('p.episode_title').textContent.trim(); - const subtitle = element.querySelector('p.episode_stitle'); - title += subtitle ? ' - ' + subtitle.textContent.trim() : ''; + let title = element.querySelector('p.ep_title').textContent.trim(); + const subtitle = element.querySelector('p.ep_stitle'); + title += subtitle && subtitle.textContent.trim() != '' ? ' - ' + subtitle.textContent.trim() : ''; return { id: `/comic/ep_view/${element.dataset.comicId}/${element.dataset.episodeId}`, title: title @@ -51,4 +51,4 @@ export default class TopToon extends Connector { const data = await this.fetchDOM(request, 'div#viewerContentsWrap source.document_img'); return data.map(element => this.getAbsolutePath(element.dataset.src || element, request.url)); } -} \ No newline at end of file +} From 4448f8ff32bd7775e434f9b5201b1cae23392d4c Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 1 Apr 2024 08:46:59 +0000 Subject: [PATCH 100/109] Fix MagKan: use Comici Viewer (#6927) Similar to YoungChampion, YoungAnimal, Comicride, ComicMedu, etc.... Fixes https://github.com/manga-download/hakuneko/issues/6926 --- src/web/mjs/connectors/MagKan.mjs | 55 +++---------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/src/web/mjs/connectors/MagKan.mjs b/src/web/mjs/connectors/MagKan.mjs index f4a26fc0f1..1dd16884c5 100644 --- a/src/web/mjs/connectors/MagKan.mjs +++ b/src/web/mjs/connectors/MagKan.mjs @@ -1,59 +1,12 @@ -import Connector from '../engine/Connector.mjs'; -import Manga from '../engine/Manga.mjs'; +import YoungChampion from './YoungChampion.mjs'; -export default class MagKan extends Connector { +export default class MagKan extends YoungChampion { constructor() { super(); super.id = 'magkan'; super.label = 'MagKan'; this.tags = [ 'manga', 'japanese' ]; - this.url = 'http://kansai.mag-garden.co.jp'; + this.url = 'https://kansai.mag-garden.co.jp'; } - - async _getMangaFromURI(uri) { - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'meta[property="og:title"]'); - return new Manga(this, uri.pathname, data[0].content.trim()); - } - - async _getMangas() { - const uri = new URL(this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div#main div.panel div.box div.inner'); - return data.map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element.querySelector('a'), this.url), - title: element.querySelector('h2.comic_name').textContent.trim() - }; - }); - } - - async _getChapters(manga) { - const uri = new URL(manga.id, this.url); - const request = new Request(uri, this.requestOptions); - const body = await this.fetchDOM(request); - const current = [...body.querySelectorAll('div#main div.update_summary div.exp ul.btn li a[href*="/assets/files/"]')].map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element, this.url).replace(/\/HTML5\/?$/i, ''), - title: element.text.replace('を読む', '').trim() - }; - }); - const previous = [...body.querySelectorAll('div#main div.sam_exp div.exp')].map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element.querySelector('ul.btn li a[href*="/assets/files/"]'), this.url).replace(/\/HTML5\/?$/i, ''), - title: element.querySelector('div.back_number_summary div.ttl').textContent.trim() - }; - }); - return [ ...current, ...previous ]; - } - - async _getPages(chapter) { - const uri = new URL(chapter.id + '/iPhone/ibook.xml', this.url); - const request = new Request(uri, this.requestOptions); - const response = await fetch(request); - const data = await response.text(); - const pages = parseInt(data.match(/(\d+)<\/total>/)[1]); - return new Array(pages).fill().map((_, index) => this.getAbsolutePath(`${chapter.id}/books/images/2/${index + 1}.jpg`, request.url)); - } -} \ No newline at end of file +} From 39f99fdb60a32d71e838d2b1cce6c3baf149eae1 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Thu, 4 Apr 2024 08:50:48 +0000 Subject: [PATCH 101/109] Fix winterscan : change domain (#6935) https://github.com/manga-download/hakuneko/issues/6933 --- src/web/mjs/connectors/winterscan.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/winterscan.mjs b/src/web/mjs/connectors/winterscan.mjs index 6c0ba17162..7d0a621954 100644 --- a/src/web/mjs/connectors/winterscan.mjs +++ b/src/web/mjs/connectors/winterscan.mjs @@ -7,6 +7,6 @@ export default class winterscan extends WordPressMadara { super.id = 'winterscan'; super.label = 'Winter Scan'; this.tags = [ 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://winterscan.com.br'; + this.url = 'https://winterscan.com'; } -} \ No newline at end of file +} From fa1af62c6b3d68dc808957c12d037db809bb6fbf Mon Sep 17 00:00:00 2001 From: Victor Abrate Date: Fri, 5 Apr 2024 09:50:17 +0200 Subject: [PATCH 102/109] fix MangaSect source (#6930) * fix MangaSect source * fix lint * better mangasect fix --------- Co-authored-by: Victor Abrate Co-authored-by: MikeZeDev --- src/web/mjs/connectors/MangaSect.mjs | 80 +++++++++------------------- 1 file changed, 25 insertions(+), 55 deletions(-) diff --git a/src/web/mjs/connectors/MangaSect.mjs b/src/web/mjs/connectors/MangaSect.mjs index f5945dac76..9605bc3459 100644 --- a/src/web/mjs/connectors/MangaSect.mjs +++ b/src/web/mjs/connectors/MangaSect.mjs @@ -1,70 +1,40 @@ -import Connector from '../engine/Connector.mjs'; -import Manga from '../engine/Manga.mjs'; +import MojoPortalComic from './templates/MojoPortalComic.mjs'; -export default class MangaSect extends Connector { +export default class MangaSect extends MojoPortalComic { constructor() { super(); super.id = 'mangasect'; super.label = 'MangaSect'; this.tags = [ 'webtoon', 'english' ]; - this.url = 'https://mangasect.com'; + this.url = 'https://mangasect.net'; this.path = '/all-manga/'; } - async _getMangaFromURI(uri) { - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'header h1'); - return new Manga(this, uri.pathname, data[0].textContent.trim()); - } + async _getPages(chapter) { + const request = new Request(new URL(chapter.id, this.url), this.requestOptions); + const script = ` + new Promise(resolve => { - async _getMangas() { - let mangaList = []; - const uri = new URL(this.path, this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div.blog-pager span:last-of-type a'); - const pageCount = parseInt(data[0].href.match(/\/(\d)+\//)[1]); - for(let page = 1; page <= pageCount; page++) { - const mangas = await this._getMangasFromPage(page); - mangaList.push(...mangas); - } - return mangaList; - } + function parseResults(data) { + const dom = new DOMParser().parseFromString(data, 'text/html'); + let nodes = [...dom.querySelectorAll('img')]; + resolve(nodes.map(element => element.dataset.original)); + } - async _getMangasFromPage(page) { - const uri = new URL(this.path + page, this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'div.grid div.text-center > a'); - return data.map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element, this.url), - title: element.text.trim() - }; - }); + const ajaxendpoint = new URL('/ajax/image/list/chap/' + CHAPTER_ID, window.location.href); + fetch(ajaxendpoint, { + headers: { + 'X-Requested-With': 'XMLHttpRequest', + } + }) + .then(response => response.json()) + .then(jsonData => { + parseResults(jsonData.html); + }); + }); + `; + return Engine.Request.fetchUI(request, script); } - async _getChapters(manga) { - const uri = new URL(manga.id, this.url); - const request = new Request(uri, this.requestOptions); - const data = await this.fetchDOM(request, 'li.chapter > a'); - return data.map(element => { - return { - id: this.getRootRelativeOrAbsoluteLink(element, this.url), - title: element.text.trim() - }; - }); - } - - async _getPages(chapter) { - const referer = new URL(chapter.id, this.url); - const chapterid = chapter.id.match(/\/([\d]+)$/)[1]; - const uri = new URL ('/ajax/image/list/chap/' + chapterid, this.url); - const request = new Request(uri, this.requestOptions); - request.headers.set('x-referer', referer); - request.headers.set('X-Requested-With', 'XMLHttpRequest'); - const response = await this.fetchJSON(request); - const dom = this.createDOM(response.html); - const data = dom.querySelectorAll('source[data-src]'); - return Array.from(data).map(image => this.getAbsolutePath(image.dataset['src'], request.url)); - } } From eecc59f8531f2587b0b78d325c03c06b189b2dfa Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Fri, 5 Apr 2024 18:49:59 +0000 Subject: [PATCH 103/109] Fix MoonWitchInLove : change domain (#6942) Fixes https://github.com/manga-download/hakuneko/issues/6936 --- src/web/mjs/connectors/MoonWitchInLove.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/mjs/connectors/MoonWitchInLove.mjs b/src/web/mjs/connectors/MoonWitchInLove.mjs index 4e6af0bded..661d9ed26a 100644 --- a/src/web/mjs/connectors/MoonWitchInLove.mjs +++ b/src/web/mjs/connectors/MoonWitchInLove.mjs @@ -7,6 +7,6 @@ export default class MoonWitchInLove extends WordPressMadara { super.id = 'moonwitchinlove'; super.label = 'Moon Witch In Love'; this.tags = [ 'webtoon', 'portuguese', 'scanlation' ]; - this.url = 'https://moonwitchinlove.com'; + this.url = 'https://moonwitchinlovescan.com'; } -} \ No newline at end of file +} From 7dfcccc893d8db839775397c066c91e0d2844728 Mon Sep 17 00:00:00 2001 From: akn19 <86169232+akn19@users.noreply.github.com> Date: Wed, 10 Apr 2024 04:25:42 +0700 Subject: [PATCH 104/109] add connector monzeekomik (#6954) * add connector monzeekomik * fix lint --------- Co-authored-by: MikeZeDev --- src/web/img/connectors/monzeekomik | Bin 0 -> 1046 bytes src/web/mjs/connectors/MonzeeKomik.mjs | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/web/img/connectors/monzeekomik create mode 100644 src/web/mjs/connectors/MonzeeKomik.mjs diff --git a/src/web/img/connectors/monzeekomik b/src/web/img/connectors/monzeekomik new file mode 100644 index 0000000000000000000000000000000000000000..07bec10de5e6afd6b8dfff59b622799ef5f6d1cd GIT binary patch literal 1046 zcmex=_1P|rX?qqI0P zFI~aY%U!`Mz|~!$%*;qrN1?DZF(jg5fO1IMHz7kc}WowS#?=?C1q7rRWTV&9Ss$2MHN*QkRgmf zt(+X3f}EU!DiR_RDkOvd2N(o77!(*3m>HEAm;@P_1sVSzVUTBFU}Ob)735neU}R!u zVP#|I;N;>4D%dK(z{JSR%*4XX3iJa|buCbyfklv2NYT)dO*k--U8zvSsBz*#4rQl} z2StM}eo!$^Dr(~75)+q@lu}hw*U;25F*P%{u(Wb^admU|@bn4}2@MO6h>S{3Nli=7 z$jmA(DJ?6nsH|#kX>Duo=PTMRtRjKIia7G$tz__XT!wLR)^WcCDQ(-g`|_K4-m!M< zJ9f_bD3jF{(R6$#bK{k3uC=z0^m$+QKe*j1=Ij6F?2?MYcS|m;5^`gGsy zj;4i*@Y$NfZc6Q&Hi`Mq+Ec$}>YB-6U%tMsSIsvQeSc5p$`*TZwYehtvX@`haZj@p zX_CA3NWGhfKfqCv$DTQkIclEVN4=#Ft9P#3a339t@10MU)%Izee^9`Gsh`U&vW|j+ manga.title = manga.title.replace(/Bahasa Indonesia$/i, '').trim()); + return mangas; + } +} From cd46d74fd11232eb808764cab3117278cfaafaee Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 15 Apr 2024 07:52:48 +0000 Subject: [PATCH 105/109] Fix ComicExtra : change domain (#6951) --- src/web/mjs/connectors/ComicExtra.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/ComicExtra.mjs b/src/web/mjs/connectors/ComicExtra.mjs index 85f973816f..38c04fb575 100644 --- a/src/web/mjs/connectors/ComicExtra.mjs +++ b/src/web/mjs/connectors/ComicExtra.mjs @@ -8,7 +8,7 @@ export default class ComicExtra extends Connector { super.id = 'comicextra'; super.label = 'ComicExtra'; this.tags = ['comic', 'english']; - this.url = 'https://comicextra.me'; + this.url = 'https://comicextra.org'; this.path = '/comic-list/'; } From f9aaca991f763de40c2e608f750573a724bd1dd5 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 15 Apr 2024 07:53:12 +0000 Subject: [PATCH 106/109] FIx KomikAV: domain type (#6881) Fixes https://github.com/manga-download/hakuneko/issues/6879 --- src/web/mjs/connectors/KomikAV.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/KomikAV.mjs b/src/web/mjs/connectors/KomikAV.mjs index 237ca6223c..0d5c2b6b6e 100644 --- a/src/web/mjs/connectors/KomikAV.mjs +++ b/src/web/mjs/connectors/KomikAV.mjs @@ -7,7 +7,7 @@ export default class KomikAV extends WordPressMangastream { super.id = 'komikav'; super.label = 'APKomik'; this.tags = [ 'manga', 'indonesian' ]; - this.url = 'https://apkomic.cc'; + this.url = 'https://apkomik.cc'; this.path = '/manga/list-mode/'; } } From 32823e15f96ff3bf728652c4a649bab63a9e15fd Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Mon, 15 Apr 2024 07:53:23 +0000 Subject: [PATCH 107/109] Fix Saikaiscan : change domain (#6963) Fixes https://github.com/manga-download/hakuneko/issues/6620 --- src/web/mjs/connectors/Saikaiscan.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/web/mjs/connectors/Saikaiscan.mjs b/src/web/mjs/connectors/Saikaiscan.mjs index 0b3f21b4a2..8cec74c246 100644 --- a/src/web/mjs/connectors/Saikaiscan.mjs +++ b/src/web/mjs/connectors/Saikaiscan.mjs @@ -8,15 +8,15 @@ export default class SaikaiScan extends Connector { super.id = 'saikaiscan'; super.label = 'Saikaiscan'; this.tags = [ 'manga', 'portuguese', 'webtoon', 'novel' ]; - this.url = 'https://saikaiscan.com.br'; - this.api = 'https://api.saikai.com.br/api/stories'; - this.imagesurl = 'https://s3-alpha.saikai.com.br'; + this.url = 'https://saikaiscans.net'; + this.api = 'https://api.saikaiscans.net/api/stories'; + this.imagesurl = 'https://s3-alpha.saikaiscans.net'; this.novelContentQuery = 'div#leitor-serie-body'; this.novelFormat = 'image/png'; this.novelWidth = '56em'; this.novelPadding = '1.5em'; this.links = { - login: 'https://saikaiscan.com.br/login' + login: 'https://saikaiscan.net/login' }; } From a7c1a58110df0e365b43e2dd3849ae72124a11ec Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Tue, 16 Apr 2024 05:39:05 +0000 Subject: [PATCH 108/109] Fix LxHentai: change domain (#6970) Fixes https://github.com/manga-download/hakuneko/issues/6968 --- src/web/mjs/connectors/LxHentai.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/mjs/connectors/LxHentai.mjs b/src/web/mjs/connectors/LxHentai.mjs index a51937b102..21cd3abf48 100644 --- a/src/web/mjs/connectors/LxHentai.mjs +++ b/src/web/mjs/connectors/LxHentai.mjs @@ -7,7 +7,7 @@ export default class LxHentai extends MojoPortalComic { super.id = 'lxhentai'; super.label = 'LXHENTAI'; this.tags = [ 'manga', 'hentai', 'vietnamese' ]; - this.url = 'https://lxmanga.net'; + this.url = 'https://lxmanga.cc'; this.queryMangaTitle = 'head title'; this.queryChapter = 'div.justify-between ul.overflow-y-auto a'; From 4318aacf5b2611eba591c8894fde31a5303c6ba0 Mon Sep 17 00:00:00 2001 From: Ronny Date: Tue, 16 Apr 2024 07:52:38 +0200 Subject: [PATCH 109/109] Lock ESLint Version (#6971) * lock eslint version * fix lint errors --- package.json | 4 ++-- src/web/mjs/engine/Connectors.mjs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8fc06e07b8..e4efee51e5 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "asar": "latest", "discord-rpc": "latest", "electron": "8.3.4", - "eslint": "latest", + "eslint": "^8.57.0", "fs-extra": "latest", "innosetup-compiler": "latest", "jest": "latest", @@ -35,7 +35,7 @@ "start:build": "npm run build:web && electron . --update-url=DISABLED --cache-directory=./build/latest", "lint": "npm run lint:app && npm run lint:web", "lint:app": "eslint ./src/app --ignore-path .gitignore", - "lint:web": "eslint ./src/web/mjs/**/*.mjs --ignore-path .gitignore --ignore-pattern Connectors.mjs", + "lint:web": "eslint ./src/web/mjs/**/*.mjs --ignore-path .gitignore --parser-options ecmaVersion:2020", "format": "npm run format:app && npm run format:web", "format:app": "npm run lint:app -- --fix", "format:web": "npm run lint:web -- --fix", diff --git a/src/web/mjs/engine/Connectors.mjs b/src/web/mjs/engine/Connectors.mjs index ee6d094555..e09b7fd1fb 100644 --- a/src/web/mjs/engine/Connectors.mjs +++ b/src/web/mjs/engine/Connectors.mjs @@ -9,7 +9,7 @@ export default class Connectors { try { let response = await fetch(uri); let data = await response.json(); - return data.filter(plugin => !plugin.startsWith('.') && plugin.endsWith('.mjs')).map(plugin => uri + plugin) + return data.filter(plugin => !plugin.startsWith('.') && plugin.endsWith('.mjs')).map(plugin => uri + plugin); } catch(error) { //console.warn(error); return []; @@ -50,13 +50,13 @@ export default class Connectors { } } this._list.sort( ( a, b ) => { - return ( a.label.toLowerCase() < b.label.toLowerCase() ? -1 : 1 ); + return a.label.toLowerCase() < b.label.toLowerCase() ? -1 : 1; } ); } catch(error) { console.warn(`Failed to load connector`, error); } } - + async _onConnectorProtocolHandler(request) { try { let uri = new URL(request.url);