Compare commits
123 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
720c9bb651 | ||
|
|
f05cf5040c | ||
|
|
65191cfc8d | ||
|
|
bd2dec0392 | ||
|
|
5f9fbbb30d | ||
|
|
43f04455f1 | ||
|
|
43637a2ff4 | ||
|
|
b87bf62362 | ||
|
|
89e57d48d9 | ||
|
|
ad47aecea3 | ||
|
|
f192fd0b75 | ||
|
|
557efd2079 | ||
|
|
373c6c1d4c | ||
|
|
4c7da5dc20 | ||
|
|
bed5b00300 | ||
|
|
e36d460d57 | ||
|
|
5cffa112ba | ||
|
|
66ae60ca44 | ||
|
|
b60496bf22 | ||
|
|
ff39c59475 | ||
|
|
b6b67568b5 | ||
|
|
eecf9c42c5 | ||
|
|
fc3d61b05a | ||
|
|
b2b9760445 | ||
|
|
7afff18629 | ||
|
|
ee3effaf00 | ||
|
|
296f0478b0 | ||
|
|
693a77e73e | ||
|
|
b769cd0aa1 | ||
|
|
9eca05efc5 | ||
|
|
ca0110cdbc | ||
|
|
66ee72baf0 | ||
|
|
3c08d69bc3 | ||
|
|
0f004dc878 | ||
|
|
b7093ed4ae | ||
|
|
20289eaeaf | ||
|
|
3b16fe0390 | ||
|
|
c78c1ad628 | ||
|
|
8fe4cc5a9b | ||
|
|
930e8191be | ||
|
|
2734fb4d0d | ||
|
|
b5223148c7 | ||
|
|
ad3d0b317e | ||
|
|
e90b5583a7 | ||
|
|
394dc91bfa | ||
|
|
7de046838d | ||
|
|
955872a825 | ||
|
|
d17780f0a7 | ||
|
|
737a8063a8 | ||
|
|
423abf2479 | ||
|
|
4e436509bf | ||
|
|
f58e0e1f4f | ||
|
|
d2e72b0756 | ||
|
|
edebd860aa | ||
|
|
6b8363bd9c | ||
|
|
d0c40ffa00 | ||
|
|
b36e1484eb | ||
|
|
a5e429fea3 | ||
|
|
6d5870ccb2 | ||
|
|
6cc82520a0 | ||
|
|
7dfc599de9 | ||
|
|
aa820e1f64 | ||
|
|
38d0ac5305 | ||
|
|
438387faee | ||
|
|
5a1786d3e5 | ||
|
|
bbb80f3cf0 | ||
|
|
8ea6d4fe37 | ||
|
|
282b3d05b3 | ||
|
|
168d0280dc | ||
|
|
50e024a3ea | ||
|
|
e1d582036a | ||
|
|
354c2731d8 | ||
|
|
ce4637ea80 | ||
|
|
73ce5f372d | ||
|
|
221fa989f4 | ||
|
|
a4dfad6235 | ||
|
|
ae10810caa | ||
|
|
964e979469 | ||
|
|
556b20e669 | ||
|
|
6c102362fd | ||
|
|
49faa5d116 | ||
|
|
cf8fb4cfa4 | ||
|
|
3bb7a800e3 | ||
|
|
26b6143152 | ||
|
|
728ed7ec06 | ||
|
|
5bfbd94e51 | ||
|
|
23db19d073 | ||
|
|
bd160eb32c | ||
|
|
fb354b4746 | ||
|
|
245dcf6007 | ||
|
|
94f5c7438d | ||
|
|
d0f3e0f931 | ||
|
|
524630d671 | ||
|
|
65a0e57ab9 | ||
|
|
eccea520b7 | ||
|
|
7ec9c5b147 | ||
|
|
1ae12fa0f7 | ||
|
|
ccdd4600bb | ||
|
|
3f35ecf6f3 | ||
|
|
de13209709 | ||
|
|
34500ea3fc | ||
|
|
72c191fbc1 | ||
|
|
8c2897a0b1 | ||
|
|
31da8aa92c | ||
|
|
92c45d553e | ||
|
|
ae5829dcb0 | ||
|
|
3f5a82d663 | ||
|
|
2612860f15 | ||
|
|
e6adf6549a | ||
|
|
c23ffa382d | ||
|
|
1f4d81bfc9 | ||
|
|
455d84d5b1 | ||
|
|
72c19e7f59 | ||
|
|
e52cee2125 | ||
|
|
5c87c5d9e2 | ||
|
|
8f8ecb868e | ||
|
|
a876c9b144 | ||
|
|
2ba6e4fa35 | ||
|
|
50a7e5559b | ||
|
|
db860c25c6 | ||
|
|
074311107a | ||
|
|
19a73b3866 | ||
|
|
75c9509793 |
134 changed files with 33134 additions and 1915 deletions
8
.github/workflows/build-tag.yml
vendored
8
.github/workflows/build-tag.yml
vendored
|
|
@ -9,19 +9,19 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v4
|
||||||
with:
|
with:
|
||||||
username: ${{ vars.DOCKERHUB_USERNAME }}
|
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Set up QEMU (for cross-arch)
|
name: Set up QEMU (for cross-arch)
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v4
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v4
|
||||||
-
|
-
|
||||||
name: Build and push
|
name: Build and push
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v7
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
|
|
|
||||||
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
|
|
@ -9,10 +9,10 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v4
|
||||||
-
|
-
|
||||||
name: Build and push
|
name: Build and push
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v7
|
||||||
with:
|
with:
|
||||||
push: false
|
push: false
|
||||||
tags: webstreamr/webstreamr:latest
|
tags: webstreamr/webstreamr:latest
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
".": "0.65.9"
|
".": "0.69.1"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
312
CHANGELOG.md
312
CHANGELOG.md
|
|
@ -1,5 +1,317 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.69.1](https://github.com/webstreamr/webstreamr/compare/v0.69.0...v0.69.1) (2026-03-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **source:** exclude ad videos in HDHub4u ([65191cf](https://github.com/webstreamr/webstreamr/commit/65191cfc8dad8f58b44e2c355b9adc600b99b2bf))
|
||||||
|
* **source:** remove stray console.log ([bd2dec0](https://github.com/webstreamr/webstreamr/commit/bd2dec03925d8b7760044dbfaaaec00b48f7cb66))
|
||||||
|
|
||||||
|
## [0.69.0](https://github.com/webstreamr/webstreamr/compare/v0.68.0...v0.69.0) (2026-03-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** update dependency axios to v1.14.0 ([#800](https://github.com/webstreamr/webstreamr/issues/800)) ([ad47aec](https://github.com/webstreamr/webstreamr/commit/ad47aecea3f3d34700add442e023bd54f73451c8))
|
||||||
|
* **extractor:** detect languages from HubCloud title ([89e57d4](https://github.com/webstreamr/webstreamr/commit/89e57d48d95a6f8dd6446048ae72de51dd481f37))
|
||||||
|
* **extractor:** detect resolution from HubCloud title ([f192fd0](https://github.com/webstreamr/webstreamr/commit/f192fd0b7523094746148989e0cf06717db8152e))
|
||||||
|
* remove duplicate URLs ([b87bf62](https://github.com/webstreamr/webstreamr/commit/b87bf62362f3cd6b3ea055ecdaec44511bf2ec84))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **source:** add HDHub4u ([43f0445](https://github.com/webstreamr/webstreamr/commit/43f04455f17063e459df7e7a34af44de36afd6fc))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** don't fail for HubDrive if HubCloud link is missing ([557efd2](https://github.com/webstreamr/webstreamr/commit/557efd207945ea7ada0bcaf475b0b9b9d60d8f5b))
|
||||||
|
|
||||||
|
|
||||||
|
### Code Refactoring
|
||||||
|
|
||||||
|
* **source:** extract hd hub link redirect resolver ([43637a2](https://github.com/webstreamr/webstreamr/commit/43637a2ff4280db208ec9c94c0a5d52a49dc6672))
|
||||||
|
|
||||||
|
## [0.68.0](https://github.com/webstreamr/webstreamr/compare/v0.67.0...v0.68.0) (2026-03-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* exclude resolution config options ([4c7da5d](https://github.com/webstreamr/webstreamr/commit/4c7da5dc208a1854a17aa43a26553fb6c83e7287))
|
||||||
|
|
||||||
|
## [0.67.0](https://github.com/webstreamr/webstreamr/compare/v0.66.16...v0.67.0) (2026-03-25)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.57.2 ([#795](https://github.com/webstreamr/webstreamr/issues/795)) ([5cffa11](https://github.com/webstreamr/webstreamr/commit/5cffa112bac29ee4eb18958f5345f0a3ae68ff30))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **extractor:** support FSLv2 server in HubCloud ([e36d460](https://github.com/webstreamr/webstreamr/commit/e36d460d57bdc071fc111b1459ea26184a3233e3))
|
||||||
|
|
||||||
|
## [0.66.16](https://github.com/webstreamr/webstreamr/compare/v0.66.15...v0.66.16) (2026-03-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* remove mention of XDMovies ([b60496b](https://github.com/webstreamr/webstreamr/commit/b60496bf224f1869626bceaa7e3eebabfdec8754))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **source:** remove XDMovies ([ff39c59](https://github.com/webstreamr/webstreamr/commit/ff39c594755b586ec4214d942c04026b873854fd))
|
||||||
|
|
||||||
|
## [0.66.15](https://github.com/webstreamr/webstreamr/compare/v0.66.14...v0.66.15) (2026-03-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#792](https://github.com/webstreamr/webstreamr/issues/792)) ([fc3d61b](https://github.com/webstreamr/webstreamr/commit/fc3d61b05a31c00607c7309ed04c8438c8f344f7))
|
||||||
|
* **deps:** update dependency cacheable to v2.3.4 ([#789](https://github.com/webstreamr/webstreamr/issues/789)) ([b2b9760](https://github.com/webstreamr/webstreamr/commit/b2b9760445f7b1a987f5aa795ef3a5302e753178))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** hard-code referer for Dropload and SuperVideo for now ([eecf9c4](https://github.com/webstreamr/webstreamr/commit/eecf9c42c5f95266fe1ec0deba1042741efe7306))
|
||||||
|
|
||||||
|
## [0.66.14](https://github.com/webstreamr/webstreamr/compare/v0.66.13...v0.66.14) (2026-03-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#784](https://github.com/webstreamr/webstreamr/issues/784)) ([9eca05e](https://github.com/webstreamr/webstreamr/commit/9eca05efc5c56dc0c008b6cac6314c2849e11382))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.57.1 ([#786](https://github.com/webstreamr/webstreamr/issues/786)) ([b769cd0](https://github.com/webstreamr/webstreamr/commit/b769cd0aa1f8284c921f68c620fa01565097952b))
|
||||||
|
* **extractor:** add cacheVersion and bump it for HubCloud and HubDrive ([ee3effa](https://github.com/webstreamr/webstreamr/commit/ee3effaf0079ee932d6b8a93ead0f095ea7e4906))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** add PixelDrain referer to HubCloud extractor ([693a77e](https://github.com/webstreamr/webstreamr/commit/693a77e73e984e81aee9a702092c5ef098d4e48f))
|
||||||
|
* **extractor:** reduce HubCloud + HubDrive ttl to 12h ([296f047](https://github.com/webstreamr/webstreamr/commit/296f0478b03c4dfd4927c0e53037ce8f9de64872))
|
||||||
|
|
||||||
|
## [0.66.13](https://github.com/webstreamr/webstreamr/compare/v0.66.12...v0.66.13) (2026-03-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* downgrade sqlite for now ([66ee72b](https://github.com/webstreamr/webstreamr/commit/66ee72baf02560ca4bed0864869ab8046e85d0eb))
|
||||||
|
|
||||||
|
## [0.66.12](https://github.com/webstreamr/webstreamr/compare/v0.66.11...v0.66.12) (2026-03-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#779](https://github.com/webstreamr/webstreamr/issues/779)) ([b7093ed](https://github.com/webstreamr/webstreamr/commit/b7093ed4ae37cc4e4a2603bd6c8dac0118f8e617))
|
||||||
|
* **deps:** update dependency slugify to v1.6.8 ([#777](https://github.com/webstreamr/webstreamr/issues/777)) ([20289ea](https://github.com/webstreamr/webstreamr/commit/20289eaeaf8710c4cfb60d661061c62a3cfa4aeb))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* require sqlite with alpine fix ([0f004dc](https://github.com/webstreamr/webstreamr/commit/0f004dc878c1c1a24cae553100426c61d45841a9))
|
||||||
|
|
||||||
|
## [0.66.11](https://github.com/webstreamr/webstreamr/compare/v0.66.10...v0.66.11) (2026-03-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#764](https://github.com/webstreamr/webstreamr/issues/764)) ([394dc91](https://github.com/webstreamr/webstreamr/commit/394dc91bfa0a2382ad7d084f02a2f99b7eb91ca5))
|
||||||
|
* **deps:** update dependency @types/node to v24.12.0 ([#763](https://github.com/webstreamr/webstreamr/issues/763)) ([7de0468](https://github.com/webstreamr/webstreamr/commit/7de046838d8c851caf7ec164c441b77907705c89))
|
||||||
|
* **deps:** update dependency express-rate-limit to v8.3.1 ([#765](https://github.com/webstreamr/webstreamr/issues/765)) ([e90b558](https://github.com/webstreamr/webstreamr/commit/e90b5583a7c2d005e53b60f8152eb4e37dd6591b))
|
||||||
|
* **deps:** update dependency tough-cookie to v6.0.1 ([#773](https://github.com/webstreamr/webstreamr/issues/773)) ([2734fb4](https://github.com/webstreamr/webstreamr/commit/2734fb4d0db6c658022ba1d6a89b90c7194d84b9))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.57.0 ([#766](https://github.com/webstreamr/webstreamr/issues/766)) ([ad3d0b3](https://github.com/webstreamr/webstreamr/commit/ad3d0b317e476621bef309b95fd683bd0b47fa38))
|
||||||
|
* **deps:** update eslint monorepo to v9.39.4 ([#761](https://github.com/webstreamr/webstreamr/issues/761)) ([955872a](https://github.com/webstreamr/webstreamr/commit/955872a8254e1ab93e298df720ae1e618d2fd3bc))
|
||||||
|
* **deps:** update jest monorepo to v30.3.0 ([#767](https://github.com/webstreamr/webstreamr/issues/767)) ([b522314](https://github.com/webstreamr/webstreamr/commit/b5223148c7ed336136c4182aaaa59f031ea6dc2a))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency sqlite3 to v6 ([#772](https://github.com/webstreamr/webstreamr/issues/772)) ([930e819](https://github.com/webstreamr/webstreamr/commit/930e8191beac055e8b82ee9a79bd78f56b2613a2))
|
||||||
|
* **extractor:** add missing VOE domain ([c78c1ad](https://github.com/webstreamr/webstreamr/commit/c78c1ad628c81391bdead00273e3a346983b1f45))
|
||||||
|
* **source:** switch to new Frembed URL and resolve link redirects ([8fe4cc5](https://github.com/webstreamr/webstreamr/commit/8fe4cc5a9bf37612647ed348cf76702fdbf6857e))
|
||||||
|
|
||||||
|
## [0.66.10](https://github.com/webstreamr/webstreamr/compare/v0.66.9...v0.66.10) (2026-03-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** update dependency @stylistic/eslint-plugin to v5.10.0 ([#760](https://github.com/webstreamr/webstreamr/issues/760)) ([4e43650](https://github.com/webstreamr/webstreamr/commit/4e436509bf8b6bed5d1d879756f7cccba28b0d6a))
|
||||||
|
* **deps:** update dependency axios-cache-interceptor to v1.12.0 ([#755](https://github.com/webstreamr/webstreamr/issues/755)) ([edebd86](https://github.com/webstreamr/webstreamr/commit/edebd860aa3c4c01b6444c0296e21279ea3231ff))
|
||||||
|
* **deps:** update dependency express-rate-limit to v8.3.0 ([#758](https://github.com/webstreamr/webstreamr/issues/758)) ([f58e0e1](https://github.com/webstreamr/webstreamr/commit/f58e0e1f4f6c4db1e4efbeba6278a5358d1f6a56))
|
||||||
|
* **deps:** update docker/build-push-action action to v7 ([#759](https://github.com/webstreamr/webstreamr/issues/759)) ([737a806](https://github.com/webstreamr/webstreamr/commit/737a8063a8921a8fd0247e2cb3c053030b018294))
|
||||||
|
* **deps:** update docker/login-action action to v4 ([#750](https://github.com/webstreamr/webstreamr/issues/750)) ([6b8363b](https://github.com/webstreamr/webstreamr/commit/6b8363bd9c970b8760a1412a66086b120422567f))
|
||||||
|
* **deps:** update docker/setup-buildx-action action to v4 ([#757](https://github.com/webstreamr/webstreamr/issues/757)) ([d2e72b0](https://github.com/webstreamr/webstreamr/commit/d2e72b0756e8a86d64e6c70e168b689429d4b3d7))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** use Dropload hosting URL origin as Referer ([423abf2](https://github.com/webstreamr/webstreamr/commit/423abf2479b7dffde3138c6043eb1f2854e4b077))
|
||||||
|
|
||||||
|
## [0.66.9](https://github.com/webstreamr/webstreamr/compare/v0.66.8...v0.66.9) (2026-03-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* add referral ([a5e429f](https://github.com/webstreamr/webstreamr/commit/a5e429fea365ee04a3bd32f07676a852511be852))
|
||||||
|
* **deps:** update docker/setup-qemu-action action to v4 ([#749](https://github.com/webstreamr/webstreamr/issues/749)) ([b36e148](https://github.com/webstreamr/webstreamr/commit/b36e1484eb51b7d86352c6f78f2f4c21adba28d0))
|
||||||
|
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* use default branch for tests badge ([6d5870c](https://github.com/webstreamr/webstreamr/commit/6d5870ccb219bcb6448aac732914d02f59b8b602))
|
||||||
|
|
||||||
|
## [0.66.8](https://github.com/webstreamr/webstreamr/compare/v0.66.7...v0.66.8) (2026-03-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* add known issues / limitations section ([438387f](https://github.com/webstreamr/webstreamr/commit/438387faee8fb8604f4de7c1a7876be40d79fa79))
|
||||||
|
* add more limitations ([aa820e1](https://github.com/webstreamr/webstreamr/commit/aa820e1f6463d216ad12c44587b7134f424e1c9a))
|
||||||
|
* add more references ([38d0ac5](https://github.com/webstreamr/webstreamr/commit/38d0ac53059ed338718a759c76c425a2458fa5c2))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** use Dropload playlist headers also internally ([7dfc599](https://github.com/webstreamr/webstreamr/commit/7dfc599de900c34703e41eeea5c4e459da6380cf))
|
||||||
|
|
||||||
|
## [0.66.7](https://github.com/webstreamr/webstreamr/compare/v0.66.6...v0.66.7) (2026-03-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#745](https://github.com/webstreamr/webstreamr/issues/745)) ([8ea6d4f](https://github.com/webstreamr/webstreamr/commit/8ea6d4fe3709067c1a2c30dcbf53567e10f102dc))
|
||||||
|
* **deps:** update dependency @types/node to v24.11.0 ([#744](https://github.com/webstreamr/webstreamr/issues/744)) ([282b3d0](https://github.com/webstreamr/webstreamr/commit/282b3d05b32bbcc6e2ac2137e3cb96974ee4ddfb))
|
||||||
|
* **deps:** update dependency axios to v1.13.6 ([#736](https://github.com/webstreamr/webstreamr/issues/736)) ([50e024a](https://github.com/webstreamr/webstreamr/commit/50e024a3ea1b2326fad7f2fcb59324d34a8561a2))
|
||||||
|
* **deps:** update dependency cacheable to v2.3.3 ([#737](https://github.com/webstreamr/webstreamr/issues/737)) ([168d028](https://github.com/webstreamr/webstreamr/commit/168d0280dcef9402815e353bc162af5bbf11af84))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** add referer as proxy header for Dropload ([bbb80f3](https://github.com/webstreamr/webstreamr/commit/bbb80f3cf0b918668149f5f6be1a2c38157a414b))
|
||||||
|
|
||||||
|
## [0.66.6](https://github.com/webstreamr/webstreamr/compare/v0.66.5...v0.66.6) (2026-02-25)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** update dependency minimatch to v10.2.3 ([#715](https://github.com/webstreamr/webstreamr/issues/715)) ([ce4637e](https://github.com/webstreamr/webstreamr/commit/ce4637ea80adaee5f7c325defd9676533dfb884e))
|
||||||
|
* **deps:** update dependency minimatch to v10.2.4 ([#735](https://github.com/webstreamr/webstreamr/issues/735)) ([354c273](https://github.com/webstreamr/webstreamr/commit/354c2731d8ffe1948f5ff8647a7be668c6ce5cbd))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.56.1 ([#734](https://github.com/webstreamr/webstreamr/issues/734)) ([73ce5f3](https://github.com/webstreamr/webstreamr/commit/73ce5f372d5c2c2be39d1f36fa104afbdee41b77))
|
||||||
|
* **fetcher:** cache whole flaresolverr solution and also use status from it ([221fa98](https://github.com/webstreamr/webstreamr/commit/221fa989f4c51e13308a41e59dd088a2b0128e45))
|
||||||
|
|
||||||
|
## [0.66.5](https://github.com/webstreamr/webstreamr/compare/v0.66.4...v0.66.5) (2026-02-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#730](https://github.com/webstreamr/webstreamr/issues/730)) ([6c10236](https://github.com/webstreamr/webstreamr/commit/6c102362fde48af0a6857f8ab66bc42385a3411a))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** remove StreamUp ([556b20e](https://github.com/webstreamr/webstreamr/commit/556b20e6690c251e86e10740b45ca0b4c614b222))
|
||||||
|
* **source:** add support for old XDMovies uploads without URL protector ([964e979](https://github.com/webstreamr/webstreamr/commit/964e9794695201367900ae6e4eda4ad439652222))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* cache all non-error requests for 15m, tune axios caching ([ae10810](https://github.com/webstreamr/webstreamr/commit/ae10810caaebb909ffe5c51c37dc4a01184391a9))
|
||||||
|
|
||||||
|
## [0.66.4](https://github.com/webstreamr/webstreamr/compare/v0.66.3...v0.66.4) (2026-02-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#708](https://github.com/webstreamr/webstreamr/issues/708)) ([ccdd460](https://github.com/webstreamr/webstreamr/commit/ccdd4600bba1041b5f2f2515c730856eb729991f))
|
||||||
|
* **deps:** lock file maintenance ([#718](https://github.com/webstreamr/webstreamr/issues/718)) ([d0f3e0f](https://github.com/webstreamr/webstreamr/commit/d0f3e0f9316770fe47d0395269dafe155fa1e17d))
|
||||||
|
* **deps:** update dependency @stylistic/eslint-plugin to v5.8.0 ([#709](https://github.com/webstreamr/webstreamr/issues/709)) ([1ae12fa](https://github.com/webstreamr/webstreamr/commit/1ae12fa0f790566193bfe42f3457fe9d4e976502))
|
||||||
|
* **deps:** update dependency @stylistic/eslint-plugin to v5.9.0 ([#723](https://github.com/webstreamr/webstreamr/issues/723)) ([bd160eb](https://github.com/webstreamr/webstreamr/commit/bd160eb32ce3719bfbebb468a5b2e45d9b4a35ce))
|
||||||
|
* **deps:** update dependency @types/node to v24.10.12 ([#707](https://github.com/webstreamr/webstreamr/issues/707)) ([3f35ecf](https://github.com/webstreamr/webstreamr/commit/3f35ecf6f3eab3c2c789a176be73d1a80539762d))
|
||||||
|
* **deps:** update dependency @types/node to v24.10.13 ([#717](https://github.com/webstreamr/webstreamr/issues/717)) ([524630d](https://github.com/webstreamr/webstreamr/commit/524630d671a74dd844ce0f629b4ccae1f88cf6e6))
|
||||||
|
* **deps:** update dependency axios to v1.13.5 ([#705](https://github.com/webstreamr/webstreamr/issues/705)) ([de13209](https://github.com/webstreamr/webstreamr/commit/de13209709071f8f5241f209a0dbc75232925c3c))
|
||||||
|
* **deps:** update dependency glob to v13.0.1 ([#698](https://github.com/webstreamr/webstreamr/issues/698)) ([72c191f](https://github.com/webstreamr/webstreamr/commit/72c191fbc10ed9524e698609736f01de0f236c43))
|
||||||
|
* **deps:** update dependency glob to v13.0.2 ([#711](https://github.com/webstreamr/webstreamr/issues/711)) ([eccea52](https://github.com/webstreamr/webstreamr/commit/eccea520b7cf8b997a694c6f4fded3cbc74b960a))
|
||||||
|
* **deps:** update dependency glob to v13.0.3 ([#714](https://github.com/webstreamr/webstreamr/issues/714)) ([65a0e57](https://github.com/webstreamr/webstreamr/commit/65a0e57ab9694648977822f73d89e641feabf893))
|
||||||
|
* **deps:** update dependency glob to v13.0.4 ([#720](https://github.com/webstreamr/webstreamr/issues/720)) ([245dcf6](https://github.com/webstreamr/webstreamr/commit/245dcf6007b6e02d767246463b224e18eecaccb8))
|
||||||
|
* **deps:** update dependency glob to v13.0.5 ([#721](https://github.com/webstreamr/webstreamr/issues/721)) ([fb354b4](https://github.com/webstreamr/webstreamr/commit/fb354b47461f58a25c245dcac65ca2de26302207))
|
||||||
|
* **deps:** update dependency glob to v13.0.6 ([#724](https://github.com/webstreamr/webstreamr/issues/724)) ([23db19d](https://github.com/webstreamr/webstreamr/commit/23db19d07317350d007b646c6915bb9fef60b165))
|
||||||
|
* **deps:** update dependency nodemon to v3.1.12 ([#725](https://github.com/webstreamr/webstreamr/issues/725)) ([5bfbd94](https://github.com/webstreamr/webstreamr/commit/5bfbd94e51e1c7291e12ac912578fcbf6bb39232))
|
||||||
|
* **deps:** update dependency nodemon to v3.1.13 ([#726](https://github.com/webstreamr/webstreamr/issues/726)) ([728ed7e](https://github.com/webstreamr/webstreamr/commit/728ed7ec0631d8de8df12626cdea857b1aad1059))
|
||||||
|
* **deps:** update dependency nodemon to v3.1.14 ([#728](https://github.com/webstreamr/webstreamr/issues/728)) ([3bb7a80](https://github.com/webstreamr/webstreamr/commit/3bb7a800e3662e0bd2ae31ec4b4a61eaee5dde6c))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.55.0 ([#710](https://github.com/webstreamr/webstreamr/issues/710)) ([7ec9c5b](https://github.com/webstreamr/webstreamr/commit/7ec9c5b1473e1e04203421ebbdd0c8d904744e99))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.56.0 ([#719](https://github.com/webstreamr/webstreamr/issues/719)) ([94f5c74](https://github.com/webstreamr/webstreamr/commit/94f5c7438d82f96edfb0692e55eb071642d008a9))
|
||||||
|
* **deps:** update eslint monorepo to v9.39.3 ([#727](https://github.com/webstreamr/webstreamr/issues/727)) ([26b6143](https://github.com/webstreamr/webstreamr/commit/26b6143152b8b15f2d79f747dbdb8cb48137a46a))
|
||||||
|
* **extractor:** adapt mixdrop host check ([34500ea](https://github.com/webstreamr/webstreamr/commit/34500ea3fc11376eb99a86a08c179137239d612d))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **source:** handle new XDMovies URL protection ([cf8fb4c](https://github.com/webstreamr/webstreamr/commit/cf8fb4cfa47741ef8cb3fd214e7eff24ecc72375))
|
||||||
|
|
||||||
|
## [0.66.3](https://github.com/webstreamr/webstreamr/compare/v0.66.2...v0.66.3) (2026-02-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **fetcher:** simplify FlareSolverr integration by just using a request per host ([31da8aa](https://github.com/webstreamr/webstreamr/commit/31da8aa92c48618b0b52fd2194262685c947e02e))
|
||||||
|
|
||||||
|
## [0.66.2](https://github.com/webstreamr/webstreamr/compare/v0.66.1...v0.66.2) (2026-02-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **fetcher:** improve FlareSolverr integration ([ae5829d](https://github.com/webstreamr/webstreamr/commit/ae5829dcb0f8064e939c06d6457f891b1c7051c8))
|
||||||
|
|
||||||
|
## [0.66.1](https://github.com/webstreamr/webstreamr/compare/v0.66.0...v0.66.1) (2026-02-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **source:** make XDMovies a fallback source to avoid hubcloud and many duplicates ([2612860](https://github.com/webstreamr/webstreamr/commit/2612860f1525a8f803e6d37aabdf5fd28b3d287f))
|
||||||
|
|
||||||
|
## [0.66.0](https://github.com/webstreamr/webstreamr/compare/v0.65.10...v0.66.0) (2026-02-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#692](https://github.com/webstreamr/webstreamr/issues/692)) ([455d84d](https://github.com/webstreamr/webstreamr/commit/455d84d5b186ff916734977bd2b4cb0b355ca485))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **source:** add XDMovies ([1f4d81b](https://github.com/webstreamr/webstreamr/commit/1f4d81bfc99066bfe6dafd3da7ffc8b13cdfffc1))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **fetcher:** never block flaresolverr timeouts ([c23ffa3](https://github.com/webstreamr/webstreamr/commit/c23ffa382d862ced1a385cf36d895f75ad3b7e97))
|
||||||
|
|
||||||
|
## [0.65.10](https://github.com/webstreamr/webstreamr/compare/v0.65.9...v0.65.10) (2026-01-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* **deps:** lock file maintenance ([#686](https://github.com/webstreamr/webstreamr/issues/686)) ([0743111](https://github.com/webstreamr/webstreamr/commit/074311107a96cb3ed3c3dd2af6828a9a28bbe705))
|
||||||
|
* **deps:** update dependency axios to v1.13.3 ([#685](https://github.com/webstreamr/webstreamr/issues/685)) ([19a73b3](https://github.com/webstreamr/webstreamr/commit/19a73b38669a809a473e69872be5816807da5d13))
|
||||||
|
* **deps:** update dependency axios to v1.13.4 ([#689](https://github.com/webstreamr/webstreamr/issues/689)) ([5c87c5d](https://github.com/webstreamr/webstreamr/commit/5c87c5d9e2b52aeb1665212144d06cca7e6147a4))
|
||||||
|
* **deps:** update dependency typescript-eslint to v8.54.0 ([#687](https://github.com/webstreamr/webstreamr/issues/687)) ([8f8ecb8](https://github.com/webstreamr/webstreamr/commit/8f8ecb868e5fb1dc03073ff0b53d416087ca5437))
|
||||||
|
* **extractor:** add new VOE domain ([75c9509](https://github.com/webstreamr/webstreamr/commit/75c9509793f582fd566ece0694fc6961df5f7f61))
|
||||||
|
* **extractor:** increase Fsst TTL to 3 hours ([a876c9b](https://github.com/webstreamr/webstreamr/commit/a876c9b14489f713460e56a32bcf39a3e4897796))
|
||||||
|
* **extractor:** increase StreamEmbed TTL to 3d ([e52cee2](https://github.com/webstreamr/webstreamr/commit/e52cee212508a1945bc810bda5ce07c3322769a2))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **extractor:** avoid caching results with empty meta, add some self-healing ([2ba6e4f](https://github.com/webstreamr/webstreamr/commit/2ba6e4fa358ca89aa522e1e97b4e2ed3ded7114a))
|
||||||
|
* **extractor:** ensure every result has a ttl ([db860c2](https://github.com/webstreamr/webstreamr/commit/db860c25c687b87bbec34bc72995ed47aa9115aa))
|
||||||
|
|
||||||
|
|
||||||
|
### Code Refactoring
|
||||||
|
|
||||||
|
* **extractor:** introduce internal type to reduce common code ([50a7e55](https://github.com/webstreamr/webstreamr/commit/50a7e5559bfa98305e006f8b7833aa2952d65029))
|
||||||
|
|
||||||
## [0.65.9](https://github.com/webstreamr/webstreamr/compare/v0.65.8...v0.65.9) (2026-01-23)
|
## [0.65.9](https://github.com/webstreamr/webstreamr/compare/v0.65.8...v0.65.9) (2026-01-23)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -1,15 +1,28 @@
|
||||||
# WebStreamr
|
# WebStreamr
|
||||||
|
|
||||||
[](https://github.com/webstreamr/webstreamr/actions/workflows/tests.yml)
|
[](https://github.com/webstreamr/webstreamr/actions/workflows/tests.yml)
|
||||||
[](https://github.com/webstreamr/webstreamr/releases)
|
[](https://github.com/webstreamr/webstreamr/releases)
|
||||||

|

|
||||||
|
|
||||||
[Stremio](https://www.stremio.com/) add-on which provides HTTP URLs from streaming websites.
|
[Stremio](https://www.stremio.com/) add-on which provides HTTP URLs from streaming websites.
|
||||||
|
|
||||||
|
HTTP streams have limitations.
|
||||||
|
For a better experience, I'd advise using a Debrid service and WebStreamr as fallback.
|
||||||
|
[TorBox](https://torbox.app/subscription?referral=f22eb00d-27ce-4e20-85fc-68da3d018b99) is working very well.
|
||||||
|
|
||||||
## Public instance
|
## Public instance
|
||||||
|
|
||||||
A public instance is available at https://webstreamr.hayd.uk. Hosting infrastructure for this instance is donated by [ElfHosted](https://elfhosted.com), and independently maintained by [Hayduk](https://hayd.uk).
|
A public instance is available at https://webstreamr.hayd.uk. Hosting infrastructure for this instance is donated by [ElfHosted](https://elfhosted.com), and independently maintained by [Hayduk](https://hayd.uk).
|
||||||
|
|
||||||
|
## Known issues / limitations
|
||||||
|
|
||||||
|
- PixelServer / pixeldrain has a daily limit of 6 GB per IP: https://pixeldrain.dev
|
||||||
|
- Dropload and SuperVideo on Android do not work because Stremio does not use the `Referer` header properly via HLS playlists: https://github.com/Stremio/stremio-bugs/issues/2389, maybe https://github.com/Stremio/stremio-bugs/issues/1579
|
||||||
|
- MediaFlow proxy has to be used in an inefficient way because Stremio on Android or its players cannot deal with HLS playlist with redirects: https://github.com/Stremio/stremio-bugs/issues/1574
|
||||||
|
- FlareSolverr cookies cannot be used because Cloudflare does techniques like TLS fingerprinting most likely. But FlareSolverr uses a session per host and should be quick.
|
||||||
|
- VidSrc works but rate limits heavily and is therefore only queried as fallback if nothing else is found.
|
||||||
|
- RgShows detects shared usage and blocks IPs. It therefore only works on private instances.
|
||||||
|
|
||||||
## MediaFlow Proxy
|
## MediaFlow Proxy
|
||||||
|
|
||||||
[MediaFlow Proxy](https://github.com/mhdzumair/mediaflow-proxy/) can be added when configuration the add-on to gain access to a couple of more file hosters.
|
[MediaFlow Proxy](https://github.com/mhdzumair/mediaflow-proxy/) can be added when configuration the add-on to gain access to a couple of more file hosters.
|
||||||
|
|
|
||||||
2156
package-lock.json
generated
2156
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "webstreamr",
|
"name": "webstreamr",
|
||||||
"description": "Provides HTTP URLs from streaming websites.",
|
"description": "Provides HTTP URLs from streaming websites.",
|
||||||
"version": "0.65.9",
|
"version": "0.69.1",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"analyse": "tsc --noEmit --project ./tsconfig.dev.json",
|
"analyse": "tsc --noEmit --project ./tsconfig.dev.json",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@ export class DoodStream extends Extractor {
|
||||||
return new URL(`http://dood.to/e/${videoId}`);
|
return new URL(`http://dood.to/e/${videoId}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -44,8 +44,6 @@ export class DoodStream extends Extractor {
|
||||||
{
|
{
|
||||||
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Doodstream', url, headers),
|
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Doodstream', url, headers),
|
||||||
format: Format.mp4,
|
format: Format.mp4,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -13,12 +13,12 @@ export class Dropload extends Extractor {
|
||||||
public override readonly ttl: number = 10800000; // 3h
|
public override readonly ttl: number = 10800000; // 3h
|
||||||
|
|
||||||
public supports(_ctx: Context, url: URL): boolean {
|
public supports(_ctx: Context, url: URL): boolean {
|
||||||
return null !== url.host.match(/dropload/);
|
return null !== url.host.match(/dropload|dr0pstream/);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override readonly normalize = (url: URL): URL => new URL(url.href.replace('/d/', '/').replace('/e/', '/').replace('/embed-', '/'));
|
public override readonly normalize = (url: URL): URL => new URL(url.href.replace('/d/', '/').replace('/e/', '/').replace('/embed-', '/'));
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -28,11 +28,12 @@ export class Dropload extends Extractor {
|
||||||
}
|
}
|
||||||
|
|
||||||
const playlistUrl = extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]);
|
const playlistUrl = extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]);
|
||||||
|
const playlistHeaders = { Referer: 'https://dr0pstream.com/' };
|
||||||
|
|
||||||
const heightMatch = html.match(/\d{3,}x(\d{3,}),/);
|
const heightMatch = html.match(/\d{3,}x(\d{3,}),/);
|
||||||
const height = heightMatch
|
const height = heightMatch
|
||||||
? parseInt(heightMatch[1] as string)
|
? parseInt(heightMatch[1] as string)
|
||||||
: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl);
|
: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { headers: playlistHeaders });
|
||||||
|
|
||||||
const sizeMatch = html.match(/([\d.]+ ?[GM]B)/);
|
const sizeMatch = html.match(/([\d.]+ ?[GM]B)/);
|
||||||
const size = sizeMatch ? bytes.parse(sizeMatch[1] as string) as number : undefined;
|
const size = sizeMatch ? bytes.parse(sizeMatch[1] as string) as number : undefined;
|
||||||
|
|
@ -44,14 +45,13 @@ export class Dropload extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
...(size && { bytes: size }),
|
...(size && { bytes: size }),
|
||||||
...(height && { height }),
|
...(height && { height }),
|
||||||
},
|
},
|
||||||
|
requestHeaders: playlistHeaders,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { showExternalUrls } from '../utils';
|
import { showExternalUrls } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -13,14 +13,13 @@ export class ExternalUrl extends Extractor {
|
||||||
return showExternalUrls(ctx.config) && null !== url.host.match(/.*/);
|
return showExternalUrls(ctx.config) && null !== url.host.match(/.*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(_ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(_ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
url: url,
|
url: url,
|
||||||
format: Format.unknown,
|
format: Format.unknown,
|
||||||
isExternal: true,
|
isExternal: true,
|
||||||
label: `${url.host}`,
|
label: `${url.host}`,
|
||||||
ttl: this.ttl,
|
|
||||||
meta,
|
meta,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta, UrlResult } from '../types';
|
||||||
import { Fetcher } from '../utils';
|
import { Fetcher } from '../utils';
|
||||||
|
|
||||||
export abstract class Extractor {
|
export abstract class Extractor {
|
||||||
|
|
@ -9,6 +9,8 @@ export abstract class Extractor {
|
||||||
|
|
||||||
public readonly ttl: number = 900000; // 15m
|
public readonly ttl: number = 900000; // 15m
|
||||||
|
|
||||||
|
public readonly cacheVersion: number | undefined = undefined;
|
||||||
|
|
||||||
public readonly viaMediaFlowProxy: boolean = false;
|
public readonly viaMediaFlowProxy: boolean = false;
|
||||||
|
|
||||||
protected readonly fetcher: Fetcher;
|
protected readonly fetcher: Fetcher;
|
||||||
|
|
@ -23,12 +25,17 @@ export abstract class Extractor {
|
||||||
return url;
|
return url;
|
||||||
};
|
};
|
||||||
|
|
||||||
protected abstract extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]>;
|
protected abstract extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]>;
|
||||||
|
|
||||||
public async extract(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
public async extract(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
||||||
try {
|
try {
|
||||||
return (await this.extractInternal(ctx, url, meta)).map(
|
return (await this.extractInternal(ctx, url, meta)).map(
|
||||||
urlResult => ({ ...urlResult, label: this.formatLabel(urlResult.label) }),
|
urlResult => ({
|
||||||
|
...urlResult,
|
||||||
|
label: this.formatLabel(urlResult.label ?? this.label),
|
||||||
|
ttl: this.ttl,
|
||||||
|
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof NotFoundError) {
|
if (error instanceof NotFoundError) {
|
||||||
|
|
@ -42,6 +49,7 @@ export abstract class Extractor {
|
||||||
isExternal: true,
|
isExternal: true,
|
||||||
error,
|
error,
|
||||||
label: this.formatLabel(this.label),
|
label: this.formatLabel(this.label),
|
||||||
|
ttl: 0,
|
||||||
meta,
|
meta,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,11 @@ describe('ExtractorRegistry', () => {
|
||||||
expect(urlResults).toMatchSnapshot();
|
expect(urlResults).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('empty results are cached', async () => {
|
||||||
|
const urlResults = await extractorRegistry.handle(ctx, new URL('https://dropload.io/asdfghijklmn.html'), { title: 'title' });
|
||||||
|
expect(urlResults).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
test('stats returns something', async () => {
|
test('stats returns something', async () => {
|
||||||
const stats = extractorRegistry.stats();
|
const stats = extractorRegistry.stats();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,9 +44,7 @@ export class ExtractorRegistry {
|
||||||
}
|
}
|
||||||
|
|
||||||
const normalizedUrl = extractor.normalize(url);
|
const normalizedUrl = extractor.normalize(url);
|
||||||
const cacheKey = extractor.viaMediaFlowProxy
|
const cacheKey = this.determineCacheKey(ctx, extractor, normalizedUrl);
|
||||||
? `${extractor.id}_${normalizedUrl}_${ctx.config.mediaFlowProxyUrl}`
|
|
||||||
: `${extractor.id}_${normalizedUrl}`;
|
|
||||||
|
|
||||||
const storedDataRaw = await this.urlResultCache.getRaw<UrlResult[]>(cacheKey);
|
const storedDataRaw = await this.urlResultCache.getRaw<UrlResult[]>(cacheKey);
|
||||||
const expires = storedDataRaw?.expires;
|
const expires = storedDataRaw?.expires;
|
||||||
|
|
@ -79,30 +77,36 @@ export class ExtractorRegistry {
|
||||||
|
|
||||||
this.logger.info(`Extract ${url} using ${extractor.id} extractor`, ctx);
|
this.logger.info(`Extract ${url} using ${extractor.id} extractor`, ctx);
|
||||||
|
|
||||||
const urlResults = await extractor.extract(
|
const mergedMeta: Meta = { ...meta, ...lazyUrlResults[0]?.meta };
|
||||||
ctx,
|
const urlResults = await extractor.extract(ctx, normalizedUrl, { extractorId: extractor.id, ...mergedMeta });
|
||||||
normalizedUrl,
|
|
||||||
{
|
|
||||||
...meta,
|
|
||||||
...lazyUrlResults[0]?.meta,
|
|
||||||
extractorId: meta?.extractorId ?? extractor.id,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!urlResults.length) {
|
if (!Object.keys(mergedMeta).length || urlResults.some(urlResult => urlResult.error)) {
|
||||||
await this.urlResultCache.set<UrlResult[]>(cacheKey, urlResults, 43200000); // 12h
|
await this.urlResultCache.delete(cacheKey);
|
||||||
} else if (!urlResults.some(urlResult => urlResult.error)) {
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (extractor.ttl) {
|
|
||||||
await this.urlResultCache.set<UrlResult[]>(cacheKey, urlResults, extractor.ttl);
|
|
||||||
}
|
|
||||||
if (extractor.id !== 'external') {
|
|
||||||
await this.lazyUrlResultCache.set<UrlResult[]>(normalizedUrl.href, urlResults, 2629800000); // 1 month
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
await this.lazyUrlResultCache.delete(normalizedUrl.href);
|
await this.lazyUrlResultCache.delete(normalizedUrl.href);
|
||||||
|
|
||||||
|
return urlResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ttl = urlResults.length ? extractor.ttl : 43200000; // 12h
|
||||||
|
|
||||||
|
await this.urlResultCache.set<UrlResult[]>(cacheKey, urlResults, ttl);
|
||||||
|
|
||||||
|
if (extractor.id !== 'external') {
|
||||||
|
await this.lazyUrlResultCache.set<UrlResult[]>(normalizedUrl.href, urlResults, 2629800000); // 1 month
|
||||||
}
|
}
|
||||||
|
|
||||||
return urlResults;
|
return urlResults;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private determineCacheKey(ctx: Context, extractor: Extractor, url: URL): string {
|
||||||
|
let suffix = '';
|
||||||
|
if (extractor.viaMediaFlowProxy) {
|
||||||
|
suffix += `_${ctx.config.mediaFlowProxyUrl}`;
|
||||||
|
}
|
||||||
|
if (extractor.cacheVersion) {
|
||||||
|
suffix += `_${extractor.cacheVersion}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${extractor.id}_${url}${suffix}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy } from '../utils';
|
import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ export class Fastream extends Extractor {
|
||||||
return new URL(url.href.replace('/e/', '/embed-').replace('/d/', '/embed-'));
|
return new URL(url.href.replace('/e/', '/embed-').replace('/d/', '/embed-'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const downloadUrl = new URL(url.href.replace('/embed-', '/d/'));
|
const downloadUrl = new URL(url.href.replace('/embed-', '/d/'));
|
||||||
|
|
@ -38,8 +38,6 @@ export class Fastream extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
bytes: bytes.parse(heightAndSizeMatch[2] as string) as number,
|
bytes: bytes.parse(heightAndSizeMatch[2] as string) as number,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy, unpackEval } from '../utils';
|
import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy, unpackEval } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -62,7 +62,7 @@ export class FileLions extends Extractor {
|
||||||
return new URL(url.href.replace('/v/', '/f/').replace('/download/', '/f/').replace('/file/', '/f/'));
|
return new URL(url.href.replace('/v/', '/f/').replace('/download/', '/f/').replace('/file/', '/f/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -87,8 +87,6 @@ export class FileLions extends Extractor {
|
||||||
{
|
{
|
||||||
url: await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'FileLions', url, headers),
|
url: await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'FileLions', url, headers),
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: parseInt(heightMatch[1] as string),
|
height: parseInt(heightMatch[1] as string),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import {
|
import {
|
||||||
buildMediaFlowProxyExtractorStreamUrl,
|
buildMediaFlowProxyExtractorStreamUrl,
|
||||||
supportsMediaFlowProxy,
|
supportsMediaFlowProxy,
|
||||||
|
|
@ -45,7 +45,7 @@ export class FileMoon extends Extractor {
|
||||||
return new URL(url.href.replace('/e/', '/d/'));
|
return new URL(url.href.replace('/e/', '/d/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta, originalUrl?: URL): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta, originalUrl?: URL): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -72,8 +72,6 @@ export class FileMoon extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
...(heightMatch && { height: parseInt(heightMatch[1] as string) }),
|
...(heightMatch && { height: parseInt(heightMatch[1] as string) }),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class Fsst extends Extractor {
|
export class Fsst extends Extractor {
|
||||||
|
|
@ -7,11 +7,13 @@ export class Fsst extends Extractor {
|
||||||
|
|
||||||
public readonly label = 'Fsst';
|
public readonly label = 'Fsst';
|
||||||
|
|
||||||
|
public override readonly ttl: number = 10800000; // 3h
|
||||||
|
|
||||||
public supports(_ctx: Context, url: URL): boolean {
|
public supports(_ctx: Context, url: URL): boolean {
|
||||||
return null !== url.host.match(/fsst/);
|
return null !== url.host.match(/fsst/);
|
||||||
};
|
};
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers, noProxyHeaders: true });
|
const html = await this.fetcher.text(ctx, url, { headers, noProxyHeaders: true });
|
||||||
|
|
@ -29,7 +31,6 @@ export class Fsst extends Extractor {
|
||||||
return [{
|
return [{
|
||||||
url: await this.fetcher.getFinalRedirectUrl(ctx, new URL(fileHref), { headers, noProxyHeaders: true }, 1),
|
url: await this.fetcher.getFinalRedirectUrl(ctx, new URL(fileHref), { headers, noProxyHeaders: true }, 1),
|
||||||
format: Format.mp4,
|
format: Format.mp4,
|
||||||
label: this.label,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: parseInt(heightAndUrlMatch[1] as string),
|
height: parseInt(heightAndUrlMatch[1] as string),
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,8 @@ describe('HubCloud', () => {
|
||||||
test('handle dark 2017 s03e08', async () => {
|
test('handle dark 2017 s03e08', async () => {
|
||||||
expect(await extractorRegistry.handle(ctx, new URL('https://hubcloud.one/drive/nknlofk8snfnknh'))).toMatchSnapshot();
|
expect(await extractorRegistry.handle(ctx, new URL('https://hubcloud.one/drive/nknlofk8snfnknh'))).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('handle goat 2026', async () => {
|
||||||
|
expect(await extractorRegistry.handle(ctx, new URL('https://hubcloud.foo/drive/p94k4dccjwxjcx4'))).toMatchSnapshot();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
|
import { findCountryCodes, findHeight } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class HubCloud extends Extractor {
|
export class HubCloud extends Extractor {
|
||||||
|
|
@ -8,13 +9,15 @@ export class HubCloud extends Extractor {
|
||||||
|
|
||||||
public readonly label = 'HubCloud';
|
public readonly label = 'HubCloud';
|
||||||
|
|
||||||
public override readonly ttl: number = 518400000; // 6d
|
public override readonly ttl: number = 43200000; // 12h
|
||||||
|
|
||||||
|
public override readonly cacheVersion = 1;
|
||||||
|
|
||||||
public supports(_ctx: Context, url: URL): boolean {
|
public supports(_ctx: Context, url: URL): boolean {
|
||||||
return null !== url.host.match(/hubcloud/);
|
return null !== url.host.match(/hubcloud/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const redirectHtml = await this.fetcher.text(ctx, url, { headers });
|
const redirectHtml = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -23,6 +26,10 @@ export class HubCloud extends Extractor {
|
||||||
const linksHtml = await this.fetcher.text(ctx, new URL(redirectUrlMatch[1] as string), { headers: { Referer: url.href } });
|
const linksHtml = await this.fetcher.text(ctx, new URL(redirectUrlMatch[1] as string), { headers: { Referer: url.href } });
|
||||||
const $ = cheerio.load(linksHtml);
|
const $ = cheerio.load(linksHtml);
|
||||||
|
|
||||||
|
const title = $('title').text().trim();
|
||||||
|
const countryCodes = [...new Set([...meta.countryCodes ?? [], ...findCountryCodes(title)])];
|
||||||
|
const height = meta.height ?? findHeight(title);
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
...$('a')
|
...$('a')
|
||||||
.filter((_i, el) => {
|
.filter((_i, el) => {
|
||||||
|
|
@ -36,30 +43,58 @@ export class HubCloud extends Extractor {
|
||||||
url,
|
url,
|
||||||
format: Format.unknown,
|
format: Format.unknown,
|
||||||
label: `${this.label} (FSL)`,
|
label: `${this.label} (FSL)`,
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
bytes: bytes.parse($('#size').text()) as number,
|
bytes: bytes.parse($('#size').text()) as number,
|
||||||
extractorId: `${this.id}_fsl`,
|
extractorId: `${this.id}_fsl`,
|
||||||
title: $('title').text().trim(),
|
countryCodes,
|
||||||
|
height,
|
||||||
|
title,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}).toArray(),
|
||||||
|
...$('a')
|
||||||
|
.filter((_i, el) => {
|
||||||
|
const text = $(el).text();
|
||||||
|
|
||||||
|
return text.includes('FSLv2');
|
||||||
|
})
|
||||||
|
.map((_i, el) => {
|
||||||
|
const url = new URL($(el).attr('href') as string);
|
||||||
|
return {
|
||||||
|
url,
|
||||||
|
format: Format.unknown,
|
||||||
|
label: `${this.label} (FSLv2)`,
|
||||||
|
meta: {
|
||||||
|
...meta,
|
||||||
|
bytes: bytes.parse($('#size').text()) as number,
|
||||||
|
extractorId: `${this.id}_fslv2`,
|
||||||
|
countryCodes,
|
||||||
|
height,
|
||||||
|
title,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}).toArray(),
|
}).toArray(),
|
||||||
...$('a')
|
...$('a')
|
||||||
.filter((_i, el) => $(el).text().includes('PixelServer'))
|
.filter((_i, el) => $(el).text().includes('PixelServer'))
|
||||||
.map((_i, el) => {
|
.map((_i, el) => {
|
||||||
const url = new URL(($(el).attr('href') as string).replace('/u/', '/api/file/'));
|
const userUrl = new URL(($(el).attr('href') as string).replace('/api/file/', '/u/'));
|
||||||
|
const url = new URL(userUrl.href.replace('/u/', '/api/file/'));
|
||||||
|
url.searchParams.set('download', '');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url,
|
url,
|
||||||
format: Format.unknown,
|
format: Format.unknown,
|
||||||
label: `${this.label} (PixelServer)`,
|
label: `${this.label} (PixelServer)`,
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
bytes: bytes.parse($('#size').text()) as number,
|
bytes: bytes.parse($('#size').text()) as number,
|
||||||
extractorId: `${this.id}_pixelserver`,
|
extractorId: `${this.id}_pixelserver`,
|
||||||
title: $('title').text().trim(),
|
countryCodes,
|
||||||
|
height,
|
||||||
|
title,
|
||||||
},
|
},
|
||||||
|
requestHeaders: { Referer: userUrl.href },
|
||||||
};
|
};
|
||||||
}).toArray(),
|
}).toArray(),
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -22,4 +22,8 @@ describe('HubDrive', () => {
|
||||||
test('handle avatar', async () => {
|
test('handle avatar', async () => {
|
||||||
expect(await extractorRegistry.handle(ctx, new URL('https://hubdrive.space/file/7283903021'))).toMatchSnapshot();
|
expect(await extractorRegistry.handle(ctx, new URL('https://hubdrive.space/file/7283903021'))).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('handle missing hubcloud', async () => {
|
||||||
|
expect(await extractorRegistry.handle(ctx, new URL('https://hubdrive.space/file/2243124026'))).toMatchSnapshot();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { Context, Meta, UrlResult } from '../types';
|
import { Context, InternalUrlResult, Meta } from '../types';
|
||||||
import { Fetcher } from '../utils';
|
import { Fetcher } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
import { HubCloud } from './HubCloud';
|
import { HubCloud } from './HubCloud';
|
||||||
|
|
@ -9,7 +9,9 @@ export class HubDrive extends Extractor {
|
||||||
|
|
||||||
public readonly label = 'HubDrive';
|
public readonly label = 'HubDrive';
|
||||||
|
|
||||||
public override readonly ttl: number = 518400000; // 6d
|
public override readonly ttl: number = 43200000; // 12h
|
||||||
|
|
||||||
|
public override readonly cacheVersion = 1;
|
||||||
|
|
||||||
private readonly hubCloud: HubCloud;
|
private readonly hubCloud: HubCloud;
|
||||||
|
|
||||||
|
|
@ -23,14 +25,16 @@ export class HubDrive extends Extractor {
|
||||||
return null !== url.host.match(/hubdrive/);
|
return null !== url.host.match(/hubdrive/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
const $ = cheerio.load(html);
|
const $ = cheerio.load(html);
|
||||||
|
|
||||||
const hubCloudUrl = new URL($('a:contains("HubCloud")').attr('href') as string);
|
const hubCloudUrl = $('a:contains("HubCloud")')
|
||||||
|
.map((_i, el) => new URL($(el).attr('href') as string))
|
||||||
|
.get(0);
|
||||||
|
|
||||||
return this.hubCloud.extract(ctx, hubCloudUrl, meta);
|
return hubCloudUrl ? this.hubCloud.extract(ctx, hubCloudUrl, meta) : [];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { guessHeightFromPlaylist } from '../utils';
|
import { guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -43,7 +43,7 @@ export class KinoGer extends Extractor {
|
||||||
return new URL(`${url.origin}/api/v1/video?id=${url.hash.slice(1)}`);
|
return new URL(`${url.origin}/api/v1/video?id=${url.hash.slice(1)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = {
|
const headers = {
|
||||||
'Origin': url.origin,
|
'Origin': url.origin,
|
||||||
'Referer': url.origin + '/',
|
'Referer': url.origin + '/',
|
||||||
|
|
@ -66,8 +66,6 @@ export class KinoGer extends Extractor {
|
||||||
{
|
{
|
||||||
url: m3u8Url,
|
url: m3u8Url,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }),
|
height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }),
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import {
|
import {
|
||||||
buildMediaFlowProxyExtractorStreamUrl,
|
buildMediaFlowProxyExtractorStreamUrl,
|
||||||
supportsMediaFlowProxy,
|
supportsMediaFlowProxy,
|
||||||
|
|
@ -34,7 +34,7 @@ export class LuluStream extends Extractor {
|
||||||
return new URL(`/e/${videoId}`, url);
|
return new URL(`/e/${videoId}`, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const fileUrl = new URL(url.href.replace('/e/', '/d/'));
|
const fileUrl = new URL(url.href.replace('/e/', '/d/'));
|
||||||
|
|
@ -55,8 +55,6 @@ export class LuluStream extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -13,12 +13,12 @@ export class Mixdrop extends Extractor {
|
||||||
public override viaMediaFlowProxy = true;
|
public override viaMediaFlowProxy = true;
|
||||||
|
|
||||||
public supports(ctx: Context, url: URL): boolean {
|
public supports(ctx: Context, url: URL): boolean {
|
||||||
return null !== url.host.match(/mixdrop/) && supportsMediaFlowProxy(ctx);
|
return null !== url.host.match(/mixdrop|mixdrp|mixdroop|m1xdrop/) && supportsMediaFlowProxy(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override readonly normalize = (url: URL): URL => new URL(url.href.replace('/f/', '/e/'));
|
public override readonly normalize = (url: URL): URL => new URL(url.href.replace('/f/', '/e/'));
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const fileUrl = new URL(url.href.replace('/e/', '/f/'));
|
const fileUrl = new URL(url.href.replace('/e/', '/f/'));
|
||||||
const html = await this.fetcher.text(ctx, fileUrl);
|
const html = await this.fetcher.text(ctx, fileUrl);
|
||||||
|
|
||||||
|
|
@ -35,8 +35,6 @@ export class Mixdrop extends Extractor {
|
||||||
{
|
{
|
||||||
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Mixdrop', url),
|
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Mixdrop', url),
|
||||||
format: Format.mp4,
|
format: Format.mp4,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
bytes: bytes.parse((sizeMatch[1] as string).replace(',', '')) as number,
|
bytes: bytes.parse((sizeMatch[1] as string).replace(',', '')) as number,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { BlockedError } from '../error';
|
import { BlockedError } from '../error';
|
||||||
import { BlockedReason, Context, Format, Meta, UrlResult } from '../types';
|
import { BlockedReason, Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { guessHeightFromPlaylist } from '../utils';
|
import { guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ export class RgShows extends Extractor {
|
||||||
return null !== url.host.match(/rgshows/);
|
return null !== url.host.match(/rgshows/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { 'Referer': 'https://www.rgshows.ru/', 'Origin': 'https://www.rgshows.ru', 'User-Agent': 'Mozilla' };
|
const headers = { 'Referer': 'https://www.rgshows.ru/', 'Origin': 'https://www.rgshows.ru', 'User-Agent': 'Mozilla' };
|
||||||
|
|
||||||
const data = await this.fetcher.json(ctx, url, { headers }) as RgShowsApiData;
|
const data = await this.fetcher.json(ctx, url, { headers }) as RgShowsApiData;
|
||||||
|
|
@ -38,8 +38,6 @@ export class RgShows extends Extractor {
|
||||||
{
|
{
|
||||||
url: streamUrl,
|
url: streamUrl,
|
||||||
format: isMp4 ? Format.mp4 : (isHls ? Format.hls : /* istanbul ignore next */ Format.unknown),
|
format: isMp4 ? Format.mp4 : (isHls ? Format.hls : /* istanbul ignore next */ Format.unknown),
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
...(isHls && { height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, streamUrl, { headers }) }),
|
...(isHls && { height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, streamUrl, { headers }) }),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class SaveFiles extends Extractor {
|
export class SaveFiles extends Extractor {
|
||||||
|
|
@ -18,7 +18,7 @@ export class SaveFiles extends Extractor {
|
||||||
return new URL(url.href.replace('/e/', '/').replace('/d/', '/'));
|
return new URL(url.href.replace('/e/', '/').replace('/d/', '/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -37,8 +37,6 @@ export class SaveFiles extends Extractor {
|
||||||
{
|
{
|
||||||
url: new URL(fileMatch[1] as string),
|
url: new URL(fileMatch[1] as string),
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class StreamEmbed extends Extractor {
|
export class StreamEmbed extends Extractor {
|
||||||
|
|
@ -7,11 +7,13 @@ export class StreamEmbed extends Extractor {
|
||||||
|
|
||||||
public readonly label = 'StreamEmbed';
|
public readonly label = 'StreamEmbed';
|
||||||
|
|
||||||
|
public override readonly ttl: number = 259200000; // 3d
|
||||||
|
|
||||||
public supports(_ctx: Context, url: URL): boolean {
|
public supports(_ctx: Context, url: URL): boolean {
|
||||||
return null !== url.host.match(/bullstream|mp4player|watch\.gxplayer/);
|
return null !== url.host.match(/bullstream|mp4player|watch\.gxplayer/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -26,8 +28,6 @@ export class StreamEmbed extends Extractor {
|
||||||
{
|
{
|
||||||
url: new URL(`/m3u8/${video.uid}/${video.md5}/master.txt?s=1&id=${video.id}&cache=${video.status}`, url.origin),
|
url: new URL(`/m3u8/${video.uid}/${video.md5}/master.txt?s=1&id=${video.id}&cache=${video.status}`, url.origin),
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: parseInt(JSON.parse(video.quality)[0]),
|
height: parseInt(JSON.parse(video.quality)[0]),
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
import winston from 'winston';
|
|
||||||
import { createTestContext } from '../test';
|
|
||||||
import { FetcherMock } from '../utils';
|
|
||||||
import { ExtractorRegistry } from './ExtractorRegistry';
|
|
||||||
import { StreamUp } from './StreamUp';
|
|
||||||
|
|
||||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
|
||||||
const extractorRegistry = new ExtractorRegistry(logger, [new StreamUp(new FetcherMock(`${__dirname}/__fixtures__/StreamUp`))]);
|
|
||||||
|
|
||||||
const ctx = createTestContext();
|
|
||||||
|
|
||||||
describe('StreamUp', () => {
|
|
||||||
test('handle one battle after another', async () => {
|
|
||||||
expect(await extractorRegistry.handle(ctx, new URL('https://strmup.to/6950ae79eaa4c'))).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
import * as cheerio from 'cheerio';
|
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
|
||||||
import { guessHeightFromPlaylist } from '../utils';
|
|
||||||
import { Extractor } from './Extractor';
|
|
||||||
|
|
||||||
interface StreamUpApiData {
|
|
||||||
streaming_url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/streamup.py */
|
|
||||||
export class StreamUp extends Extractor {
|
|
||||||
public readonly id = 'streamup';
|
|
||||||
|
|
||||||
public readonly label = 'StreamUP';
|
|
||||||
|
|
||||||
public override readonly ttl: number = 10800000; // 3h
|
|
||||||
|
|
||||||
public supports(_ctx: Context, url: URL): boolean {
|
|
||||||
return null !== url.host.match(/streamup|strmup/) || [
|
|
||||||
'vfaststream.com',
|
|
||||||
].includes(url.host);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
|
||||||
const headers = { Referer: `${url.origin}/`, Origin: url.origin };
|
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
|
||||||
|
|
||||||
const data = await this.fetcher.json(ctx, new URL(`/ajax/stream?filecode=${url.pathname.split('/').at(-1)}`, url), { headers }) as StreamUpApiData;
|
|
||||||
const playlistUrl = new URL(data.streaming_url);
|
|
||||||
|
|
||||||
const $ = cheerio.load(html);
|
|
||||||
const title = $('title').text().trim();
|
|
||||||
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
url: playlistUrl,
|
|
||||||
format: Format.hls,
|
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
|
||||||
...meta,
|
|
||||||
height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl),
|
|
||||||
title,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import {
|
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
||||||
buildMediaFlowProxyExtractorRedirectUrl,
|
|
||||||
supportsMediaFlowProxy,
|
|
||||||
} from '../utils';
|
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class Streamtape extends Extractor {
|
export class Streamtape extends Extractor {
|
||||||
|
|
@ -45,7 +42,7 @@ export class Streamtape extends Extractor {
|
||||||
return new URL(url.href.replace('/e/', '/v/'));
|
return new URL(url.href.replace('/e/', '/v/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
// Only needed to properly find non-existing files via 404 response
|
// Only needed to properly find non-existing files via 404 response
|
||||||
|
|
@ -62,8 +59,6 @@ export class Streamtape extends Extractor {
|
||||||
{
|
{
|
||||||
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Streamtape', url, headers),
|
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Streamtape', url, headers),
|
||||||
format: Format.mp4,
|
format: Format.mp4,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ export class SuperVideo extends Extractor {
|
||||||
return new URL(url.href.replace('/e/', '/').replace('/k/', '/').replace('/embed-', '/'));
|
return new URL(url.href.replace('/e/', '/').replace('/k/', '/').replace('/embed-', '/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -33,29 +33,29 @@ export class SuperVideo extends Extractor {
|
||||||
throw new NotFoundError();
|
throw new NotFoundError();
|
||||||
}
|
}
|
||||||
|
|
||||||
const m3u8Url = extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]);
|
const playlistUrl = extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]);
|
||||||
|
const playlistHeaders = { Referer: 'https://supervideo.cc/' };
|
||||||
|
|
||||||
const heightAndSizeMatch = html.match(/\d{3,}x(\d{3,}), ([\d.]+ ?[GM]B)/);
|
const heightAndSizeMatch = html.match(/\d{3,}x(\d{3,}), ([\d.]+ ?[GM]B)/);
|
||||||
const size = heightAndSizeMatch ? bytes.parse(heightAndSizeMatch[2] as string) as number : undefined;
|
const size = heightAndSizeMatch ? bytes.parse(heightAndSizeMatch[2] as string) as number : undefined;
|
||||||
const height = heightAndSizeMatch
|
const height = heightAndSizeMatch
|
||||||
? parseInt(heightAndSizeMatch[1] as string)
|
? parseInt(heightAndSizeMatch[1] as string)
|
||||||
: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers: { Referer: url.href } });
|
: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { headers: playlistHeaders });
|
||||||
|
|
||||||
const $ = cheerio.load(html);
|
const $ = cheerio.load(html);
|
||||||
const title = $('.download__title').text().trim();
|
const title = $('.download__title').text().trim();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
url: m3u8Url,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
...(size && { bytes: size }),
|
...(size && { bytes: size }),
|
||||||
...(height && { height }),
|
...(height && { height }),
|
||||||
},
|
},
|
||||||
|
requestHeaders: playlistHeaders,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ export class Uqload extends Extractor {
|
||||||
return new URL(url.href.replace('/embed-', '/'));
|
return new URL(url.href.replace('/embed-', '/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const html = await this.fetcher.text(ctx, url);
|
const html = await this.fetcher.text(ctx, url);
|
||||||
|
|
||||||
if (/File Not Found/.test(html)) {
|
if (/File Not Found/.test(html)) {
|
||||||
|
|
@ -35,8 +35,6 @@ export class Uqload extends Extractor {
|
||||||
{
|
{
|
||||||
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Uqload', url),
|
url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Uqload', url),
|
||||||
format: Format.mp4,
|
format: Format.mp4,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { BlockedError, TooManyRequestsError } from '../error';
|
import { BlockedError, TooManyRequestsError } from '../error';
|
||||||
import { Context, Format, Meta, NonEmptyArray, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta, NonEmptyArray } from '../types';
|
||||||
import { Fetcher, guessHeightFromPlaylist } from '../utils';
|
import { Fetcher, guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ export class VidSrc extends Extractor {
|
||||||
return null !== url.host.match(/vidsrc|vsrc/);
|
return null !== url.host.match(/vidsrc|vsrc/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
// While this is a crappy thing to do, they seem to be blocking overly strict IMO
|
// While this is a crappy thing to do, they seem to be blocking overly strict IMO
|
||||||
const randomIp = `${Math.floor(Math.random() * 223) + 1}.${Math.floor(Math.random() * 256)}.${Math.floor(Math.random() * 256)}.${Math.floor(Math.random() * 256)}`;
|
const randomIp = `${Math.floor(Math.random() * 223) + 1}.${Math.floor(Math.random() * 256)}.${Math.floor(Math.random() * 256)}.${Math.floor(Math.random() * 256)}`;
|
||||||
const newCtx = { ...ctx, ip: randomIp };
|
const newCtx = { ...ctx, ip: randomIp };
|
||||||
|
|
@ -31,7 +31,7 @@ export class VidSrc extends Extractor {
|
||||||
return this.extractUsingRandomDomain(newCtx, url, meta, [...this.domains]);
|
return this.extractUsingRandomDomain(newCtx, url, meta, [...this.domains]);
|
||||||
};
|
};
|
||||||
|
|
||||||
private async extractUsingRandomDomain(ctx: Context, url: URL, meta: Meta, domains: string[]): Promise<UrlResult[]> {
|
private async extractUsingRandomDomain(ctx: Context, url: URL, meta: Meta, domains: string[]): Promise<InternalUrlResult[]> {
|
||||||
const domainIndex = Math.floor(Math.random() * domains.length);
|
const domainIndex = Math.floor(Math.random() * domains.length);
|
||||||
const [domain] = domains.splice(domainIndex, 1) as [string];
|
const [domain] = domains.splice(domainIndex, 1) as [string];
|
||||||
|
|
||||||
|
|
@ -74,7 +74,6 @@ export class VidSrc extends Extractor {
|
||||||
url: m3u8Url,
|
url: m3u8Url,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: serverName,
|
label: serverName,
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers: { Referer: iframeUrl.href } }),
|
height: await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers: { Referer: iframeUrl.href } }),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ export class Vidora extends Extractor {
|
||||||
return new URL(url.href.replace('/embed/', '/'));
|
return new URL(url.href.replace('/embed/', '/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const html = await this.fetcher.text(ctx, url);
|
const html = await this.fetcher.text(ctx, url);
|
||||||
|
|
||||||
const $ = cheerio.load(html);
|
const $ = cheerio.load(html);
|
||||||
|
|
@ -31,8 +31,6 @@ export class Vidora extends Extractor {
|
||||||
{
|
{
|
||||||
url: m3u8Url,
|
url: m3u8Url,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }),
|
height: meta.height ?? await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Context, CountryCode, Format, Meta, UrlResult } from '../types';
|
import { Context, CountryCode, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { CustomRequestConfig, guessHeightFromPlaylist, hasMultiEnabled, iso639FromCountryCode } from '../utils';
|
import { CustomRequestConfig, guessHeightFromPlaylist, hasMultiEnabled, iso639FromCountryCode } from '../utils';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
|
|
@ -13,7 +13,7 @@ export class VixSrc extends Extractor {
|
||||||
return null !== url.host.match(/vixsrc/);
|
return null !== url.host.match(/vixsrc/);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: url.href };
|
const headers = { Referer: url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url);
|
const html = await this.fetcher.text(ctx, url);
|
||||||
|
|
@ -38,8 +38,6 @@ export class VixSrc extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
countryCodes,
|
countryCodes,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import bytes from 'bytes';
|
import bytes from 'bytes';
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
import { NotFoundError } from '../error';
|
import { NotFoundError } from '../error';
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import {
|
import {
|
||||||
buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist,
|
buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist,
|
||||||
supportsMediaFlowProxy,
|
supportsMediaFlowProxy,
|
||||||
|
|
@ -74,6 +74,7 @@ export class Voe extends Extractor {
|
||||||
'kennethofficialitem.com',
|
'kennethofficialitem.com',
|
||||||
'kinoger.ru',
|
'kinoger.ru',
|
||||||
'kristiesoundsimply.com',
|
'kristiesoundsimply.com',
|
||||||
|
'lancewhosedifficult.com',
|
||||||
'launchreliantcleaverriver.com',
|
'launchreliantcleaverriver.com',
|
||||||
'lauradaydo.com',
|
'lauradaydo.com',
|
||||||
'lisatrialidea.com',
|
'lisatrialidea.com',
|
||||||
|
|
@ -103,6 +104,7 @@ export class Voe extends Extractor {
|
||||||
'sethniceletter.com',
|
'sethniceletter.com',
|
||||||
'shannonpersonalcost.com',
|
'shannonpersonalcost.com',
|
||||||
'simpulumlamerop.com',
|
'simpulumlamerop.com',
|
||||||
|
'smoki.cc',
|
||||||
'stevenimaginelittle.com',
|
'stevenimaginelittle.com',
|
||||||
'strawberriesporail.com',
|
'strawberriesporail.com',
|
||||||
'telyn610zoanthropy.com',
|
'telyn610zoanthropy.com',
|
||||||
|
|
@ -124,7 +126,7 @@ export class Voe extends Extractor {
|
||||||
return new URL(`/${url.pathname.replace(/\/+$/, '').split('/').at(-1)}`, url);
|
return new URL(`/${url.pathname.replace(/\/+$/, '').split('/').at(-1)}`, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
let html: string;
|
let html: string;
|
||||||
|
|
@ -166,8 +168,6 @@ export class Voe extends Extractor {
|
||||||
{
|
{
|
||||||
url: playlistUrl,
|
url: playlistUrl,
|
||||||
format: Format.hls,
|
format: Format.hls,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
height,
|
height,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Context, Format, Meta, UrlResult } from '../types';
|
import { Context, Format, InternalUrlResult, Meta } from '../types';
|
||||||
import { Extractor } from './Extractor';
|
import { Extractor } from './Extractor';
|
||||||
|
|
||||||
export class YouTube extends Extractor {
|
export class YouTube extends Extractor {
|
||||||
|
|
@ -12,7 +12,7 @@ export class YouTube extends Extractor {
|
||||||
return null !== url.host.match(/youtube/) && url.searchParams.has('v');
|
return null !== url.host.match(/youtube/) && url.searchParams.has('v');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<InternalUrlResult[]> {
|
||||||
const headers = { Referer: meta.referer ?? url.href };
|
const headers = { Referer: meta.referer ?? url.href };
|
||||||
|
|
||||||
const html = await this.fetcher.text(ctx, url, { headers });
|
const html = await this.fetcher.text(ctx, url, { headers });
|
||||||
|
|
@ -24,8 +24,6 @@ export class YouTube extends Extractor {
|
||||||
url,
|
url,
|
||||||
format: Format.unknown,
|
format: Format.unknown,
|
||||||
ytId: url.searchParams.get('v') as string,
|
ytId: url.searchParams.get('v') as string,
|
||||||
label: this.label,
|
|
||||||
ttl: this.ttl,
|
|
||||||
meta: {
|
meta: {
|
||||||
...meta,
|
...meta,
|
||||||
title: titleMatch[1] as string,
|
title: titleMatch[1] as string,
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
<head>
|
<head>
|
||||||
<title>Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv</title>
|
<title>Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const fsl = document.getElementById('s3');
|
|
||||||
if (fsl) fsl.href += '_1' + new Date().getMinutes();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="ad-container"></div>
|
<div class="ad-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -201,7 +192,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
<a href="https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
||||||
<script>
|
<script>
|
||||||
const fsl = document.getElementById('fsl');
|
const fsl = document.getElementById('fsl');
|
||||||
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
||||||
|
|
@ -213,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pixel.hubcdn.fans/?id=cf9da6de5b5cc1ca5b3e2520b5acf717edf501be7d93b65e393737c54cc02414e98b792baef67306766e1ada227050e941565d787d593d01503ab42aa92cc97a47e47ddd48df7d80a8e8c69d566d8d71fb824057bb75356c67cd624ebbd1497f::e0be1d5c31c2e9e9bce4002ad9cce30a" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
<a href="https://pixel.hubcdn.fans/?id=5c7253dc7782ea14f891ed9f4c4d7f7ee43284d5e72e6ff401de6f1906046db7713b6d892a040a4b3dd31c9f47eee611a17924f224fc27dd70a921d4e9025c6b7d8b937e11b44e737bd4d5cfd203e361f77a8496dd75025ad8ce3e200905ef3f::853f8b4709e1acb8413ec14270adf205" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
||||||
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
||||||
|
|
||||||
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
||||||
|
|
@ -227,6 +218,11 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://hidden-boat-e87c.hivegic619569.workers.dev/1397962425/53eaea70751039409adff7a1b54377f9aa8e590cd610a6452c849a7cbd2e40af66e667588bada714c63a9cf5360712f266b304e379bfde1d12c46aa2ccedf6eb::6170837909b2ffc3fc7f892bc959bd7e/Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv" download="Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #6f42c1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [PDL Server]</a>
|
||||||
|
<script>
|
||||||
|
fetch('https://ping.rojgaartakkar.com/bmRFb0YweUVYZ1QvZys0OTRsNk53T2JMRG13QWRxYW5YcWYxYzNHYjhHZz0=');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -253,7 +249,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
if(isAndroid()){
|
if(isAndroid()){
|
||||||
android_launch.classList.remove("d-none");
|
android_launch.classList.remove("d-none");
|
||||||
android_launch.addEventListener('click', ()=>{
|
android_launch.addEventListener('click', ()=>{
|
||||||
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445',scheme: 'https',type: 'video/x-matrosk',
|
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
|
||||||
});anchor.click();
|
});anchor.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -319,6 +315,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
|
||||||
<br><br>
|
<br><br>
|
||||||
</div>
|
</div>
|
||||||
Msc
|
Msc
|
||||||
|
|
||||||
|
<video autoplay muted playsinline preload="metadata" hidden>
|
||||||
|
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||||
|
|
@ -330,6 +330,7 @@ Msc
|
||||||
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
|
||||||
</body>
|
</body>
|
||||||
</html><script>
|
</html><script>
|
||||||
window.sessionStorage.setItem('xl',window.location.href)
|
window.sessionStorage.setItem('xl',window.location.href)
|
||||||
|
|
@ -345,38 +346,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
|
||||||
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
||||||
<!--</script>-->
|
<!--</script>-->
|
||||||
|
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
|
||||||
|
|
||||||
<script>
|
|
||||||
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script data-cfasync="false" type="text/javascript" id="clever-core">
|
|
||||||
/* <![CDATA[ */
|
|
||||||
(function (document, window) {
|
|
||||||
var a, c = document.createElement("script"), f = window.frameElement;
|
|
||||||
|
|
||||||
c.id = "CleverCoreLoader98023";
|
|
||||||
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
|
|
||||||
|
|
||||||
c.async = !0;
|
|
||||||
c.type = "text/javascript";
|
|
||||||
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
|
|
||||||
c.setAttribute("data-callback", "put-your-callback-function-here");
|
|
||||||
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
|
|
||||||
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
|
|
||||||
|
|
||||||
try {
|
|
||||||
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
|
|
||||||
} catch (e) {
|
|
||||||
a = !1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
|
|
||||||
a.parentNode.insertBefore(c, a);
|
|
||||||
})(document, window);
|
|
||||||
/* ]]> */
|
|
||||||
</script>
|
|
||||||
|
|
@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
<head>
|
<head>
|
||||||
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
|
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const fsl = document.getElementById('s3');
|
|
||||||
if (fsl) fsl.href += '_1' + new Date().getMinutes();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="ad-container"></div>
|
<div class="ad-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -201,7 +192,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
<a href="https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
||||||
<script>
|
<script>
|
||||||
const fsl = document.getElementById('fsl');
|
const fsl = document.getElementById('fsl');
|
||||||
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
||||||
|
|
@ -213,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pixel.hubcdn.fans/?id=93cbf9a8a64bd73e509803a9c1a42d3ca3c1b5e6eedf0306d86e7862fe38d6450d7165aa485b86286f5e95151d3af31e89350676e5cca8b54f56737388e81172998605a935e8c1828f026797bc158ff23921f09201c464a9d4a29c75f5e12026::43a5d16883d6f6cd09d2487e56f0836d" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
<a href="https://pixel.hubcdn.fans/?id=fb8c076011baaf9fd0cd6d349d86da6d8bf9c1a241cdcfb8ec27e07979b905608e125fadd030f801fa79752521d434885fe414c584c60919d282af9562b752b7fbaaad7784bd8251ce8eb1f5dacaf711bee65758b9f7fb78c4935b0b08afde16::837d46bfad85ed4f96ad7d9246ba302e" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
||||||
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
||||||
|
|
||||||
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
||||||
|
|
@ -241,6 +232,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
|
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -256,7 +248,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
if(isAndroid()){
|
if(isAndroid()){
|
||||||
android_launch.classList.remove("d-none");
|
android_launch.classList.remove("d-none");
|
||||||
android_launch.addEventListener('click', ()=>{
|
android_launch.addEventListener('click', ()=>{
|
||||||
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444',scheme: 'https',type: 'video/x-matrosk',
|
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
|
||||||
});anchor.click();
|
});anchor.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -322,6 +314,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
|
||||||
<br><br>
|
<br><br>
|
||||||
</div>
|
</div>
|
||||||
Msc
|
Msc
|
||||||
|
|
||||||
|
<video autoplay muted playsinline preload="metadata" hidden>
|
||||||
|
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||||
|
|
@ -333,6 +329,7 @@ Msc
|
||||||
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
|
||||||
</body>
|
</body>
|
||||||
</html><script>
|
</html><script>
|
||||||
window.sessionStorage.setItem('xl',window.location.href)
|
window.sessionStorage.setItem('xl',window.location.href)
|
||||||
|
|
@ -348,38 +345,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
|
||||||
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
||||||
<!--</script>-->
|
<!--</script>-->
|
||||||
|
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
|
||||||
|
|
||||||
<script>
|
|
||||||
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script data-cfasync="false" type="text/javascript" id="clever-core">
|
|
||||||
/* <![CDATA[ */
|
|
||||||
(function (document, window) {
|
|
||||||
var a, c = document.createElement("script"), f = window.frameElement;
|
|
||||||
|
|
||||||
c.id = "CleverCoreLoader98023";
|
|
||||||
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
|
|
||||||
|
|
||||||
c.async = !0;
|
|
||||||
c.type = "text/javascript";
|
|
||||||
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
|
|
||||||
c.setAttribute("data-callback", "put-your-callback-function-here");
|
|
||||||
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
|
|
||||||
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
|
|
||||||
|
|
||||||
try {
|
|
||||||
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
|
|
||||||
} catch (e) {
|
|
||||||
a = !1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
|
|
||||||
a.parentNode.insertBefore(c, a);
|
|
||||||
})(document, window);
|
|
||||||
/* ]]> */
|
|
||||||
</script>
|
|
||||||
|
|
@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
<head>
|
<head>
|
||||||
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
|
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const fsl = document.getElementById('s3');
|
|
||||||
if (fsl) fsl.href += '_1' + new Date().getMinutes();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="ad-container"></div>
|
<div class="ad-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -201,6 +192,11 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
||||||
|
<script>
|
||||||
|
const fsl = document.getElementById('fsl');
|
||||||
|
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -208,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pixel.hubcdn.fans/?id=8e81a3ddfb35a8f62a21c629b0a08f08a27f8f19be22ca584532726183bbe7cf4dc97e6ba2b4df7a1d76d124164dd6322999e62b058f6af48e4d7ff85a49ee9076155b673b872fa61f8fdeb04ce6540eec83233edac385159a9af83c16643f8f::3e17e91b2006e6622ac681dfceb43068" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
<a href="https://pixel.hubcdn.fans/?id=d4697e0d4f27ea5067265503a820f05245ffd2d64a88ce6ecce4e18b6cace173bebc13920763a92baeaefe65f8c8a26efd836a0c1b3e92b4ce717874a5ff26a0764642b8090a5f7ef227bdb0bd6744ea8aa7edc43957e94b6ac9d2034c5a1d29::bada52a274d97488e2e76c1718bc16f5" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
||||||
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
||||||
|
|
||||||
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
||||||
|
|
@ -226,9 +222,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.dev/Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download File [3.15 GB]</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -240,7 +233,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeThPdXlOMjMxNys1cCszRHdPVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Downoad From Telegram 🔥</a>
|
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeTdPK3lOM0QyOHJmbyt6Q3dlVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Downoad From Telegram </a>
|
||||||
|
|
||||||
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
|
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
|
||||||
|
|
||||||
|
|
@ -257,7 +250,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
if(isAndroid()){
|
if(isAndroid()){
|
||||||
android_launch.classList.remove("d-none");
|
android_launch.classList.remove("d-none");
|
||||||
android_launch.addEventListener('click', ()=>{
|
android_launch.addEventListener('click', ()=>{
|
||||||
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.dev/Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv',scheme: 'https',type: 'video/x-matrosk',
|
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
|
||||||
});anchor.click();
|
});anchor.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -323,6 +316,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
|
||||||
<br><br>
|
<br><br>
|
||||||
</div>
|
</div>
|
||||||
Msc
|
Msc
|
||||||
|
|
||||||
|
<video autoplay muted playsinline preload="metadata" hidden>
|
||||||
|
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||||
|
|
@ -334,6 +331,7 @@ Msc
|
||||||
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
|
||||||
</body>
|
</body>
|
||||||
</html><script>
|
</html><script>
|
||||||
window.sessionStorage.setItem('xl',window.location.href)
|
window.sessionStorage.setItem('xl',window.location.href)
|
||||||
|
|
@ -349,38 +347,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
|
||||||
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
||||||
<!--</script>-->
|
<!--</script>-->
|
||||||
|
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
|
||||||
|
|
||||||
<script>
|
|
||||||
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script data-cfasync="false" type="text/javascript" id="clever-core">
|
|
||||||
/* <![CDATA[ */
|
|
||||||
(function (document, window) {
|
|
||||||
var a, c = document.createElement("script"), f = window.frameElement;
|
|
||||||
|
|
||||||
c.id = "CleverCoreLoader98023";
|
|
||||||
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
|
|
||||||
|
|
||||||
c.async = !0;
|
|
||||||
c.type = "text/javascript";
|
|
||||||
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
|
|
||||||
c.setAttribute("data-callback", "put-your-callback-function-here");
|
|
||||||
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
|
|
||||||
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
|
|
||||||
|
|
||||||
try {
|
|
||||||
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
|
|
||||||
} catch (e) {
|
|
||||||
a = !1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
|
|
||||||
a.parentNode.insertBefore(c, a);
|
|
||||||
})(document, window);
|
|
||||||
/* ]]> */
|
|
||||||
</script>
|
|
||||||
|
|
@ -0,0 +1,355 @@
|
||||||
|
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
aclib.runPop({
|
||||||
|
zoneId: '10553222',
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220853"></script>-->
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
history.pushState(null, null, location.href);
|
||||||
|
window.onpopstate = function () {
|
||||||
|
history.go(1);
|
||||||
|
window.location.href = 'https://push-me-once.com/go/1272663';
|
||||||
|
};
|
||||||
|
});Object.defineProperty(document,atob('cmVmZXJyZXI='),{get:function(){return atob('aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=')}});
|
||||||
|
</script>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="referrer" content="no-referrer"/>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
|
||||||
|
|
||||||
|
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
||||||
|
|
||||||
|
<meta name=viewport content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
.icon{width:48px;height:48px}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0}.bg-primary{background-color:#4e73df!important}body{font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"!important;font-weight:14px}.font-weight-bold{font-weight:700!important}.text-primary{color:#007bff!important;padding:.75rem 1.25rem;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;border:1px solid #e3e6f0;border-radius:.35rem;line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.font-weight-bold{font-weight:700!important}.m-0{margin:auto!important;width:100%}h4,.h4{font-size:1.4rem}.card-body{flex:1 1 auto;padding:1.25rem}.nav-tabs{border-bottom:1px solid #dddfeb}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#007bff #dddfeb #fff;font-weight:600}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}a{color:#4e73df;text-decoration:none;background-color:transparent}.footer{width:100%;height:auto;position:absolute;right:0;padding:15px 50px 0 15px;font-size:15px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right}.tab-content{width:90%;height:auto;position:initial;right:0;padding:0;text-align:center}.btn{color:#fff!important;background-color:#007bff!important;border-color:#007bff!important;font-weight:700!important}.btn:hover{color:#fff!important;background-color:#0069d9!important;border-color:#0062cc!important}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.2rem;border-radius:.45rem}.header{width:100%;height:auto;position:relative;right:0;padding:10px 50px 5px 15px;font-size:16px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right;margin-top:-25px}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#fff}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.card{line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.m-5{margin:auto!important}.swal-button{background-color:#007bff!important}.card-header:first-child{font-weight:600}
|
||||||
|
.btn-success1 {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #28a745;
|
||||||
|
border-color: #28a745;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1rem;
|
||||||
|
letter-spacing: .4px;
|
||||||
|
font-family: 'Open Sans',sans-serif!important;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration:none !important;
|
||||||
|
vertical-align: middle;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
padding: .375rem .75rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
border-radius: .30rem;
|
||||||
|
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
||||||
|
}
|
||||||
|
.btn-success1:not(:disabled):not(.disabled).active, .btn-success1:not(:disabled):not(.disabled):active, .show>.btn-success1.dropdown-toggle {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #1e7e34;
|
||||||
|
border-color: #1c7430;
|
||||||
|
}
|
||||||
|
.btn-success1:hover {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #218838;
|
||||||
|
border-color: #1e7e34;
|
||||||
|
}
|
||||||
|
.btn-success1.focus, .btn-success1:focus {
|
||||||
|
box-shadow: 0 0 0 0.2rem rgb(72 180 97 / 50%);
|
||||||
|
}
|
||||||
|
.btn-lg, .btn-group-lg > .btn2 {
|
||||||
|
padding: .5rem .6rem !important;
|
||||||
|
font-family: 'Open Sans',sans-serif!important;
|
||||||
|
letter-spacing: .1px;
|
||||||
|
border-radius: 0.35rem!important;
|
||||||
|
}
|
||||||
|
.ads-btns {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden
|
||||||
|
}
|
||||||
|
.ads-btns a.btn2 {
|
||||||
|
min-width: 40%
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg {
|
||||||
|
fill: #fff;
|
||||||
|
width: 17px;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg path {
|
||||||
|
fill: #fff;
|
||||||
|
stroke: #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg:first-child path {
|
||||||
|
fill: #fff;
|
||||||
|
stroke: transparent
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg:first-child {
|
||||||
|
right: 20px
|
||||||
|
}
|
||||||
|
.downloads-btns-div .btn2 {
|
||||||
|
margin: 0 3px 12px
|
||||||
|
}
|
||||||
|
.btn2 {
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: 2px solid #cbfc01;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 6px;
|
||||||
|
-webkit-border-radius: 6px;
|
||||||
|
-moz-border-radius: 6px;
|
||||||
|
background: #0ebac3;
|
||||||
|
color: #000;
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #cbfc01
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.btn-zip {
|
||||||
|
border-color: #00d0ff;
|
||||||
|
background: #00d0ff;
|
||||||
|
color: #000
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<br/>
|
||||||
|
<div class="header">
|
||||||
|
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2>
|
||||||
|
<div class="main" id="section2">
|
||||||
|
|
||||||
|
<div class="card h6">
|
||||||
|
|
||||||
|
<div class="card-header text-white bg-primary mb-3">
|
||||||
|
Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv </div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">File Size<i id="size">17.78 GB</i></li>
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">File Type<i>video/x-matrosk</i></li>
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">Share Date<i id="date">24-Mar-2026 05:58:31</i></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<p class="h3 text-success">Download Link Generated</p>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<input onclick="copy_link('ilink')" type="text" class="form-control" value="https://hubcloud.foo/drive/p94k4dccjwxjcx4" readonly="" id="ilink">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text btn" id="basic-addon2" onclick="copy_link('ilink')">Copy Share Link</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Banners -->
|
||||||
|
<!--<ins data-revive-zoneid="6" data-revive-cphost="43509b58b68d940f8734726dfed6c5c8|1|hubcloud.in" data-revive-id="1d63e790351363d29b61f9cf59b98fad"></ins>-->
|
||||||
|
<!-- Mobile Banners -->
|
||||||
|
<!--<ins data-revive-zoneid="7" data-revive-cphost="43509b58b68d940f8734726dfed6c5c8|1|hubcloud.in" data-revive-id="1d63e790351363d29b61f9cf59b98fad"></ins>-->
|
||||||
|
<!--<script async src="//greenfox.ink/d/asyncjs.php"></script>-->
|
||||||
|
|
||||||
|
<div class="alert alert-warning h6" role="alert">
|
||||||
|
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://cdn.fsl-buckets.life/Goat 2026 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-BYNDR-4kHdHub.mkv?token=af180cafc2418c7c47249d0167ba9704" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const fsl = document.getElementById('s3');
|
||||||
|
if (fsl) fsl.href += '_1' + new Date().getMinutes();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="ad-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="ad-containerx"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
|
||||||
|
<script>
|
||||||
|
const fsl = document.getElementById('fsl');
|
||||||
|
if (fsl) fsl.href += '1' + new Date().getMinutes();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://pixel.hubcdn.fans/?id=9ca5a77d1f6a5e30157f1ba9335f5f37c246c28a9362693731d08440ebf515ae0bad03a3f054cc1cfc5fd342ead92bee375037aa0be4a07cce23c85320203685335142526fc508a5afc2ef06e1369c99fee1345a55224cddce65e250a0c33632::b31f4889dde70a376ef549e8fa698de9" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
|
||||||
|
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
|
||||||
|
|
||||||
|
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
|
||||||
|
Resume Not Supported in 10Gbps So Use only if you have stable internet (:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function createIntentURL({host, scheme = 'http', type = 'application/octet-stream'}) {
|
||||||
|
let host_ = host.replace('https://', '');
|
||||||
|
return `intent://${host_}#Intent;scheme=${scheme};action=android.intent.action.VIEW;type=${type};S.browser_fallback_url=${encodeURIComponent(host)};end`;
|
||||||
|
}
|
||||||
|
function isAndroid() {
|
||||||
|
return /Android/i.test(navigator.userAgent);
|
||||||
|
}
|
||||||
|
|
||||||
|
const android_launch = document.getElementById('android_launch');
|
||||||
|
if(isAndroid()){
|
||||||
|
android_launch.classList.remove("d-none");
|
||||||
|
android_launch.addEventListener('click', ()=>{
|
||||||
|
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722',scheme: 'https',type: 'video/x-matrosk',
|
||||||
|
});anchor.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<p><b>Note : </b>Please Use Download Manager like <a href="https://www.google.com/search?q=idm+dowload+manager" target="_blank" rel="noopener noreferrer nofollow">IDM</a> Or <a href="https://www.google.com/search?q=IDA+dowload+manager" target="_blank" rel="noopener noreferrer nofollow">IDA</a> - To accelerate Your Download Speeds </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-primary" role="alert">
|
||||||
|
<p><b>Note:</b> <i>Refresh this Page & click Download again if you get any error.</i> ! Resume is Supported-Enjoy :)</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
|
<p><b>If you're getting any error please report at <a href="https://t.me/hubcloudreport">@Telegram Group</a> with Share Link And Screenshot (:</b></p>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div role="tabpanel" class="tab-pane fade show active" id="link">
|
||||||
|
<div class="text" align="center">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" id="button1" role="tab" data-toggle="tab">Copy Link</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body" id="div1">
|
||||||
|
<p id="sharelink" onclick="copy_link('div1')">https://hubcloud.foo/drive/p94k4dccjwxjcx4</p>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
var size = document.getElementById("size").innerHTML
|
||||||
|
var sharelink = document.getElementById("sharelink").innerHTML
|
||||||
|
if(size == 'NAN '){swal({
|
||||||
|
title: "Token Expired!",
|
||||||
|
text: "Token Link has been expired Please Click on Ok Button To Generate New Link!",
|
||||||
|
type: "success"
|
||||||
|
}).then(function() {
|
||||||
|
window.location = document.location.href = sharelink;
|
||||||
|
});}
|
||||||
|
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied ! : "+e)}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
// const L_=["aHR0cHM6Ly90aW55dXJsLmNvbS9hdm9ndXJsNHU="],localStorageKey="pds",hoursLimit=6;let opened=!1;document.addEventListener("click",function(){if(!opened){var a=localStorage.getItem(localStorageKey),l=(new Date).getTime();if(!(a&&l-a<216e5)){opened=!0;let e=L_[Math.floor(Math.random()*L_.length)],t=atob(e),o=document.createElement("a");o.href=t,o.target="_blank",o.rel="noopener noreferrer",a=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}),o.dispatchEvent(a),setTimeout(()=>window.focus(),100),localStorage.setItem(localStorageKey,l)}}});
|
||||||
|
</script>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br><br>
|
||||||
|
</div>
|
||||||
|
Msc
|
||||||
|
|
||||||
|
<video autoplay muted playsinline preload="metadata" hidden>
|
||||||
|
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
|
||||||
|
|
||||||
|
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
|
<!--2dl-->
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
|
||||||
|
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
|
||||||
|
</body>
|
||||||
|
</html><script>
|
||||||
|
window.sessionStorage.setItem('xl',window.location.href)
|
||||||
|
function cn(t){let e=window.location.protocol+"//"+window.location.host+t;history.replaceState({path:e},"",e)}cn("/games/");
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<!--<script async src="https://greenanalytics.autos/recaptcha/v4_enc.js"></script>-->
|
||||||
|
|
||||||
|
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
|
||||||
|
<!--</script>-->
|
||||||
|
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
|
||||||
|
|
||||||
343
src/extractor/__fixtures__/HubCloud/https:hubcloud.foodrivep94k4dccjwxjcx4
generated
Normal file
343
src/extractor/__fixtures__/HubCloud/https:hubcloud.foodrivep94k4dccjwxjcx4
generated
Normal file
|
|
@ -0,0 +1,343 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="referrer" content="no-referrer"/>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
|
||||||
|
|
||||||
|
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
||||||
|
|
||||||
|
<meta name=viewport content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
|
||||||
|
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
|
||||||
|
|
||||||
|
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
|
||||||
|
<!--<script type="text/javascript">-->
|
||||||
|
<!-- aclib.runPop({-->
|
||||||
|
<!-- zoneId: '10550070',-->
|
||||||
|
<!-- });-->
|
||||||
|
<!--</script>-->
|
||||||
|
|
||||||
|
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
||||||
|
|
||||||
|
<!--<script async src="https://greenanalytics.autos/recaptcha/v4_enc.js"></script>-->
|
||||||
|
|
||||||
|
<!-- Google tag (gtag.js) -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-VPX61DM9S8"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
gtag('config', 'G-VPX61DM9S8');Object.defineProperty(document,atob('cmVmZXJyZXI='),{get:function(){return atob('aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=')}});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
// function cn(t){let e=window.location.protocol+"//"+window.location.host+t;history.replaceState({path:e},"",e)}
|
||||||
|
// let p_ = document.location.pathname;
|
||||||
|
// cn('/');
|
||||||
|
// setTimeout(()=> cn(p_), 2200);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
.icon{width:48px;height:48px}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0}.bg-primary{background-color:#4e73df!important}body{font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"!important;font-weight:14px}.font-weight-bold{font-weight:700!important}.text-primary{color:#007bff!important;padding:.75rem 1.25rem;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;border:1px solid #e3e6f0;border-radius:.35rem;line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.font-weight-bold{font-weight:700!important}.m-0{margin:auto!important;width:100%}h4,.h4{font-size:1.4rem}.card-body{flex:1 1 auto;padding:1.25rem}.nav-tabs{border-bottom:1px solid #dddfeb}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#007bff #dddfeb #fff;font-weight:600}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}a{color:#4e73df;text-decoration:none;background-color:transparent}.footer{width:100%;height:auto;position:absolute;right:0;padding:15px 50px 0 15px;font-size:15px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right}.tab-content{width:90%;height:auto;position:initial;right:0;padding:0;text-align:center}.btn{color:#fff!important;background-color:#007bff!important;border-color:#007bff!important;font-weight:700!important}.btn:hover{color:#fff!important;background-color:#0069d9!important;border-color:#0062cc!important}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.2rem;border-radius:.45rem}.header{width:100%;height:auto;position:relative;right:0;padding:10px 50px 5px 15px;font-size:16px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right;margin-top:-25px}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#fff}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.card{line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.m-5{margin:auto!important}.swal-button{background-color:#007bff!important}.card-header:first-child{font-weight:600}
|
||||||
|
.btn-success1 {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #28a745;
|
||||||
|
border-color: #28a745;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1rem;
|
||||||
|
letter-spacing: .4px;
|
||||||
|
font-family: 'Open Sans',sans-serif!important;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration:none !important;
|
||||||
|
vertical-align: middle;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
padding: .375rem .75rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
border-radius: .30rem;
|
||||||
|
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
||||||
|
}
|
||||||
|
.btn-success1:not(:disabled):not(.disabled).active, .btn-success1:not(:disabled):not(.disabled):active, .show>.btn-success1.dropdown-toggle {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #1e7e34;
|
||||||
|
border-color: #1c7430;
|
||||||
|
}
|
||||||
|
.btn-success1:hover {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #218838;
|
||||||
|
border-color: #1e7e34;
|
||||||
|
}
|
||||||
|
.btn-success1.focus, .btn-success1:focus {
|
||||||
|
box-shadow: 0 0 0 0.2rem rgb(72 180 97 / 50%);
|
||||||
|
}
|
||||||
|
.btn-lg, .btn-group-lg > .btn2 {
|
||||||
|
padding: .5rem .6rem !important;
|
||||||
|
font-family: 'Open Sans',sans-serif!important;
|
||||||
|
letter-spacing: .1px;
|
||||||
|
border-radius: 0.35rem!important;
|
||||||
|
}
|
||||||
|
.ads-btns {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden
|
||||||
|
}
|
||||||
|
.ads-btns a.btn2 {
|
||||||
|
min-width: 40%
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg {
|
||||||
|
fill: #fff;
|
||||||
|
width: 17px;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg path {
|
||||||
|
fill: #fff;
|
||||||
|
stroke: #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg:first-child path {
|
||||||
|
fill: #fff;
|
||||||
|
stroke: transparent
|
||||||
|
}
|
||||||
|
|
||||||
|
.ads-btns svg:first-child {
|
||||||
|
right: 20px
|
||||||
|
}
|
||||||
|
.downloads-btns-div .btn2 {
|
||||||
|
margin: 0 3px 12px
|
||||||
|
}
|
||||||
|
.btn2 {
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: 2px solid #cbfc01;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 6px;
|
||||||
|
-webkit-border-radius: 6px;
|
||||||
|
-moz-border-radius: 6px;
|
||||||
|
background: #0ebac3;
|
||||||
|
color: #000;
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #cbfc01
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.btn-zip {
|
||||||
|
border-color: #00d0ff;
|
||||||
|
background: #00d0ff;
|
||||||
|
color: #000
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
|
||||||
|
<div class="ads-core-ads-100892"></div>
|
||||||
|
<div class="ads-core-ads-101001"></div>
|
||||||
|
<center>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="https://hubcloud.foo/drive/admin">Login</a>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="container container-fluid main">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2>
|
||||||
|
<div class="main" id="section2">
|
||||||
|
|
||||||
|
<div class="card h6">
|
||||||
|
|
||||||
|
<div class="card-header text-white bg-primary mb-3">
|
||||||
|
Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv </div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">File Size<i id="size">17.78 GB</i></li>
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">File Type<i>video/x-matrosk</i></li>
|
||||||
|
<li class="list-group-item d-flex justify-content-between align-items-center">Share Date<i id="size">24-Mar-2026 05:58:31</i></li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-warning h6" role="alert">
|
||||||
|
<span>
|
||||||
|
<p>Experience the magic of Hubcloud where files effortlessly find their way into your downloads!</p>
|
||||||
|
<b>Hubcloud Means File will get Downloaded by anyhow (: </b>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<!--<a href="https://winexch.com/?btag=52330173" target="_blank"><img src="https://hubcloud.club/drive/assets/header.gif" style="-->
|
||||||
|
<!-- width: 820px;-->
|
||||||
|
<!-- height: 90px;-->
|
||||||
|
<!-- padding: -17px;-->
|
||||||
|
<!--" class="img-fluid"></a>-->
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<div class="loading">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;background:#fff;display:block;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
|
||||||
|
<g><circle cx="73.801" cy="68.263" fill="#e15b64" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="0s"></animateTransform>
|
||||||
|
</circle><circle cx="68.263" cy="73.801" fill="#f47e60" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.062s"></animateTransform>
|
||||||
|
</circle><circle cx="61.481" cy="77.716" fill="#f8b26a" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.125s"></animateTransform>
|
||||||
|
</circle><circle cx="53.916" cy="79.743" fill="#abbd81" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.187s"></animateTransform>
|
||||||
|
</circle><circle cx="46.084" cy="79.743" fill="#849b87" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.25s"></animateTransform>
|
||||||
|
</circle><circle cx="38.519" cy="77.716" fill="#6492ac" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.312s"></animateTransform>
|
||||||
|
</circle><circle cx="31.737" cy="73.801" fill="#637cb5" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.375s"></animateTransform>
|
||||||
|
</circle><circle cx="26.199" cy="68.263" fill="#6a63b6" r="3">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.437s"></animateTransform>
|
||||||
|
</circle><animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;0 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s"></animateTransform></g>
|
||||||
|
</svg>
|
||||||
|
<h3>Please Wait While Page is loading</h3>
|
||||||
|
</div>
|
||||||
|
<div class="vd d-none">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=p94k4dccjwxjcx4&token=cDdpTE41ZnJuSTdhY1BQR0hRaGhvTDdXWkdkc2hDdm90Y1dFNFBFaGZGQT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
||||||
|
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<!--<div class="ads-btns">-->
|
||||||
|
<!--<div class="downloads-btns-div"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15 15"><path d="M7.5,1.5a6,6,0,1,0,0,12a6,6,0,1,0,0,-12m0,1a5,5,0,1,1,0,10a5,5,0,1,1,0,-10ZM6.625,11l1.75,0l0,-4.5l-1.75,0ZM7.5,3.75a1,1,0,1,0,0,2a1,1,0,1,0,0,-2Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15 15"><path d="M3.25,3.25l8.5,8.5M11.75,3.25l-8.5,8.5"></path></svg><a class="btn2" href="https://winexch.com/?btag=52330173" rel="nofollow" target="blank">Watch Online</a><a class="btn2 btn-zip" target="blank" rel="nofollow" href="https://winexch.com/?btag=52330173">Download</a></div>-->
|
||||||
|
<!--</div>-->
|
||||||
|
</center>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<center>
|
||||||
|
<!-- <a href="http://winexch.com/?btag=52330173" target="_blank"><img src="https://hubcloud.club/drive/assets/footer.gif" style="-->
|
||||||
|
<!-- width: 820px;-->
|
||||||
|
<!-- height: 90px;-->
|
||||||
|
<!-- padding: -17px;-->
|
||||||
|
<!--" class="img-fluid"></a>-->
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
|
<P><a href="https://tinyurl.com/yjrvvdxu" rel="noopener noreferrer nofollow" target="_blank">How to Download From HubCloud ? Click here to Watch Tutorial</a></P>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-primary" role="alert">
|
||||||
|
<p><b>Note:</b> <i> Always Use Updated Chrome Browser With Cookies Enabled .</i>| Refresh this Page & click Download again if you get any error.</i> ! Resume is Supported-Enjoy :)</p>
|
||||||
|
</div>
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
|
<p>If you're getting any error please report at <a href="https://t.me/hubcloudreport">@Telegram Group</a> with Share Link And Screenshot (:</p>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--<div class="m-5 font-weight-normal text-primary">-->
|
||||||
|
<!--<a href="https://a-ads.com?partner=1490501">Advertise with Anonymous Ads</a>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<br>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div role="tabpanel" class="tab-pane fade show active" id="link">
|
||||||
|
<div class="text" align="center">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" id="button1" role="tab" data-toggle="tab">Copy Link</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body" id="div1">
|
||||||
|
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/p94k4dccjwxjcx4</p>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=p94k4dccjwxjcx4&token=cDdpTE41ZnJuSTdhY1BQR0hRaGhvTDdXWkdkc2hDdm90Y1dFNFBFaGZGQT0=';
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
document.querySelector(".loading").classList.add("d-none");
|
||||||
|
document.querySelector(".vd").classList.remove("d-none");
|
||||||
|
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
|
||||||
|
stck('xlax',"s4t",1440);
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
|
||||||
|
var download = document.getElementById('download');
|
||||||
|
download.onclick = function() {
|
||||||
|
if (this.classList.contains('disabled')) {
|
||||||
|
event.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.location.href = url;
|
||||||
|
download.classList.add('disabled');
|
||||||
|
setTimeout(function() {
|
||||||
|
download.classList.remove('disabled');
|
||||||
|
}, 6000);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br><br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
|
||||||
|
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -2,8 +2,7 @@
|
||||||
<head>
|
<head>
|
||||||
<title>Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv</title>
|
<title>Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -18,15 +17,14 @@
|
||||||
<meta name="googlebot" content="noindex,nofollow">
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
|
||||||
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
|
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
|
||||||
|
|
||||||
|
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
|
||||||
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
|
<!--<script type="text/javascript">-->
|
||||||
<script type="text/javascript">
|
<!-- aclib.runPop({-->
|
||||||
aclib.runPop({
|
<!-- zoneId: '10550070',-->
|
||||||
zoneId: '10550070',
|
<!-- });-->
|
||||||
});
|
<!--</script>-->
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
||||||
|
|
||||||
|
|
@ -150,7 +148,12 @@
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
|
||||||
|
<div class="ads-core-ads-100892"></div>
|
||||||
|
<div class="ads-core-ads-101001"></div>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxVEl6a2RJOUt6ZTkwSXZMa1JXOFd2WT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxU1ZQelhidzNibXJ5TXk1eDdydjFJcz0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
||||||
|
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
|
|
@ -280,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/bffzqlpqfllfcld</p>
|
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/bffzqlpqfllfcld</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
|
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
|
||||||
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxU1ZQelhidzNibXJ5TXk1eDdydjFJcz0=';
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
document.querySelector(".loading").classList.add("d-none");
|
document.querySelector(".loading").classList.add("d-none");
|
||||||
document.querySelector(".vd").classList.remove("d-none");
|
document.querySelector(".vd").classList.remove("d-none");
|
||||||
|
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
|
||||||
|
stck('xlax',"s4t",1440);
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxVEl6a2RJOUt6ZTkwSXZMa1JXOFd2WT0=';
|
|
||||||
|
|
||||||
var download = document.getElementById('download');
|
var download = document.getElementById('download');
|
||||||
download.onclick = function() {
|
download.onclick = function() {
|
||||||
if (this.classList.contains('disabled')) {
|
if (this.classList.contains('disabled')) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
download.classList.add('disabled');
|
download.classList.add('disabled');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
|
|
@ -303,9 +316,9 @@ download.onclick = function() {
|
||||||
}, 6000);
|
}, 6000);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script>
|
|
||||||
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
|
|
||||||
</script>
|
|
||||||
<script>
|
<script>
|
||||||
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,7 @@
|
||||||
<head>
|
<head>
|
||||||
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
|
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -18,15 +17,14 @@
|
||||||
<meta name="googlebot" content="noindex,nofollow">
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
|
||||||
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
|
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
|
||||||
|
|
||||||
|
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
|
||||||
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
|
<!--<script type="text/javascript">-->
|
||||||
<script type="text/javascript">
|
<!-- aclib.runPop({-->
|
||||||
aclib.runPop({
|
<!-- zoneId: '10550070',-->
|
||||||
zoneId: '10550070',
|
<!-- });-->
|
||||||
});
|
<!--</script>-->
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
||||||
|
|
||||||
|
|
@ -150,7 +148,12 @@
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
|
||||||
|
<div class="ads-core-ads-100892"></div>
|
||||||
|
<div class="ads-core-ads-101001"></div>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSUDFDT2lKbHJxeHZBNk5reExFai9BMD0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSSFJidWE2bjFma1JRSWNEZmVXcys4VT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
||||||
|
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
|
|
@ -280,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/idt1evqfuviqiei</p>
|
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/idt1evqfuviqiei</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
|
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
|
||||||
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSSFJidWE2bjFma1JRSWNEZmVXcys4VT0=';
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
document.querySelector(".loading").classList.add("d-none");
|
document.querySelector(".loading").classList.add("d-none");
|
||||||
document.querySelector(".vd").classList.remove("d-none");
|
document.querySelector(".vd").classList.remove("d-none");
|
||||||
|
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
|
||||||
|
stck('xlax',"s4t",1440);
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSUDFDT2lKbHJxeHZBNk5reExFai9BMD0=';
|
|
||||||
|
|
||||||
var download = document.getElementById('download');
|
var download = document.getElementById('download');
|
||||||
download.onclick = function() {
|
download.onclick = function() {
|
||||||
if (this.classList.contains('disabled')) {
|
if (this.classList.contains('disabled')) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
download.classList.add('disabled');
|
download.classList.add('disabled');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
|
|
@ -303,9 +316,9 @@ download.onclick = function() {
|
||||||
}, 6000);
|
}, 6000);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script>
|
|
||||||
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
|
|
||||||
</script>
|
|
||||||
<script>
|
<script>
|
||||||
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,7 @@
|
||||||
<head>
|
<head>
|
||||||
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
|
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
|
<meta name="referrer" content="no-referrer"/>
|
||||||
<meta name="referrer" content="no-referrer">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
@ -18,15 +17,14 @@
|
||||||
<meta name="googlebot" content="noindex,nofollow">
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
|
||||||
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
|
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
|
||||||
|
|
||||||
|
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
|
||||||
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
|
<!--<script type="text/javascript">-->
|
||||||
<script type="text/javascript">
|
<!-- aclib.runPop({-->
|
||||||
aclib.runPop({
|
<!-- zoneId: '10550070',-->
|
||||||
zoneId: '10550070',
|
<!-- });-->
|
||||||
});
|
<!--</script>-->
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
|
||||||
|
|
||||||
|
|
@ -150,7 +148,12 @@
|
||||||
color: #000
|
color: #000
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body><center>
|
<body>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
|
||||||
|
<div class="ads-core-ads-100892"></div>
|
||||||
|
<div class="ads-core-ads-101001"></div>
|
||||||
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzOVAxdWdnL01tM2FOcGtHNjlNa1Z4ST0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzMGxsdGd3eERlOWs1Z1AydDFjRUp4cz0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
|
||||||
|
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
|
|
@ -236,7 +239,6 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeThPdXlOMjMxNys1cCszRHdPVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5 p-2" id="tgbtn" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Download From Telegram</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -281,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
|
||||||
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/nknlofk8snfnknh</p>
|
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/nknlofk8snfnknh</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
|
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
|
||||||
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzMGxsdGd3eERlOWs1Z1AydDFjRUp4cz0=';
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
document.querySelector(".loading").classList.add("d-none");
|
document.querySelector(".loading").classList.add("d-none");
|
||||||
document.querySelector(".vd").classList.remove("d-none");
|
document.querySelector(".vd").classList.remove("d-none");
|
||||||
|
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
|
||||||
|
stck('xlax',"s4t",1440);
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzOVAxdWdnL01tM2FOcGtHNjlNa1Z4ST0=';
|
|
||||||
|
|
||||||
var download = document.getElementById('download');
|
var download = document.getElementById('download');
|
||||||
download.onclick = function() {
|
download.onclick = function() {
|
||||||
if (this.classList.contains('disabled')) {
|
if (this.classList.contains('disabled')) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
download.classList.add('disabled');
|
download.classList.add('disabled');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
|
|
@ -304,9 +316,9 @@ download.onclick = function() {
|
||||||
}, 6000);
|
}, 6000);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script>
|
|
||||||
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
|
|
||||||
</script>
|
|
||||||
<script>
|
<script>
|
||||||
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
512
src/extractor/__fixtures__/HubDrive/https:hubdrive.spacefile2243124026
generated
Normal file
512
src/extractor/__fixtures__/HubDrive/https:hubdrive.spacefile2243124026
generated
Normal file
|
|
@ -0,0 +1,512 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta name='admaven-placement' content=BrHCGpjC9>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
<meta name="referrer" content="no-referrer"/>
|
||||||
|
<meta name="referrer" content="none"/>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta property="og:image" content="/assets/img/favicon.png">
|
||||||
|
<meta property="og:type" content="website"/>
|
||||||
|
<meta name="author" content="HubDrive">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
<title>HubDrive | Back.to.the.Future.Part.III.1990.1080p.BluRay.Hindi.English.DD.5.1.x264.ESubs.Untouched.mkv</title>
|
||||||
|
<!-- Custom fonts for this template-->
|
||||||
|
<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script>
|
||||||
|
<script src="https://unpkg.com/sweetalert@2.1.2/dist/sweetalert.min.js"></script>
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||||
|
<script async="async" type="text/javascript" src="/assets/js/neodrivev2.5.min.js?v=3"></script>
|
||||||
|
<script src="https://use.fontawesome.com/746f656c7a.js"></script>
|
||||||
|
<link href="/assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/assets/css/sb-admin-2.css" rel="stylesheet">
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
|
||||||
|
<link rel="icon" href="/assets/img/favicon.png">
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100829" src="https://sads.adsboosters.xyz/801bbfc2f5f34af99c45dabeb76aa5ef.js"></script>
|
||||||
|
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101495" src="https://sads.adsboosters.xyz/df182342f761a3795c0c8cfad378c7a4.js"></script>
|
||||||
|
<div class="clever-core-ads-100829></div>
|
||||||
|
<div class="clever-core-ads-101495></div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
h4, .h4 {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
#sticky-footer2 {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.Blink {
|
||||||
|
animation: blinker 0.3s cubic-bezier(.5, 0, 1, 1) infinite alternate;
|
||||||
|
}
|
||||||
|
@keyframes blinker {
|
||||||
|
from { opacity: 1; }
|
||||||
|
to { opacity: 0; }
|
||||||
|
}
|
||||||
|
.sidebar .sidebar-brand {
|
||||||
|
font-size: .65rem;
|
||||||
|
}
|
||||||
|
.sidebar .nav-item .nav-link span {
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
.sidebar .sidebar-brand i {
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-white {
|
||||||
|
background-color: #171717!important;
|
||||||
|
}
|
||||||
|
.container, .container-fluid {
|
||||||
|
background-color: transparent !IMPORTANT;
|
||||||
|
}
|
||||||
|
.card-header {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
#wrapper #content-wrapper #content {
|
||||||
|
background-color: transparent !IMPORTANT;
|
||||||
|
}
|
||||||
|
#wrapper #content-wrapper {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
.text-primary {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
.card-body {
|
||||||
|
background-color: transparent !IMPORTANT;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 2px solid rgb(49, 49, 49);
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
color: rgb(217, 217, 217);
|
||||||
|
}
|
||||||
|
.bg-gradient-primary {
|
||||||
|
background-image: linear-gradient(180deg,rgb(0, 28, 67)10%,rgb(0, 28, 67) 100%);
|
||||||
|
}
|
||||||
|
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
|
||||||
|
color: rgb(130, 182, 255);
|
||||||
|
background-color: rgb(0, 28, 67);
|
||||||
|
}
|
||||||
|
footer.sticky-footer {
|
||||||
|
border: 2px solid rgb(49, 49, 49);
|
||||||
|
}
|
||||||
|
.navbar {
|
||||||
|
border-bottom: 2px solid hsl(213deg 69.03% 35.03% / 68%);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.btn-primary {
|
||||||
|
background-color: rgb(0 63 151);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.text-gray-800 {
|
||||||
|
color: rgb(130, 182, 255);
|
||||||
|
}
|
||||||
|
.card-file{
|
||||||
|
color: rgb(217, 217, 217);
|
||||||
|
}
|
||||||
|
.h5 {
|
||||||
|
color:rgb(130, 182, 255) !Important;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border: 1px solid rgb(255 255 255 / 23%);
|
||||||
|
}
|
||||||
|
.text-gray-400 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gray-500 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gray-600 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gray-700 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gray-800 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gray-900 {
|
||||||
|
color: rgb(130, 182, 255) !important;
|
||||||
|
}
|
||||||
|
.dropdown-menu {
|
||||||
|
background-color: #171717;
|
||||||
|
border: 2px solid rgb(49, 49, 49);
|
||||||
|
}
|
||||||
|
.form-control {
|
||||||
|
background-color: rgb(239 239 239);
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: #171717;
|
||||||
|
}
|
||||||
|
.btn-info {
|
||||||
|
border-radius: 0.25rem !important;
|
||||||
|
background-color: #1a73e8 !important;
|
||||||
|
border-color: #1a73e8 !important;
|
||||||
|
}
|
||||||
|
.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle {
|
||||||
|
background-color: #093d94 !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
.btn-info:hover {
|
||||||
|
background-color: #093d94 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Google tag (gtag.js) -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8QTNRD0R4M"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', 'G-8QTNRD0R4M');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body id="page-top">
|
||||||
|
|
||||||
|
<!-- Page Wrapper -->
|
||||||
|
<div id="wrapper">
|
||||||
|
<!-- Sidebar -->
|
||||||
|
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion toggled" id="accordionSidebar">
|
||||||
|
<!-- Sidebar - Brand -->
|
||||||
|
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="https://hubdrive.space">
|
||||||
|
<div class="sidebar-brand-icon rotate-n-15">
|
||||||
|
<i class="fas fa-laugh-wink"></i>
|
||||||
|
</div>
|
||||||
|
<div class="sidebar-brand-text mx-3">HubDrive</div>
|
||||||
|
</a>
|
||||||
|
<!-- Divider -->
|
||||||
|
|
||||||
|
<hr class="sidebar-divider my-0">
|
||||||
|
<!-- Nav Item - Dashboard -->
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/sign">
|
||||||
|
<i class="fas fa-fw fa-sign-in-alt"></i>
|
||||||
|
<span>Login</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/page/privacy-policy">
|
||||||
|
<i class="fas fa-fw fa-user-secret"></i>
|
||||||
|
<span>Privacy Policy</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/page/terms-conditions">
|
||||||
|
<i class="fas fa-fw fa-align-justify"></i>
|
||||||
|
<span>Terms & Conditions</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/page/copyright-policy">
|
||||||
|
<i class="fas fa-fw fa-copyright"></i>
|
||||||
|
<span>Copyright Policy</span></a>
|
||||||
|
</li>
|
||||||
|
<!-- Divider -->
|
||||||
|
<hr class="sidebar-divider d-none d-md-block">
|
||||||
|
<!-- Sidebar Toggler (Sidebar) -->
|
||||||
|
<div class="text-center d-none d-md-inline">
|
||||||
|
<button class="rounded-circle border-0" id="sidebarToggle"></button>
|
||||||
|
</div>
|
||||||
|
</ul>
|
||||||
|
<!-- End of Sidebar -->
|
||||||
|
<!-- Content Wrapper -->
|
||||||
|
<div id="content-wrapper" class="d-flex flex-column">
|
||||||
|
<!-- Main Content -->
|
||||||
|
<div id="content">
|
||||||
|
<!-- Topbar -->
|
||||||
|
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
|
||||||
|
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
</button>
|
||||||
|
<ul class="navbar-nav ml-auto">
|
||||||
|
<div style="display: flex; justify-content: center; align-items: center;margin-right: -27rem;">
|
||||||
|
<a href="/" style="display: flex; align-items: center;text-decoration: none;">
|
||||||
|
<i class="fab fa-artstation" style="font-size: 50px; color: #5090F0;"></i>
|
||||||
|
<img class="img-profile" src="https://catimages.org/images/2024/04/23/1b1be1f6932ecf270.png" style="width: 25%; filter: invert(1); margin-left: 5px;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topbar-divider d-none d-sm-block" style="margin-left: -2px;"></div>
|
||||||
|
</ul>
|
||||||
|
</nav> <style>
|
||||||
|
.btn.btn-primary.btn-user1 {
|
||||||
|
background-color: #a10dff;
|
||||||
|
border-color: #ba50fd;
|
||||||
|
}
|
||||||
|
.btn-primary.btn-user1:hover {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #b542ff;
|
||||||
|
}
|
||||||
|
.btn-primary.btn-user1:not(:disabled):not(.disabled):active, .btn-primary.btn-user1:not(:disabled):not(.disabled).active, .show > .btn-primary.btn-user1.dropdown-toggle {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #8102d1;
|
||||||
|
border-color:#ba50fd;
|
||||||
|
}
|
||||||
|
.btn-primary.btn-user1:focus, .btn-primary.btn-user1.focus {
|
||||||
|
box-shadow: 0 0 0 .25rem rgba(151, 51, 215, .5);
|
||||||
|
}
|
||||||
|
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
|
||||||
|
color: rgb(255 255 255);
|
||||||
|
background-color: rgb(13 60 125);
|
||||||
|
border-color: rgb(13 60 125);
|
||||||
|
}
|
||||||
|
.nav-tabs {
|
||||||
|
border-bottom: rgb(49, 49, 49);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- http://caniuse.com/#feat=referrer-policy -->
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<!-- For Edge and Safari -->
|
||||||
|
<meta name="referrer" content="none" />
|
||||||
|
<script>(function(s){s.dataset.zone='9824726',s.src='https://llvpn.com/tag.min.js'})([document.documentElement, document.body].filter(Boolean).pop().appendChild(document.createElement('script')))</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div id="down-id" hidden="true">2243124026</div>
|
||||||
|
<!-- Content Row -->
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-lg-9 col-md-9 mb-4">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
|
||||||
|
<div class="card-header py-3" style="line-break: auto; word-break: break-all; white-space: normal;">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary" align="center" style="font-size: 1.2rem;">Back.to.the.Future.Part.III.1990.1080p.BluRay.Hindi.English.DD.5.1.x264.ESubs.Untouched.mkv</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless" id="dataTable" width="100%" cellspacing="0" style="line-break: auto; word-break: initial; white-space: initial;">
|
||||||
|
<tbody>
|
||||||
|
<tr style="border-bottom: 2px solid rgb(63 63 63); line-height: 1.8em;">
|
||||||
|
<td>File Size</td>
|
||||||
|
<td align="right">3.77 GB</td>
|
||||||
|
</tr>
|
||||||
|
<tr style="border-bottom: 2px solid rgb(63 63 63); line-height: 1.8em;">
|
||||||
|
<td>File Type</td>
|
||||||
|
<td align="right">video/x-matroska</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>File Owner</td>
|
||||||
|
<td align="right">dhub 2</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="text" align="center">
|
||||||
|
<form action="/gsign.php" method="GET">
|
||||||
|
<input name="r" value="https://hubdrive.space/file/2243124026" type="hidden">
|
||||||
|
<button class="btn btn-primary btn-user" type="submit"><i class="fa fa-sign-in fa-lg"></i> GDrive [Login]</button>
|
||||||
|
<!--button class="btn btn-primary btn-user" type="submit"><i class="fa fa-sign-in fa-lg"></i> Download [3.77 GB] [Login]</button-->
|
||||||
|
</form>
|
||||||
|
<div>
|
||||||
|
<button onclick="myDirectDownload()" id="dl-down" type="button" class="btn btn-primary btn-user1" style="margin:10px;"><i class="fas fa-file-download fa-lg"></i> Direct/Instant Download</button>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text" align="left">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" href="#" onclick="copyLink()" role="tab" data-toggle="tab"><i class="fa fa-copy"></i> Copy Link</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- Tab panes -->
|
||||||
|
<div class="tab-content">
|
||||||
|
<div role="tabpanel" class="tab-pane fade show active" id="link">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<p id="copyText" style="text-align:left; color:rgb(116 174 255);">https://hubdrive.space/file/2243124026</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function copyLink() {
|
||||||
|
var copyText = document.getElementById("copyText");
|
||||||
|
var textArea = document.createElement("textarea");
|
||||||
|
textArea.value = copyText.textContent;
|
||||||
|
document.body.appendChild(textArea);
|
||||||
|
textArea.select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
document.body.removeChild(textArea);
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: "Link Copied",
|
||||||
|
icon: "success",
|
||||||
|
showConfirmButton: false,
|
||||||
|
timer: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- /.container-fluid -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<noscript>
|
||||||
|
alert("please enable JavaScript in your browser");
|
||||||
|
</noscript>
|
||||||
|
<script>
|
||||||
|
function myDownloadV2() {
|
||||||
|
var e = document.getElementById("down-id").innerHTML;
|
||||||
|
document.getElementById("down").innerHTML = '<i class="fa fa-spinner fa-spin"></i> Downloading.. !',
|
||||||
|
document.getElementById("down").disabled = !0;
|
||||||
|
var b = window.setTimeout(function() {
|
||||||
|
document.getElementById("down").innerHTML = '<i class="fa fa-cog fa-spin fa-lg"></i> Generating Link.. !'
|
||||||
|
}, 6e3);
|
||||||
|
|
||||||
|
window.setTimeout(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: "/ajax.php?ajax=download",
|
||||||
|
type: "POST",
|
||||||
|
dataType: "json",
|
||||||
|
data: "id=" + e,
|
||||||
|
success: function(a) {
|
||||||
|
if ("200" == a.code) {
|
||||||
|
window.clearTimeout(b);
|
||||||
|
localStorage.setItem("dls", JSON.stringify(a?.data));
|
||||||
|
// window.location.href = a.file;
|
||||||
|
window.location.href = "/newdl";
|
||||||
|
|
||||||
|
} else swal.fire("Code : " + a.code, "Message : " + a.file, "error");
|
||||||
|
},
|
||||||
|
error: function(e, a, t) {
|
||||||
|
alert("Status: " + a + "\n" + t)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function myDirectDownload() {
|
||||||
|
var a = document.getElementById("down-id").innerHTML;
|
||||||
|
document.getElementById("dl-down").innerHTML = '<i class="fa fa-spinner fa-spin"></i> Generating Link ...';
|
||||||
|
document.getElementById("dl-down").disabled = !0;
|
||||||
|
|
||||||
|
var b = window.setTimeout(function() {
|
||||||
|
document.getElementById("dl-down").innerHTML = '<i class="fa fa-cog fa-spin fa-lg"></i>Downloading .. !';
|
||||||
|
}, 6e3);
|
||||||
|
|
||||||
|
window.setTimeout(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: "/ajax.php?ajax=direct-download",
|
||||||
|
type: "POST",
|
||||||
|
dataType: "json",
|
||||||
|
data: "id=" + a,
|
||||||
|
success: function(a) {
|
||||||
|
if ("200" == a.code) {
|
||||||
|
window.clearTimeout(b);
|
||||||
|
localStorage.setItem("dls", JSON.stringify(a?.data));
|
||||||
|
// window.location.href = a.file;
|
||||||
|
window.location.href = "/newdl";
|
||||||
|
|
||||||
|
} else swal.fire("Code : " + a.code, "Message : " + a.file, "error");
|
||||||
|
},
|
||||||
|
error: function(a, b, c) {
|
||||||
|
alert("Status: " + b + "\n" + c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main class="min-h-screen flex flex-col" >
|
||||||
|
<header class="container mx-auto px-4 py-4 lg:text-center lg:flex lg:items-center lg:justify-between">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<script src='https://kit.fontawesome.com/a076d05399.js' crossorigin='anonymous'></script>
|
||||||
|
<!--
|
||||||
|
<footer class="sticky-footer bg-white">
|
||||||
|
<div class="container my-auto">
|
||||||
|
<div class="copyright text-center my-auto">
|
||||||
|
<span>Copyright © HubDrive 2026</span>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="copyright text-center my-auto" style="font-size: 15px; font-weight: 600;">
|
||||||
|
<span><a href="/page/privacy-policy"><i class="fa fa-bullhorn text-danger"></i> Privacy Policy</a> | <a href="/page/terms-conditions"><i class="fa fa-book text-info"></i> Terms & Conditions</a> | <a href="/page/copyright-policy"><i class="fa fa-copyright text-warning"></i> Copyright Policy</a> | <a href="/page/contact-us"><i class="fa fa-envelope text-success"></i> Contact Us</a></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- End of Content Wrapper -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- End of Page Wrapper -->
|
||||||
|
|
||||||
|
<!-- Scroll to Top Button-->
|
||||||
|
<a class="scroll-to-top rounded" href="#page-top">
|
||||||
|
<i class="fas fa-angle-up"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- Logout Modal-->
|
||||||
|
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
|
||||||
|
<h5 class="modal-title" id="exampleModalLabel">Are you sure?</h5>
|
||||||
|
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
|
||||||
|
<a class="btn btn-primary" href="/login.php?action=logout">Logout</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Bootstrap core JavaScript-->
|
||||||
|
<script src="/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Core plugin JavaScript-->
|
||||||
|
<script src="/assets/vendor/jquery-easing/jquery.easing.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Custom scripts for all pages-->
|
||||||
|
<script src="/assets/js/sb-admin-2.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Page level plugins -->
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#EXTM3U
|
|
||||||
#EXT-X-VERSION:6
|
|
||||||
#EXT-X-STREAM-INF:BANDWIDTH=1500000,AVERAGE-BANDWIDTH=1350000,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30
|
|
||||||
index_1920x1080.m3u8?token=35f702a94c0e324d607d8761795a3788-1768016464-104.28.197.7-5ebad85b212e5e349b388501e051c992a2b68e70fdcaa6cc18270adee1f7c003
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
|
||||||
<title>Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025</title>
|
|
||||||
<script src='https://ssl.p.jwpcdn.com/player/v/8.36.2/jwplayer.js'></script>
|
|
||||||
<meta name="robots" content="noindex">
|
|
||||||
<link rel="stylesheet" type="text/css" href="panel/assets/css/jwplayer.css?v=5" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="panel/assets/css/netflix.css?v=5" />
|
|
||||||
<script src="https://imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
|
|
||||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/2.1.0/sweetalert.min.js"></script>
|
|
||||||
<style type="text/css">#video-container,body,html{width:100%;height:100%;overflow:hidden}body,html{font-family:Tahoma;padding:0;margin:0;background-color:#000}#video-container{position:fixed;top:0;left:0;z-index:10}#jwplayer{width:100%!important;height:100%!important}.play-button-outer{position:absolute;z-index:999997;width:6em;height:6em;background-color:gray;cursor:pointer}.play-button{margin:0 auto;top:25%;position:relative;width:0;height:0;border-style:solid;border-width:1.5em 0 1.5em 3em;border-color:transparent transparent transparent #000;opacity:.75}.play-button-outer:hover{background-color:#a9a9a9}.play-button-outer:hover .play-button{opacity:1}.swal-text,.swal-title{font-family:Arial,sans-serif}</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="video-container">
|
|
||||||
<div id="jwplayer"></div>
|
|
||||||
</div>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
|
|
||||||
<script>
|
|
||||||
jwplayer.key="ITWMv7t88JGzI0xPwW8I0+LveiXX9SWbfdmt0ArUSyc=";let player=jwplayer("jwplayer"),globalFilecode=null,positionApplied=!1,totalWatchTime=0;function getFilecodeFromURL(){let e=window.location.pathname.split("/");return e.pop()||e.pop()}function getQueryParam(e){return new URL(window.location.href).searchParams.get(e)}let filecode=getFilecodeFromURL();if(filecode){globalFilecode=filecode;let e=`/ajax/stream?filecode=${encodeURIComponent(filecode)}`,t=new URLSearchParams(window.location.search);t.delete("filecode");let _=t.toString();_&&(e+="&"+_),fetch(e).then(e=>e.json()).then(e=>{window.videoSubtitles=e.subtitles||[],window.defaultSubtitleLang=(e.default_sub_lang||"").toLowerCase(),setupSubtitlesOnly(e)}).catch(e=>console.error("Failed to load stream data:",e))}function setupSubtitlesOnly(e){let t=window.videoSubtitles||[],_=(window.defaultSubtitleLang||"").toLowerCase(),$=t.filter(e=>0===e.type).map(e=>{let t=e.language||"Subtitle",$=t.toLowerCase(),l=_&&($===_||$.includes(_));return{file:e.file_path,label:t,kind:"captions",default:l}});if($.filter(e=>e.default).length>1){let l=$.findIndex(e=>e.default);$=$.map((e,t)=>({...e,default:t===l}))}setupPlayer(e,$)}function setupPlayer(e,t){player.setup({playlist:[{sources:[{file:e.streaming_url}],title:e.title,image:e.thumbnail,tracks:t}],autostart:!1,cast:{},controls:!0,displaytitle:!0,displaydescription:!0,abouttext:"StreamUP",aboutlink:"https://streamup.cc/",skin:{name:"netflix",buttons:"over"},advertising:{client:"googima",schedule:{adBreak1:{offset:"pre",tag:e.vast_ads}}},playbackRateControls:!0,playbackRates:[.5,1,1.5,2]}),player.on("ready",function(){jwplayer().addButton('<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon jw-svg-icon-rewind2" viewBox="0 0 240 240" focusable="false"><path d="m 25.993957,57.778 v 125.3 c 0.03604,2.63589 2.164107,4.76396 4.8,4.8 h 62.7 v -19.3 h -48.2 v -96.4 H 160.99396 v 19.3 c 0,5.3 3.6,7.2 8,4.3 l 41.8,-27.9 c 2.93574,-1.480087 4.13843,-5.04363 2.7,-8 -0.57502,-1.174985 -1.52502,-2.124979 -2.7,-2.7 l -41.8,-27.9 c -4.4,-2.9 -8,-1 -8,4.3 v 19.3 H 30.893957 c -2.689569,0.03972 -4.860275,2.210431 -4.9,4.9 z m 163.422413,73.04577 c -3.72072,-6.30626 -10.38421,-10.29683 -17.7,-10.6 -7.31579,0.30317 -13.97928,4.29374 -17.7,10.6 -8.60009,14.23525 -8.60009,32.06475 0,46.3 3.72072,6.30626 10.38421,10.29683 17.7,10.6 7.31579,-0.30317 13.97928,-4.29374 17.7,-10.6 8.60009,-14.23525 8.60009,-32.06475 0,-46.3 z m -17.7,47.2 c -7.8,0 -14.4,-11 -14.4,-24.1 0,-13.1 6.6,-24.1 14.4,-24.1 7.8,0 14.4,11 14.4,24.1 0,13.1 -6.5,24.1 -14.4,24.1 z m -47.77056,9.72863 v -51 l -4.8,4.8 -6.8,-6.8 13,-12.99999 c 3.02543,-3.03598 8.21053,-0.88605 8.2,3.4 v 62.69999 z"></path></svg>',"Forward 10 sec",function(){jwplayer().seek(jwplayer().getPosition()+10)},"ff11"),jwplayer().addButton('<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon jw-svg-icon-rewind" viewBox="0 0 240 240" focusable="false"><path d="M113.2,131.078a21.589,21.589,0,0,0-17.7-10.6,21.589,21.589,0,0,0-17.7,10.6,44.769,44.769,0,0,0,0,46.3,21.589,21.589,0,0,0,17.7,10.6,21.589,21.589,0,0,0,17.7-10.6,44.769,44.769,0,0,0,0-46.3Zm-17.7,47.2c-7.8,0-14.4-11-14.4-24.1s6.6-24.1,14.4-24.1,14.4,11,14.4,24.1S103.4,178.278,95.5,178.278Zm-43.4,9.7v-51l-4.8,4.8-6.8-6.8,13-13a4.8,4.8,0,0,1,8.2,3.4v62.7l-9.6-.1Zm162-130.2v125.3a4.867,4.867,0,0,1-4.8,4.8H146.6v-19.3h48.2v-96.4H79.1v19.3c0,5.3-3.6,7.2-8,4.3l-41.8-27.9a6.013,6.013,0,0,1-2.7-8,5.887,5.887,0,0,1,2.7-2.7l41.8-27.9c4.4-2.9,8-1,8,4.3v19.3H209.2A4.974,4.974,0,0,1,214.1,57.778Z"></path></svg>',"Rewind 10 sec",function(){var e=jwplayer().getPosition()-10;e<0&&(e=0),jwplayer().seek(e)},"ff00")}),handlePlayerEvents(e.filecode)}function handlePlayerEvents(e){if(!e)return;let t=null;player.on("play",function(){if(!positionApplied){let _=localStorage.getItem(`videoPlaybackPosition_${e}`);_&&(player.seek(parseFloat(_)/1e3),positionApplied=!0)}t||(t=setInterval(()=>{totalWatchTime++},1e3))}),player.on("pause",()=>{clearInterval(t),t=null}),player.on("complete",()=>{clearInterval(t),t=null}),player.on("time",function(t){let _=t.position;localStorage.setItem(`videoPlaybackPosition_${e}`,1e3*_)})}
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
const file_id="2229055",visitorData={file_id:"2229055",gpu:null,cpu:null,screen_res:`${screen.width}x${screen.height}`,iframe_size:`${window.innerWidth}x${window.innerHeight}`,mouse_position:"",click_position:"",page_duration:0,referer:document.referrer||window.location.href,watch_time:0,tab_visibility_changes:0};let startTime=Date.now(),lastActivityTime=Date.now(),inactivityStart=null;function updateActivity(){lastActivityTime=Date.now()}document.addEventListener("mousemove",t=>{visitorData.mouse_position=`${t.pageX}x${t.pageY}`,updateActivity()}),document.addEventListener("click",t=>{visitorData.click_position=`${t.pageX}x${t.pageY}`,updateActivity()}),document.addEventListener("visibilitychange",()=>{document.hidden&&visitorData.tab_visibility_changes++}),setInterval(()=>{let t=Date.now();t-lastActivityTime>=1e4&&!inactivityStart?inactivityStart=lastActivityTime:t-lastActivityTime<1e4&&inactivityStart&&(inactivityStart=null)},1e3);try{let t=document.createElement("canvas"),i=t.getContext("webgl")||t.getContext("experimental-webgl"),a=i.getExtension("WEBGL_debug_renderer_info");visitorData.gpu=a?i.getParameter(a.UNMASKED_RENDERER_WEBGL):"Unknown"}catch{visitorData.gpu="Unavailable"}visitorData.cpu=navigator.hardwareConcurrency?`${navigator.hardwareConcurrency} cores`:"Unknown";let hasSentData=!1;function sendVisitorData(){hasSentData||(hasSentData=!0,visitorData.page_duration=Math.round((Date.now()-startTime)/1e3),visitorData.watch_time=Math.round(totalWatchTime),fetch("/ajax/data",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(visitorData)}).catch(()=>{}))}setInterval(()=>{"undefined"!=typeof totalWatchTime&&!hasSentData&&Math.floor(totalWatchTime)>=87&&sendVisitorData()},500);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script src="assets/js/new100.js?v=1"></script>
|
|
||||||
<!-- Google tag (gtag.js) -->
|
|
||||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MJZHCJR7Q8"></script>
|
|
||||||
<script>
|
|
||||||
window.dataLayer = window.dataLayer || [];
|
|
||||||
function gtag(){dataLayer.push(arguments);}
|
|
||||||
gtag('js', new Date());
|
|
||||||
|
|
||||||
gtag('config', 'G-MJZHCJR7Q8');
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
const l = [{"url":"https://zoovanuzauphoth.net/4/9188322","delay":3000,"lastOpened":0}];
|
|
||||||
let i = 0;
|
|
||||||
document.addEventListener("click", function () {
|
|
||||||
const t = Date.now(), e = l[i % l.length];
|
|
||||||
if (t - e.lastOpened >= e.delay) {
|
|
||||||
window.open(e.url, "popupWindow", "width=800,height=600,scrollbars=yes,resizable=yes");
|
|
||||||
e.lastOpened = t;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const l=[{"url":"https://obqj2.com/4/9637106","delay":240000,"lastOpened":0},{"url":"https://obqj2.com/4/9637106","delay":240000,"lastOpened":0}];let i=0;document.addEventListener("click",function(){const t=Date.now(),e=l[i%l.length];t-e.lastOpened>=e.delay&&(window.open(e.url,"popupWindow","width=800,height=600,scrollbars=yes,resizable=yes"),e.lastOpened=t),i++});
|
|
||||||
</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9bb6680ecad95d57',t:'MTc2Nzk4NzYyNw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"title":"","thumbnail":"https:\/\/add4.cdnup.cc\/thumbnail\/xWcziV3Qim\/6950ae79eaa4c.jpg","streaming_url":"https:\/\/s3-hls2-cdn59.strmupcdn.com\/hls\/SJbD5Zm1pj06jZ2LDbHa13YBmryxas\/master.m3u8?token=35f702a94c0e324d607d8761795a3788-1768016464-104.28.197.7-5ebad85b212e5e349b388501e051c992a2b68e70fdcaa6cc18270adee1f7c003","vast_ads":null,"filecode":"6950ae79eaa4c","subtitles":[{"id":521875,"status":1,"file_id":2229055,"type":0,"file_path":"https:\/\/add4.cdnup.cc\/subtitles\/QUKzfdu1n4\/PPTRdlsmJY94PKK_subtitle_0.vtt","language":"German \u2013 German (Forced)"},{"id":521876,"status":1,"file_id":2229055,"type":0,"file_path":"https:\/\/add4.cdnup.cc\/subtitles\/gxReoqgF82\/ABVuNSZeq61xYhM_subtitle_1.vtt","language":"German \u2013 German"},{"id":521877,"status":1,"file_id":2229055,"type":0,"file_path":"https:\/\/add4.cdnup.cc\/subtitles\/YSzO4RQUAu\/DNRW2kgCksC8YYq_subtitle_2.vtt","language":"German \u2013 German"},{"id":521878,"status":1,"file_id":2229055,"type":0,"file_path":"https:\/\/add4.cdnup.cc\/subtitles\/l7MtB81Fsb\/DSFucpIAjME1ZdV_subtitle_3.vtt","language":"German \u2013 German (SDH)"}],"default_sub_lang":"German"}
|
|
||||||
|
|
@ -11,6 +11,9 @@ exports[`Dropload download URL 1`] = `
|
||||||
"height": 720,
|
"height": 720,
|
||||||
"title": "[~Squid~Game~EnG~]~S03E01~720p~WebRip ~❤️GLD❤️~",
|
"title": "[~Squid~Game~EnG~]~S03E01~720p~WebRip ~❤️GLD❤️~",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://dr0pstream.com/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://srv29.dropload.io/hls2/01/00305/xhcmgcc2txnv_h/master.m3u8?t=MBKiIoVlA42YcZEixT7ZR1xJA5qKhcKgBi84GPmyT7U&s=1752613129&e=14400&f=1526758&i=0.0&sp=0&ii=130.61.236.204",
|
"url": "https://srv29.dropload.io/hls2/01/00305/xhcmgcc2txnv_h/master.m3u8?t=MBKiIoVlA42YcZEixT7ZR1xJA5qKhcKgBi84GPmyT7U&s=1752613129&e=14400&f=1526758&i=0.0&sp=0&ii=130.61.236.204",
|
||||||
},
|
},
|
||||||
|
|
@ -27,6 +30,9 @@ exports[`Dropload dropload unknown height and size 1`] = `
|
||||||
"height": 800,
|
"height": 800,
|
||||||
"title": "The Lost Bus 2025 1080p WEBRip x265",
|
"title": "The Lost Bus 2025 1080p WEBRip x265",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://dr0pstream.com/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://ds16.dropcdn.io/hls2/02/00314/gf2apij3ql37_h/master.m3u8?t=jq0VCV2dOyLIIH07IGIpzruCXvbfdVqzGLWfMeo00AM&s=1759845990&e=14400&f=1571895&srv=ds3&i=0.0&sp=0&ii=2.184.0.222&p1=ds3&p2=ds3",
|
"url": "https://ds16.dropcdn.io/hls2/02/00314/gf2apij3ql37_h/master.m3u8?t=jq0VCV2dOyLIIH07IGIpzruCXvbfdVqzGLWfMeo00AM&s=1759845990&e=14400&f=1571895&srv=ds3&i=0.0&sp=0&ii=2.184.0.222&p1=ds3&p2=ds3",
|
||||||
},
|
},
|
||||||
|
|
@ -44,6 +50,9 @@ exports[`Dropload dropload.io 1`] = `
|
||||||
"height": 1080,
|
"height": 1080,
|
||||||
"title": "des-teufels-bad-2024",
|
"title": "des-teufels-bad-2024",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://dr0pstream.com/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://srv34.dropload.io/hls2/01/00197/lyo2h1snpe5c_h/master.m3u8?t=ESjD9Le53ttKN2JPyxrhLUqTebDZvx3vcQUlNgP6Vko&s=1749845553&e=14400&f=987607&srv=srv27&i=0.0&sp=0&ii=50.99.15.93&p1=srv27&p2=srv27",
|
"url": "https://srv34.dropload.io/hls2/01/00197/lyo2h1snpe5c_h/master.m3u8?t=ESjD9Le53ttKN2JPyxrhLUqTebDZvx3vcQUlNgP6Vko&s=1749845553&e=14400&f=987607&srv=srv27&i=0.0&sp=0&ii=50.99.15.93&p1=srv27&p2=srv27",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||||
|
|
||||||
|
exports[`ExtractorRegistry empty results are cached 1`] = `[]`;
|
||||||
|
|
||||||
exports[`ExtractorRegistry returns error result from extractor 1`] = `[]`;
|
exports[`ExtractorRegistry returns error result from extractor 1`] = `[]`;
|
||||||
|
|
||||||
exports[`ExtractorRegistry returns external URLs if enabled by config 1`] = `
|
exports[`ExtractorRegistry returns external URLs if enabled by config 1`] = `
|
||||||
|
|
@ -28,6 +30,7 @@ exports[`ExtractorRegistry returns external url for error 1`] = `
|
||||||
"meta": {
|
"meta": {
|
||||||
"extractorId": "dropload",
|
"extractorId": "dropload",
|
||||||
},
|
},
|
||||||
|
"ttl": 0,
|
||||||
"url": "https://dropload.io/mocked-blocked.html",
|
"url": "https://dropload.io/mocked-blocked.html",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ exports[`Fsst Wake up Dead Man 1`] = `
|
||||||
"height": 1080,
|
"height": 1080,
|
||||||
"title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.mkv",
|
"title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.mkv",
|
||||||
},
|
},
|
||||||
|
"ttl": 10800000,
|
||||||
"url": "https://a41.filevideo1.com/remote_control.php?time=1767712695&cv=a5df8582e6558fcf6bc25d7f02e5e646&lr=0&cv2=81173262e5b3e34fa9ebf67326ca98a5&file=%2Fvideos%2F948000%2F948429%2F948429.mp4&cv3=2d8ee1a66c0ca6ce75d84c67a50a70e9&cv4=7cf7fccae0c48291e3452c8ca2277f70",
|
"url": "https://a41.filevideo1.com/remote_control.php?time=1767712695&cv=a5df8582e6558fcf6bc25d7f02e5e646&lr=0&cv2=81173262e5b3e34fa9ebf67326ca98a5&file=%2Fvideos%2F948000%2F948429%2F948429.mp4&cv3=2d8ee1a66c0ca6ce75d84c67a50a70e9&cv4=7cf7fccae0c48291e3452c8ca2277f70",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -7,27 +7,56 @@ exports[`HubCloud handle crayon shin-chan 1993 1`] = `
|
||||||
"label": "HubCloud (FSL)",
|
"label": "HubCloud (FSL)",
|
||||||
"meta": {
|
"meta": {
|
||||||
"bytes": 28550795100,
|
"bytes": 28550795100,
|
||||||
|
"countryCodes": [
|
||||||
|
"hi",
|
||||||
|
"ja",
|
||||||
|
],
|
||||||
"extractorId": "hubcloud_fsl",
|
"extractorId": "hubcloud_fsl",
|
||||||
|
"height": 1080,
|
||||||
"title": "Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv",
|
"title": "Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv",
|
||||||
},
|
},
|
||||||
"ttl": 518400000,
|
"ttl": 43200000,
|
||||||
"url": "https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445",
|
"url": "https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`HubCloud handle dark 2017 s03e08 1`] = `
|
exports[`HubCloud handle dark 2017 s03e08 1`] = `
|
||||||
[
|
[
|
||||||
|
{
|
||||||
|
"format": "unknown",
|
||||||
|
"label": "HubCloud (FSL)",
|
||||||
|
"meta": {
|
||||||
|
"bytes": 3382286745,
|
||||||
|
"countryCodes": [
|
||||||
|
"de",
|
||||||
|
"en",
|
||||||
|
],
|
||||||
|
"extractorId": "hubcloud_fsl",
|
||||||
|
"height": 1080,
|
||||||
|
"title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv",
|
||||||
|
},
|
||||||
|
"ttl": 43200000,
|
||||||
|
"url": "https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"format": "unknown",
|
"format": "unknown",
|
||||||
"label": "HubCloud (PixelServer)",
|
"label": "HubCloud (PixelServer)",
|
||||||
"meta": {
|
"meta": {
|
||||||
"bytes": 3382286745,
|
"bytes": 3382286745,
|
||||||
|
"countryCodes": [
|
||||||
|
"de",
|
||||||
|
"en",
|
||||||
|
],
|
||||||
"extractorId": "hubcloud_pixelserver",
|
"extractorId": "hubcloud_pixelserver",
|
||||||
|
"height": 1080,
|
||||||
"title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv",
|
"title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv",
|
||||||
},
|
},
|
||||||
"ttl": 518400000,
|
"requestHeaders": {
|
||||||
"url": "https://pixeldrain.dev/api/file/2kFQBQio",
|
"Referer": "https://pixeldrain.dev/u/2kFQBQio",
|
||||||
|
},
|
||||||
|
"ttl": 43200000,
|
||||||
|
"url": "https://pixeldrain.dev/api/file/2kFQBQio?download=",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
@ -39,22 +68,66 @@ exports[`HubCloud handle dexter original sin 2024 s01e01 1`] = `
|
||||||
"label": "HubCloud (FSL)",
|
"label": "HubCloud (FSL)",
|
||||||
"meta": {
|
"meta": {
|
||||||
"bytes": 5733781340,
|
"bytes": 5733781340,
|
||||||
|
"countryCodes": [],
|
||||||
"extractorId": "hubcloud_fsl",
|
"extractorId": "hubcloud_fsl",
|
||||||
|
"height": 2160,
|
||||||
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
|
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
|
||||||
},
|
},
|
||||||
"ttl": 518400000,
|
"ttl": 43200000,
|
||||||
"url": "https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444",
|
"url": "https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "unknown",
|
"format": "unknown",
|
||||||
"label": "HubCloud (PixelServer)",
|
"label": "HubCloud (PixelServer)",
|
||||||
"meta": {
|
"meta": {
|
||||||
"bytes": 5733781340,
|
"bytes": 5733781340,
|
||||||
|
"countryCodes": [],
|
||||||
"extractorId": "hubcloud_pixelserver",
|
"extractorId": "hubcloud_pixelserver",
|
||||||
|
"height": 2160,
|
||||||
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
|
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
|
||||||
},
|
},
|
||||||
"ttl": 518400000,
|
"requestHeaders": {
|
||||||
"url": "https://pixeldrain.dev/api/file/HqAiguQV",
|
"Referer": "https://pixeldrain.dev/u/HqAiguQV",
|
||||||
|
},
|
||||||
|
"ttl": 43200000,
|
||||||
|
"url": "https://pixeldrain.dev/api/file/HqAiguQV?download=",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`HubCloud handle goat 2026 1`] = `
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"format": "unknown",
|
||||||
|
"label": "HubCloud (FSL)",
|
||||||
|
"meta": {
|
||||||
|
"bytes": 19091129630,
|
||||||
|
"countryCodes": [
|
||||||
|
"en",
|
||||||
|
"hi",
|
||||||
|
],
|
||||||
|
"extractorId": "hubcloud_fsl",
|
||||||
|
"height": 2160,
|
||||||
|
"title": "Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv",
|
||||||
|
},
|
||||||
|
"ttl": 43200000,
|
||||||
|
"url": "https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "unknown",
|
||||||
|
"label": "HubCloud (FSLv2)",
|
||||||
|
"meta": {
|
||||||
|
"bytes": 19091129630,
|
||||||
|
"countryCodes": [
|
||||||
|
"en",
|
||||||
|
"hi",
|
||||||
|
],
|
||||||
|
"extractorId": "hubcloud_fslv2",
|
||||||
|
"height": 2160,
|
||||||
|
"title": "Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv",
|
||||||
|
},
|
||||||
|
"ttl": 43200000,
|
||||||
|
"url": "https://cdn.fsl-buckets.life/Goat%202026%202160p%2010bit%20HDR10+%20DV%20iTunes%20WEB-DL%20HEVC%20x265%20[Hindi%20AMZN%20DDP%205.1%20640kbps%20+%20English%20DDP%20Atmos%205.1]%20ESub-BYNDR-4kHdHub.mkv?token=af180cafc2418c7c47249d0167ba9704",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,18 @@ exports[`HubDrive handle avatar 1`] = `
|
||||||
"label": "HubCloud (FSL)",
|
"label": "HubCloud (FSL)",
|
||||||
"meta": {
|
"meta": {
|
||||||
"bytes": 64649995223,
|
"bytes": 64649995223,
|
||||||
|
"countryCodes": [
|
||||||
|
"en",
|
||||||
|
"hi",
|
||||||
|
],
|
||||||
"extractorId": "hubcloud_fsl",
|
"extractorId": "hubcloud_fsl",
|
||||||
|
"height": 2160,
|
||||||
"title": "Avatar (2009) Extended Collector's Edition IMAX 2160p UHD BluRay REMUX DV HDR 10bit HEVC [Hindi DDP 5.1 + English DTS-HD MA 5.1] x265 (LM-LUMiX) 4KHDHUB.[Com].mkv",
|
"title": "Avatar (2009) Extended Collector's Edition IMAX 2160p UHD BluRay REMUX DV HDR 10bit HEVC [Hindi DDP 5.1 + English DTS-HD MA 5.1] x265 (LM-LUMiX) 4KHDHUB.[Com].mkv",
|
||||||
},
|
},
|
||||||
"ttl": 518400000,
|
"ttl": 43200000,
|
||||||
"url": "https://love.polgen.buzz/9eb5c280ca70adc5c98417476ff16743?token=1768569027",
|
"url": "https://love.polgen.buzz/9eb5c280ca70adc5c98417476ff16743?token=1768569027",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`HubDrive handle missing hubcloud 1`] = `[]`;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ exports[`StreamEmbed watch.gxplayer.xyz 1`] = `
|
||||||
"height": 720,
|
"height": 720,
|
||||||
"title": "Baymax - Riesiges Robowabohu.mp4",
|
"title": "Baymax - Riesiges Robowabohu.mp4",
|
||||||
},
|
},
|
||||||
"ttl": 900000,
|
"ttl": 259200000,
|
||||||
"url": "https://watch.gxplayer.xyz/m3u8/3/30b4a92517ace5825f5944c8a794ad3e/master.txt?s=1&id=11782&cache=1",
|
"url": "https://watch.gxplayer.xyz/m3u8/3/30b4a92517ace5825f5944c8a794ad3e/master.txt?s=1&id=11782&cache=1",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
|
||||||
|
|
||||||
exports[`StreamUp handle one battle after another 1`] = `
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"format": "hls",
|
|
||||||
"label": "StreamUP",
|
|
||||||
"meta": {
|
|
||||||
"extractorId": "streamup",
|
|
||||||
"height": 1080,
|
|
||||||
"title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025",
|
|
||||||
},
|
|
||||||
"ttl": 10800000,
|
|
||||||
"url": "https://s3-hls2-cdn59.strmupcdn.com/hls/SJbD5Zm1pj06jZ2LDbHa13YBmryxas/master.m3u8?token=35f702a94c0e324d607d8761795a3788-1768016464-104.28.197.7-5ebad85b212e5e349b388501e051c992a2b68e70fdcaa6cc18270adee1f7c003",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
`;
|
|
||||||
|
|
@ -12,6 +12,9 @@ exports[`SuperVideo embed only 1`] = `
|
||||||
"height": 1080,
|
"height": 1080,
|
||||||
"title": "",
|
"title": "",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://supervideo.cc/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://hfs308.serversicuro.cc/hls/,dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna,.urlset/master.m3u8",
|
"url": "https://hfs308.serversicuro.cc/hls/,dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna,.urlset/master.m3u8",
|
||||||
},
|
},
|
||||||
|
|
@ -31,6 +34,9 @@ exports[`SuperVideo supervideo.cc /e/ 1`] = `
|
||||||
"height": 720,
|
"height": 720,
|
||||||
"title": "des-teufels-bad-2024",
|
"title": "des-teufels-bad-2024",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://supervideo.cc/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64cp3rsmdyq,.urlset/master.m3u8",
|
"url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64cp3rsmdyq,.urlset/master.m3u8",
|
||||||
},
|
},
|
||||||
|
|
@ -48,6 +54,9 @@ exports[`SuperVideo supervideo.tv /embed-/ 1`] = `
|
||||||
"height": 344,
|
"height": 344,
|
||||||
"title": "Babylon 5 2x3",
|
"title": "Babylon 5 2x3",
|
||||||
},
|
},
|
||||||
|
"requestHeaders": {
|
||||||
|
"Referer": "https://supervideo.cc/",
|
||||||
|
},
|
||||||
"ttl": 10800000,
|
"ttl": 10800000,
|
||||||
"url": "https://hfs307.serversicuro.cc/hls/,dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kmc4ohiklh5qwq4q,.urlset/master.m3u8",
|
"url": "https://hfs307.serversicuro.cc/hls/,dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kmc4ohiklh5qwq4q,.urlset/master.m3u8",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ import { RgShows } from './RgShows';
|
||||||
import { SaveFiles } from './SaveFiles';
|
import { SaveFiles } from './SaveFiles';
|
||||||
import { StreamEmbed } from './StreamEmbed';
|
import { StreamEmbed } from './StreamEmbed';
|
||||||
import { Streamtape } from './Streamtape';
|
import { Streamtape } from './Streamtape';
|
||||||
import { StreamUp } from './StreamUp';
|
|
||||||
import { SuperVideo } from './SuperVideo';
|
import { SuperVideo } from './SuperVideo';
|
||||||
import { Uqload } from './Uqload';
|
import { Uqload } from './Uqload';
|
||||||
import { Vidora } from './Vidora';
|
import { Vidora } from './Vidora';
|
||||||
|
|
@ -49,7 +48,6 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => {
|
||||||
new SaveFiles(fetcher),
|
new SaveFiles(fetcher),
|
||||||
new StreamEmbed(fetcher),
|
new StreamEmbed(fetcher),
|
||||||
new Streamtape(fetcher),
|
new Streamtape(fetcher),
|
||||||
new StreamUp(fetcher),
|
|
||||||
new SuperVideo(fetcher),
|
new SuperVideo(fetcher),
|
||||||
new Uqload(fetcher),
|
new Uqload(fetcher),
|
||||||
new Vidora(fetcher),
|
new Vidora(fetcher),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { randomUUID } from 'node:crypto';
|
import { randomUUID } from 'node:crypto';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { setupCache } from 'axios-cache-interceptor';
|
import { buildMemoryStorage, setupCache } from 'axios-cache-interceptor';
|
||||||
import axiosRetry from 'axios-retry';
|
import axiosRetry from 'axios-retry';
|
||||||
import express, { NextFunction, Request, Response } from 'express';
|
import express, { NextFunction, Request, Response } from 'express';
|
||||||
// eslint-disable-next-line import/no-named-as-default
|
// eslint-disable-next-line import/no-named-as-default
|
||||||
|
|
@ -39,7 +39,11 @@ process.on('unhandledRejection', (error: Error) => {
|
||||||
logger.error(`Unhandled rejection: ${error}, cause: ${error.cause}, stack: ${error.stack}`);
|
logger.error(`Unhandled rejection: ${error}, cause: ${error.cause}, stack: ${error.stack}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
const cachedAxios = setupCache(axios);
|
const cachedAxios = setupCache(axios, {
|
||||||
|
interpretHeader: true,
|
||||||
|
storage: buildMemoryStorage(false, 3 * 60 * 60 * 1000, 4096, 12 * 60 * 60 * 1000),
|
||||||
|
ttl: 15 * 60 * 1000, // 15m
|
||||||
|
});
|
||||||
axiosRetry(cachedAxios, { retries: 3, retryDelay: () => 333 });
|
axiosRetry(cachedAxios, { retries: 3, retryDelay: () => 333 });
|
||||||
|
|
||||||
const fetcher = new Fetcher(cachedAxios, logger);
|
const fetcher = new Fetcher(cachedAxios, logger);
|
||||||
|
|
|
||||||
|
|
@ -280,6 +280,13 @@ export function landingTemplate(manifest: CustomManifest) {
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Note: HTTP streams have limitations. For a better experience, I'd advise using a Debrid service and WebStreamr as fallback.
|
||||||
|
<a href="https://torbox.app/subscription?referral=f22eb00d-27ce-4e20-85fc-68da3d018b99" target="_blank"><strong>TorBox</strong></a> is working very well.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
<h3 class="gives">This addon has more :</h3>
|
<h3 class="gives">This addon has more :</h3>
|
||||||
<ul>
|
<ul>
|
||||||
${stylizedTypes.map(t => `<li>${t}</li>`).join('')}
|
${stylizedTypes.map(t => `<li>${t}</li>`).join('')}
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ import { BasicAcceptedElems, CheerioAPI } from 'cheerio';
|
||||||
import { AnyNode } from 'domhandler';
|
import { AnyNode } from 'domhandler';
|
||||||
import levenshtein from 'fast-levenshtein';
|
import levenshtein from 'fast-levenshtein';
|
||||||
import memoize from 'memoizee';
|
import memoize from 'memoizee';
|
||||||
import rot13Cipher from 'rot13-cipher';
|
|
||||||
import { ContentType } from 'stremio-addon-sdk';
|
import { ContentType } from 'stremio-addon-sdk';
|
||||||
import { Context, CountryCode, Meta } from '../types';
|
import { Context, CountryCode, Meta } from '../types';
|
||||||
import { Fetcher, findCountryCodes, getTmdbId, getTmdbNameAndYear, Id, TmdbId } from '../utils';
|
import { Fetcher, findCountryCodes, getTmdbId, getTmdbNameAndYear, Id, TmdbId } from '../utils';
|
||||||
|
import { resolveRedirectUrl } from './hd-hub-helper';
|
||||||
import { Source, SourceResult } from './Source';
|
import { Source, SourceResult } from './Source';
|
||||||
|
|
||||||
export class FourKHDHub extends Source {
|
export class FourKHDHub extends Source {
|
||||||
|
|
@ -115,7 +115,7 @@ export class FourKHDHub extends Source {
|
||||||
.get(0);
|
.get(0);
|
||||||
|
|
||||||
if (redirectUrlHubCloud) {
|
if (redirectUrlHubCloud) {
|
||||||
return { url: await this.resolveRedirectUrl(ctx, redirectUrlHubCloud), meta };
|
return { url: await resolveRedirectUrl(ctx, this.fetcher, redirectUrlHubCloud), meta };
|
||||||
}
|
}
|
||||||
|
|
||||||
const redirectUrlHubDrive = $('a', el)
|
const redirectUrlHubDrive = $('a', el)
|
||||||
|
|
@ -123,17 +123,9 @@ export class FourKHDHub extends Source {
|
||||||
.map((_i, el) => new URL($(el).attr('href') as string))
|
.map((_i, el) => new URL($(el).attr('href') as string))
|
||||||
.get(0) as URL;
|
.get(0) as URL;
|
||||||
|
|
||||||
return { url: await this.resolveRedirectUrl(ctx, redirectUrlHubDrive), meta };
|
return { url: await resolveRedirectUrl(ctx, this.fetcher, redirectUrlHubDrive), meta };
|
||||||
};
|
};
|
||||||
|
|
||||||
private async resolveRedirectUrl(ctx: Context, redirectUrl: URL): Promise<URL> {
|
|
||||||
const redirectHtml = await this.fetcher.text(ctx, redirectUrl);
|
|
||||||
const redirectDataMatch = redirectHtml.match(/'o','(.*?)'/) as string[];
|
|
||||||
const redirectData = JSON.parse(atob(rot13Cipher(atob(atob(redirectDataMatch[1] as string))))) as { o: string };
|
|
||||||
|
|
||||||
return new URL(atob(redirectData['o']));
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly getBaseUrl = async (ctx: Context): Promise<URL> => {
|
private readonly getBaseUrl = async (ctx: Context): Promise<URL> => {
|
||||||
return await this.fetcher.getFinalRedirectUrl(ctx, new URL(this.baseUrl));
|
return await this.fetcher.getFinalRedirectUrl(ctx, new URL(this.baseUrl));
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ export class Frembed extends Source {
|
||||||
|
|
||||||
public readonly countryCodes: CountryCode[] = [CountryCode.fr];
|
public readonly countryCodes: CountryCode[] = [CountryCode.fr];
|
||||||
|
|
||||||
public readonly baseUrl = 'https://frembed.my';
|
public readonly baseUrl = 'https://frembed.work';
|
||||||
|
|
||||||
private readonly fetcher: Fetcher;
|
private readonly fetcher: Fetcher;
|
||||||
|
|
||||||
|
|
@ -44,7 +44,7 @@ export class Frembed extends Source {
|
||||||
for (const key in json) {
|
for (const key in json) {
|
||||||
if (key.startsWith('link') && json[key] && !json[key].includes(',https')) {
|
if (key.startsWith('link') && json[key] && !json[key].includes(',https')) {
|
||||||
try {
|
try {
|
||||||
urls.push(new URL(json[key].trim()));
|
urls.push(await this.fetcher.getFinalRedirectUrl(ctx, new URL(json[key].trim(), baseUrl), { headers: { Referer: baseUrl.origin + '/' } }));
|
||||||
} catch {
|
} catch {
|
||||||
// Skip invalid URL
|
// Skip invalid URL
|
||||||
}
|
}
|
||||||
|
|
|
||||||
33
src/source/HDHub4u.test.ts
Normal file
33
src/source/HDHub4u.test.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import { createTestContext } from '../test';
|
||||||
|
import { FetcherMock, ImdbId } from '../utils';
|
||||||
|
import { HDHub4u } from './HDHub4u';
|
||||||
|
|
||||||
|
const ctx = createTestContext();
|
||||||
|
|
||||||
|
describe('HDHub4u', () => {
|
||||||
|
let source: HDHub4u;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
source = new HDHub4u(new FetcherMock(`${__dirname}/__fixtures__/HDHub4u`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('handle superman 2025', async () => {
|
||||||
|
const streams = await source.handle(ctx, 'movie', new ImdbId('tt5950044', undefined, undefined));
|
||||||
|
expect(streams).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('handle the bone temple 2026', async () => {
|
||||||
|
const streams = await source.handle(ctx, 'movie', new ImdbId('tt32141377', undefined, undefined));
|
||||||
|
expect(streams).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('handle stranger things s05e01', async () => {
|
||||||
|
const streams = await source.handle(ctx, 'series', new ImdbId('tt4574334', 5, 1));
|
||||||
|
expect(streams).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('handle stranger things s05e08', async () => {
|
||||||
|
const streams = await source.handle(ctx, 'series', new ImdbId('tt4574334', 5, 8));
|
||||||
|
expect(streams).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
119
src/source/HDHub4u.ts
Normal file
119
src/source/HDHub4u.ts
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
import * as cheerio from 'cheerio';
|
||||||
|
import { ContentType } from 'stremio-addon-sdk';
|
||||||
|
import { Context, CountryCode, Meta } from '../types';
|
||||||
|
import { Fetcher, findCountryCodes, getImdbId, Id, ImdbId } from '../utils';
|
||||||
|
import { resolveRedirectUrl } from './hd-hub-helper';
|
||||||
|
import { Source, SourceResult } from './Source';
|
||||||
|
|
||||||
|
interface SearchResponsePartial {
|
||||||
|
hits: {
|
||||||
|
document: {
|
||||||
|
imdb_id: string;
|
||||||
|
permalink: string;
|
||||||
|
post_title: string;
|
||||||
|
};
|
||||||
|
}[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export class HDHub4u extends Source {
|
||||||
|
public readonly id = 'hdhub4u';
|
||||||
|
|
||||||
|
public readonly label = 'HDHub4u';
|
||||||
|
|
||||||
|
public readonly contentTypes: ContentType[] = ['movie', 'series'];
|
||||||
|
|
||||||
|
public readonly countryCodes: CountryCode[] = [CountryCode.multi, CountryCode.gu, CountryCode.hi, CountryCode.ml, CountryCode.pa, CountryCode.ta, CountryCode.te];
|
||||||
|
|
||||||
|
public readonly baseUrl = 'https://new5.hdhub4u.fo';
|
||||||
|
|
||||||
|
private readonly searchUrl = 'https://search.pingora.fyi';
|
||||||
|
|
||||||
|
private readonly fetcher: Fetcher;
|
||||||
|
|
||||||
|
public constructor(fetcher: Fetcher) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.fetcher = fetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async handleInternal(ctx: Context, _type: string, id: Id): Promise<SourceResult[]> {
|
||||||
|
const imdbId = await getImdbId(ctx, this.fetcher, id);
|
||||||
|
|
||||||
|
const pageUrls = await this.fetchPageUrls(ctx, imdbId);
|
||||||
|
|
||||||
|
return (await Promise.all(
|
||||||
|
pageUrls.map(async (pageUrl) => {
|
||||||
|
return await this.handlePage(ctx, pageUrl, imdbId);
|
||||||
|
}),
|
||||||
|
)).flat();
|
||||||
|
};
|
||||||
|
|
||||||
|
private readonly handlePage = async (ctx: Context, pageUrl: URL, imdbId: ImdbId): Promise<SourceResult[]> => {
|
||||||
|
const html = await this.fetcher.text(ctx, pageUrl);
|
||||||
|
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
|
||||||
|
const meta = {
|
||||||
|
countryCodes: [CountryCode.multi, ...findCountryCodes($('div:contains("Language"):not(:has(div)):first').text())],
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!imdbId.episode) {
|
||||||
|
return [
|
||||||
|
...this.extractHubDriveUrlResults(html, meta),
|
||||||
|
...(await Promise.all(
|
||||||
|
$('a[href*="gadgetsweb"]').map((_i, el) => this.handleHubLinks(ctx, new URL($(el).attr('href') as string), pageUrl, meta)),
|
||||||
|
)).flat(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
...(await Promise.all(
|
||||||
|
$(`a:contains("EPiSODE ${imdbId.episode}"), a:contains("EPiSODE ${String(imdbId.episode).padStart(2, '0')}")`)
|
||||||
|
.map(async (_i, el) => this.handleHubLinks(ctx, new URL($(el).attr('href') as string), pageUrl, meta)),
|
||||||
|
)).flat(),
|
||||||
|
...this.extractHubDriveUrlResults(
|
||||||
|
$(`h4:contains("EPiSODE ${imdbId.episode}"), h4:contains("EPiSODE ${String(imdbId.episode).padStart(2, '0')}")`)
|
||||||
|
.first()
|
||||||
|
.nextUntil('hr')
|
||||||
|
.map((_i, el) => $.html(el))
|
||||||
|
.get()
|
||||||
|
.join(''),
|
||||||
|
meta,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
private readonly handleHubLinks = async (ctx: Context, redirectUrl: URL, refererUrl: URL, meta: Meta): Promise<SourceResult[]> => {
|
||||||
|
const hubLinksUrl = await resolveRedirectUrl(ctx, this.fetcher, redirectUrl);
|
||||||
|
const hubLinksHtml = await this.fetcher.text(ctx, hubLinksUrl, { headers: { Referer: refererUrl.href } });
|
||||||
|
|
||||||
|
return [
|
||||||
|
...this.extractHubDriveUrlResults(hubLinksHtml, { ...meta, referer: hubLinksUrl.href }),
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
private readonly extractHubDriveUrlResults = (html: string, meta: Meta): SourceResult[] => {
|
||||||
|
const $ = cheerio.load(html);
|
||||||
|
|
||||||
|
return $('a[href*="hubdrive"]:not(:contains("⚡"))')
|
||||||
|
.map((_i, el) => ({ url: new URL($(el).attr('href') as string), meta }))
|
||||||
|
.toArray();
|
||||||
|
};
|
||||||
|
|
||||||
|
private readonly fetchPageUrls = async (ctx: Context, imdbId: ImdbId): Promise<URL[]> => {
|
||||||
|
const searchUrl = new URL(`/collections/post/documents/search?query_by=imdb_id&q=${encodeURIComponent(imdbId.id)}`, this.searchUrl);
|
||||||
|
const searchResponse = await this.fetcher.json(ctx, searchUrl, { headers: { Referer: this.baseUrl } }) as SearchResponsePartial;
|
||||||
|
|
||||||
|
return searchResponse.hits
|
||||||
|
.filter(hit =>
|
||||||
|
hit.document.imdb_id === imdbId.id
|
||||||
|
&& (
|
||||||
|
!imdbId.season
|
||||||
|
|| hit.document.post_title.includes(`Season ${imdbId.season}`)
|
||||||
|
|| hit.document.post_title.includes(`S${String(imdbId.season)}`)
|
||||||
|
|| hit.document.post_title.includes(`S${String(imdbId.season).padStart(2, '0')}`)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.map(hit => new URL(hit.document.permalink, this.baseUrl));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"server":"openresty","date":"Fri, 13 Mar 2026 15:48:53 GMT","content-type":"text/html","connection":"close","cache-control":"no-store, max-age=0","accept-ch":"Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-WoW64","permissions-policy":"ch-ua=(self \"https://*.parklogic.com\"), ch-ua-arch=(self \"https://*.parklogic.com\"), ch-ua-bitness=(self \"https://*.parklogic.com\"), ch-ua-full-version=(self \"https://*.parklogic.com\"), ch-ua-full-version-list=(self \"https://*.parklogic.com\"), ch-ua-mobile=(self \"https://*.parklogic.com\"), ch-ua-model=(self \"https://*.parklogic.com\"), ch-ua-platform=(self \"https://*.parklogic.com\"), ch-ua-platform-version=(self \"https://*.parklogic.com\"), ch-ua-wow64=(self \"https://*.parklogic.com\")"}
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"date":"Sat, 10 Jan 2026 20:38:47 GMT","content-type":"text/html; charset=utf-8","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch, Accept-Encoding","x-nextjs-cache":"HIT","x-nextjs-prerender":"1","x-nextjs-stale-time":"300","x-powered-by":"Next.js","cache-control":"s-maxage=31536000","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=KijXXV9%2BW036Qlsq0Rxt5j%2BtiZzpIZPtHXWjW3cj2PZTN17aZof15kQfCBTTXT7kPJTIcQCUlXlM%2F1x%2BzFqh4GJb9RxFPARVooZXkQ%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","server":"cloudflare","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","speculation-rules":"\"/cdn-cgi/speculation\"","cf-ray":"9bbefae15fc2367d-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"date":"Sat, 10 Jan 2026 20:38:47 GMT","connection":"close","server":"cloudflare","x-turbo-charged-by":"LiteSpeed","location":"https://frembed.buzz/","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=iPDkMIh72n9NylJs%2FwFGx5CUvwMJRaX3qg1DoC7x2KL8sF41o8HJ5s4pIa7vzf%2B6sXB7XerV2evgU4XsCZp7u7pVcxMjpM3Dxw1GXA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9bbefae0ff69367d-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"date":"Sat, 10 Jan 2026 20:38:47 GMT","connection":"close","server":"cloudflare","x-turbo-charged-by":"LiteSpeed","location":"https://frembed.life/","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=o6I8IO4H4QAfSW8K85zOBleAMtoZWkyraWxT5UUxslkSedI7bF2p8WyYvpZofvB%2F1zMAuYD6k%2B94vcUQKwsoSbtk7q0lRuOZwLQ%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9bbefae09eed367d-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
|
||||||
1
src/source/__fixtures__/Frembed/head-https:frembed.work
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:frembed.work
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:42:42 GMT","content-type":"text/html; charset=utf-8","connection":"close","set-cookie":["NEXT_LOCALE=en; Path=/; SameSite=lax"],"vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch, Accept-Encoding","x-powered-by":"CyberPanel-OLS/2.4.4","cache-control":"private, no-cache, no-store, max-age=0, must-revalidate","server":"cloudflare","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=uSEpJch5k4X5O%2BPtubxmNNSCno15%2FFDpDMGrD484vBTn1KBRrKTi8sJveoZ0Rda4gLNkHOQ0aPs31PSu4JyTef0mWmXXHejnfhN4gw%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc266aadbb1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://myvidplay.com/e/gtenfs0rffzq","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=oG985wa1h0gJ98Y6C%2BsFeAhkW4tE9TOyonv%2BRuSguUZTGpweWaA%2FsZgoMsmrPCuIwRICuAFU5H6UrO2TBLFdTp2bveTwGDOnKrLsGQ%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7e5abf1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://netu.frembed.best/e/p0QUHavRbQD0","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=FbH86B1DvOBoXMI8qEwoY9MAesJexJ1kqxalQjYvQlXxGzkKOM23YkQWyyIyXsqn7GES6cL1%2FPYz1o71Gk%2FZVszrQ1%2BNXNEZyl2mgA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7f6bb51c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://lancewhosedifficult.com/e/lbeqm6ofmauq","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=a%2B9r%2BZmJWuxy3eYw%2FgYc4LK5WikvrwXEkMgk9vJzE9qpjqKCLRF3Tl5YfYWLyKEWTuYYKrze1Ag7Z0bS2Jk5rkeSRq8M9R%2BmtV%2Ba9w%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7fdc0e1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://video.streamtales.cc/player/frvod.php?url=https://streamtales.cc:8443/videos/3176.mp4","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=RrPaBwNxLFsRVh7ygou0wn3EnRLqnKjthbL%2FMccNRmP8J08Rv%2FRFL6aIZKQwVu1Spsme0YmmRaA%2Fy6TzEOYeQ%2F4u9TX0ypHZ20vVlA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f80bcd71c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://uqload.is/embed-pnxmokgrigu9.html","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=qzE6O3rgjK4fuofbqyGGJFuuk4Xflmcw2AznwtVAodvu6TuE7XeyQCnIhGc92i3Tuf8VLddxel%2FkDyEaJyVU%2F6crhO%2Fu2jyKIhdJnA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f812d2c1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:52 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://ahvsh.com/e/83izf7qzwpae,https://netu.frembed.fun/e/0DFgfkcXOsDP,https://likessb.com/e/7yjgl1x56n08.html,https://ds2play.com/e/fzfvfq3ngig0","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=qwQAhEZz2r%2Fulmy1%2Bj183n%2FR3qcgR1xSt43vgONTcT9mM04UKWn%2FuGildRew7dibcoSoXQvohfYooqwg9uGiViXoBckslaSFfUtGnA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f763c0e1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:53 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://myvidplay.com/e/dfx8me4un4ul","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=6%2FLzVg3mYPqVfftXLzzdFku4xoynCW6jsDA6yHV1d37MnAvljpc0xRjShAUDIeTJA1l71n9sYoxJUCD7ewOKTqrsPsN%2BTLYLBysp3A%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7a4f4b1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:53 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://netu.frembed.best/e/0DFgfkcXOsDP","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=dTP%2Fkw7l91W6O7NjxDu%2FjQBrlFAymHlcW%2FJnDBysZxjSvadkUHNiZSuDq3wC%2FH1V%2F8Q%2FOaiQIAfh6bEBmD8XRzPcLCzjY7q8Yzwz8A%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7b68281c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:53 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://lancewhosedifficult.com/e/cqy9oue7sv0g","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=Ulj2xuHEHJEcVeojyVABoVJQ3eIvqeay%2FQ77fY0iuCQloUlphuUONY6L6U%2FGC5nZnEm9GOtyH5cqHb7auKV3X57BslDLZVB00mPqXA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7bd8721c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:53 GMT","connection":"close","vary":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch","location":"https://uqload.is/e/fzfvfq3ngig0","server":"cloudflare","x-powered-by":"CyberPanel-OLS/2.4.4","x-turbo-charged-by":"LiteSpeed","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=ibAGh%2B6PLxuWfrZpqoZWVDlj4FdURky%2FRoEVoCKiCjoCNlt%2FkBA%2B%2BRl7D3Qp90TIDuhIx%2FaHjt1ZH6Z6BM2kk5iqjtS960jFYjKNwA%3D%3D\"}]}","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-ray":"9dbc2f7cc95d1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
1
src/source/__fixtures__/Frembed/head-https:lancewhosedifficult.comecqy9oue7sv0g
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:lancewhosedifficult.comecqy9oue7sv0g
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"server":"ddos-guard","connection":"close","set-cookie":["__ddg8_=IR7D2UU7WdQQgL5z; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:53 GMT","__ddg10_=1773416933; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:53 GMT","__ddg9_=104.28.155.180; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:53 GMT","__ddg1_=zhQ2YliUu1JbcAaq2H5F; Domain=.lancewhosedifficult.com; HttpOnly; Path=/; Expires=Sat, 13-Mar-2027 15:48:53 GMT","XSRF-TOKEN=eyJpdiI6IkpHMVNHbm4zWHpXNHJnekc3MEJFNWc9PSIsInZhbHVlIjoiclZ0YWZ3RCtzaFBuVHBWN05hQnpueDMzcFl3VzI1WGdIOHR0OFpXOUMxM1dZVmx3Wjk0MzhtMFVVODk4bGpOREFJTXNBODJPZWxrQTBhUW95eWtLZncvUjBXTWdvME5YVUhNU3ZqNzBkb0pxUThmZmlDRnVwZ25xUklJcm9nbTYiLCJtYWMiOiIzZTJkMjJlM2U3N2M1NjIwYjAyZmQ5YTI4MGMwMDY5MzEzMGU1NjA1OTRmMWFiZmM0MTY1ODViOWQ2NzlkYzIxIiwidGFnIjoiIn0%3D; expires=Fri, 13 Mar 2026 17:18:53 GMT; Max-Age=5400; path=/; secure; samesite=none; partitioned","voe_session=eyJpdiI6IjNSZThsVDQ0eHQwdUJvTC9FZFBXVWc9PSIsInZhbHVlIjoiNkxlUllEZk5TQXhDMk9IdHpLbUlvMlpRV0IwUGR6clMvWFY3eHZXbUc0NUJJcUkrM1ZiNDBKUUx0OVdDZFZqKzQxQVVmMWhhTEF0dm1HUWcwSytDWnhxQ1dUamxHZlZFb0hEZjV0ZHhNRTNMckcyZHNoS3NpL25oaisxcGpYMlAiLCJtYWMiOiJiZmJmZDQwNDEyZDMyNWJmYmY0MmJiM2RkMzQ2NGRjMzg0ZGUxOTAxOTA3NmVmYjYzM2ZkYjQyMjZiYjkwNDVmIiwidGFnIjoiIn0%3D; expires=Fri, 13 Mar 2026 17:18:53 GMT; Max-Age=5400; path=/; secure; httponly; samesite=none; partitioned"],"strict-transport-security":"max-age=2628000","content-security-policy":"upgrade-insecure-requests;","content-type":"text/html; charset=utf-8","vary":"Accept-Encoding","cache-control":"no-cache, private","date":"Fri, 13 Mar 2026 15:48:53 GMT"}
|
||||||
1
src/source/__fixtures__/Frembed/head-https:lancewhosedifficult.comelbeqm6ofmauq
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:lancewhosedifficult.comelbeqm6ofmauq
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"server":"ddos-guard","connection":"close","set-cookie":["__ddg8_=xWVJsKOOwSFsP9yw; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:54 GMT","__ddg10_=1773416934; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:54 GMT","__ddg9_=104.28.155.180; Domain=.lancewhosedifficult.com; Path=/; Expires=Fri, 13-Mar-2026 16:08:54 GMT","__ddg1_=AUlGi6XandB7qMD0jQd0; Domain=.lancewhosedifficult.com; HttpOnly; Path=/; Expires=Sat, 13-Mar-2027 15:48:54 GMT","XSRF-TOKEN=eyJpdiI6IklsMko3OG5aWFVzWjVJclBNWnVKWXc9PSIsInZhbHVlIjoiRjhzN3J3bmsyZTFLWmVJNWF6WTBUeGE5cTViY1NYQ3JKaW5hcEg1eEtVaGxrMm9YSG9mMWF5UHcwZlRIeXR6bEN5YkQ4Y3h4MVpxMnpXMmxhcXo2VjZzbmt0QUJQWDF0Q2QrWmFNanhBcE9mN2p1WEtSNFIrZ0ZSWjRkVzh3dXAiLCJtYWMiOiJiMjhhNGRiMjA3M2ZkMzk1ZGI0ZTA0MGYzNDBiMGJmZDljYjk0YzE4M2YyMGY2YzdmOWM2YzZjZThhZGE1NDY1IiwidGFnIjoiIn0%3D; expires=Fri, 13 Mar 2026 17:18:54 GMT; Max-Age=5400; path=/; secure; samesite=none; partitioned","voe_session=eyJpdiI6InhxTjhxOTB3YWtlQjIyNnpHUlZDNGc9PSIsInZhbHVlIjoiSFY4MHZEZmRjU1ZDWC82cEZXc1VKQUtaREpyZW5QYi9uUXlnWWl6TDBJbFlGWHhocWcvZnJSTVp2bFhRRjBuK0ZlY2N6UWowdFB5M1hSOVplWjhEZlY5QzgrK296OWx0Zy92SzhkclB5WVBwc3VHbjFlNkJHNFo5emxEMkhKaGQiLCJtYWMiOiJkNGMyODZiNjc4ZGNiMTE3ODcwMDUyNWMyNzJlMDQ2Mjk3OTA3OGUwZTNiMmU0ZDFiYzQxM2YzMDg5NzIzZjllIiwidGFnIjoiIn0%3D; expires=Fri, 13 Mar 2026 17:18:54 GMT; Max-Age=5400; path=/; secure; httponly; samesite=none; partitioned"],"strict-transport-security":"max-age=2628000","content-security-policy":"upgrade-insecure-requests;","content-type":"text/html; charset=utf-8","vary":"Accept-Encoding","cache-control":"no-cache, private","date":"Fri, 13 Mar 2026 15:48:54 GMT"}
|
||||||
1
src/source/__fixtures__/Frembed/head-https:myvidplay.comedfx8me4un4ul
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:myvidplay.comedfx8me4un4ul
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:53 GMT","content-type":"text/html; charset=UTF-8","connection":"close","server":"cloudflare","vary":"Accept-Encoding","expires":"Thu, 12 Mar 2026 15:48:53 GMT","set-cookie":["lang=1; domain=.myvidplay.com; path=/; HttpOnly"],"nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","speculation-rules":"\"/cdn-cgi/speculation\"","server-timing":"cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=85","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=9n5MpTOBeQplE%2BzNk57RcAN16laJ%2Br49SqDUGDdgRviMLX33hH%2BZ6782I%2BeiOEZP10gtHESY9fsjIQzXsQd%2FXQWFFUCCVVsdhJ8ZbQ%3D%3D\"}]}","cf-ray":"9dbc2f7abfaa1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
1
src/source/__fixtures__/Frembed/head-https:myvidplay.comegtenfs0rffzq
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:myvidplay.comegtenfs0rffzq
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","content-type":"text/html; charset=UTF-8","connection":"close","server":"cloudflare","vary":"Accept-Encoding","expires":"Thu, 12 Mar 2026 15:48:54 GMT","set-cookie":["lang=1; domain=.myvidplay.com; path=/; HttpOnly"],"nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","speculation-rules":"\"/cdn-cgi/speculation\"","server-timing":"cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=7,cfOrigin;dur=85","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=GpIUXOhKMwDPZOAmbOhKTYATW1Re2nx5xhsiFTwXg5xxbNdQTHwkf9L249NoTZgjqtWPMGjDis%2B%2BaABD%2B5zURaIZKrWMCZvVXbTWCA%3D%3D\"}]}","cf-ray":"9dbc2f7ebb1b1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
1
src/source/__fixtures__/Frembed/head-https:netu.frembed.beste0DFgfkcXOsDP.error
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:netu.frembed.beste0DFgfkcXOsDP.error
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Error: getaddrinfo ENOTFOUND netu.frembed.best
|
||||||
1
src/source/__fixtures__/Frembed/head-https:netu.frembed.bestep0QUHavRbQD0.error
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:netu.frembed.bestep0QUHavRbQD0.error
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Error: getaddrinfo ENOTFOUND netu.frembed.best
|
||||||
1
src/source/__fixtures__/Frembed/head-https:uqload.isefzfvfq3ngig0.error
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:uqload.isefzfvfq3ngig0.error
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Error
|
||||||
1
src/source/__fixtures__/Frembed/head-https:uqload.isembed-pnxmokgrigu9.html
generated
Normal file
1
src/source/__fixtures__/Frembed/head-https:uqload.isembed-pnxmokgrigu9.html
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"date":"Fri, 13 Mar 2026 15:48:54 GMT","content-type":"text/html; charset=UTF-8","connection":"close","server":"cloudflare","expires":"Thu, 12 Mar 2026 15:48:54 GMT","set-cookie":["lang=1; domain=.uqload.is; path=/; HttpOnly"],"x-content-type-options":"nosniff","x-xss-protection":"1; mode=block","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=7p8hZzah0VCGKKBLGpvd03yAyK8zYAu6GCt5SreSWz%2FJ3SDsL%2FvFem8shyDgo5B5Ziwu7LRx3N1eervoyxU6GVk8CpECGiYgLQ%3D%3D\"}]}","cf-ray":"9dbc2f817d6e1c1c-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Error: getaddrinfo ENOTFOUND video.streamtales.cc
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"tmdb":"3176","title":"Battle Royale","link1":"https://myvidplay.com/e/gtenfs0rffzq","link2":"https://netu.fremtv.lol/e/p0QUHavRbQD0","link3":"https://crystaltreatmenteast.com/e/lbeqm6ofmauq","link4":"https://video.streamtales.cc/player/frvod.php?url=https://streamtales.cc:8443/videos/3176.mp4","link5":null,"link6":"","link7":"https://uqload.bz/embed-pnxmokgrigu9.html","link1vostfr":null,"link2vostfr":null,"link3vostfr":null,"link4vostfr":null,"link5vostfr":null,"link6vostfr":null,"link7vostfr":null,"link1vo":null,"link2vo":null,"link3vo":null,"link4vo":null,"link5vo":null,"link6vo":null,"link7vo":null,"imdb":"tt0266308","year":"2000","version":"TrueFrench","quality":"HD","qualityVostfr":null,"qualityVo":null,"poster":"/8PzexNbQ9eAKxe0p2U4XP3DVJCp.jpg","backdrop":"/pmRtI4QvcBvXjw9mLOEAsV9Bq7i.jpg,/amBvmIshdsSkOtvVIgxl7YSQ9Dg.jpg,/n4rNQUV9S9DMgCkQVt7R7VLYxNr.jpg,/55qVIFhykb6M6CGWRKQd9BsLI5D.jpg,/e9vJTJHkCOyBitE67n8zlp5Qm8q.jpg,/tSbZky1KLzqOSGPzYtqnxTQzNFy.jpg,/cQR3VHRMUL8xGkWK5Up8rI7DHQD.jpg,/4oIoe9tcSRzGSImp9Jqp1SKFwes.jpg,/zajlFkhKugj9tqH57KHXpmTXIku.jpg,/hpP0ELkViFlU8PVWbEBvVx12YtJ.jpg","checked":null,"dead_link":0,"views":"2","date_creation":"2023-08-17T04:06:45.000Z","update_date":"2024-09-19T01:28:34.000Z","original_title":"バトル・ロワイアル","title_vf":"Battle Royale","tatavid":null,"dcsutom":96950}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"id":44334,"tmdb":"42009","title":"Black Mirror","sa":4,"epi":2,"link":"https://ahvsh.com/e/83izf7qzwpae,https://netu.frembed.fun/e/0DFgfkcXOsDP,https://likessb.com/e/7yjgl1x56n08.html,https://ds2play.com/e/fzfvfq3ngig0","imdb":"tt2085059","year":null,"version":"VF","link_vostfr":"","link1":"https://myvidplay.com/e/dfx8me4un4ul\t","link2":"https://netu.fremtv.lol/e/0DFgfkcXOsDP","link3":"https://crystaltreatmenteast.com/e/cqy9oue7sv0g\t","link4":"https://ds2play.com/e/fzfvfq3ngig0","link5":null,"link6":null,"link7":null,"link1vostfr":"","link2vostfr":null,"link3vostfr":null,"link4vostfr":null,"link5vostfr":null,"link6vostfr":null,"link7vostfr":null,"link1vo":null,"link2vo":null,"link3vo":null,"link4vo":null,"link5vo":null,"link6vo":null,"link7vo":null,"date_creation":"2023-08-17T04:06:31.000Z","update_date":"2026-01-09T14:15:02.000Z","views":3,"backdropImage":"/dg3OindVAGZBjlT3xYKqIAdukPL.jpg","posterImage":"/seN6rRfN0I6n8iDXjlSMk1QjNcq.jpg","prevEpisode":{"sa":4,"epi":1,"url":"/series?id=42009&sa=4&epi=1"},"nextEpisode":{"sa":4,"epi":3,"url":"/series?id=42009&sa=4&epi=3"}}
|
|
||||||
1
src/source/__fixtures__/Frembed/https:frembed.workapifilmsid3176andidTypetmdb
generated
Normal file
1
src/source/__fixtures__/Frembed/https:frembed.workapifilmsid3176andidTypetmdb
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"tmdb":"3176","title":"Battle Royale","link1":"/api/stream?type=movie&tmdb=3176&server=link1","link2":"/api/stream?type=movie&tmdb=3176&server=link2","link3":"/api/stream?type=movie&tmdb=3176&server=link3","link4":"/api/stream?type=movie&tmdb=3176&server=link4","link5":null,"link6":"","link7":"/api/stream?type=movie&tmdb=3176&server=link7","link1vostfr":null,"link2vostfr":null,"link3vostfr":null,"link4vostfr":null,"link5vostfr":null,"link6vostfr":null,"link7vostfr":null,"link1vo":null,"link2vo":null,"link3vo":null,"link4vo":null,"link5vo":null,"link6vo":null,"link7vo":null,"imdb":"tt0266308","year":"2000","version":"TrueFrench","quality":"HD","qualityVostfr":null,"qualityVo":null,"poster":"/8PzexNbQ9eAKxe0p2U4XP3DVJCp.jpg","backdrop":"/pmRtI4QvcBvXjw9mLOEAsV9Bq7i.jpg,/amBvmIshdsSkOtvVIgxl7YSQ9Dg.jpg,/n4rNQUV9S9DMgCkQVt7R7VLYxNr.jpg,/55qVIFhykb6M6CGWRKQd9BsLI5D.jpg,/e9vJTJHkCOyBitE67n8zlp5Qm8q.jpg,/tSbZky1KLzqOSGPzYtqnxTQzNFy.jpg,/cQR3VHRMUL8xGkWK5Up8rI7DHQD.jpg,/4oIoe9tcSRzGSImp9Jqp1SKFwes.jpg,/zajlFkhKugj9tqH57KHXpmTXIku.jpg,/hpP0ELkViFlU8PVWbEBvVx12YtJ.jpg","checked":null,"dead_link":0,"views":"2","date_creation":"2023-08-17T04:06:45.000Z","update_date":"2024-09-19T01:28:34.000Z","original_title":"バトル・ロワイアル","title_vf":"Battle Royale","tatavid":null,"dcsutom":96950}
|
||||||
1
src/source/__fixtures__/Frembed/https:frembed.workapiseriesid42009andsa4andepi2andidTypetmdb
generated
Normal file
1
src/source/__fixtures__/Frembed/https:frembed.workapiseriesid42009andsa4andepi2andidTypetmdb
generated
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"id":44334,"tmdb":"42009","title":"Black Mirror","sa":4,"epi":2,"link":"/api/stream?type=serie&tmdb=42009&sa=4&epi=2&server=link","imdb":"tt2085059","year":null,"version":"VF","link_vostfr":"","link1":"/api/stream?type=serie&tmdb=42009&sa=4&epi=2&server=link1","link2":"/api/stream?type=serie&tmdb=42009&sa=4&epi=2&server=link2","link3":"/api/stream?type=serie&tmdb=42009&sa=4&epi=2&server=link3","link4":"/api/stream?type=serie&tmdb=42009&sa=4&epi=2&server=link4","link5":null,"link6":null,"link7":null,"link1vostfr":"","link2vostfr":null,"link3vostfr":null,"link4vostfr":null,"link5vostfr":null,"link6vostfr":null,"link7vostfr":null,"link1vo":null,"link2vo":null,"link3vo":null,"link4vo":null,"link5vo":null,"link6vo":null,"link7vo":null,"date_creation":"2023-08-17T04:06:31.000Z","update_date":"2026-03-13T17:15:01.000Z","views":4,"backdropImage":"/dg3OindVAGZBjlT3xYKqIAdukPL.jpg","posterImage":"/seN6rRfN0I6n8iDXjlSMk1QjNcq.jpg","prevEpisode":{"sa":4,"epi":1,"url":"/series?id=42009&sa=4&epi=1"},"nextEpisode":{"sa":4,"epi":3,"url":"/series?id=42009&sa=4&epi=3"}}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZCVFcwd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZDUkVjd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZDU0Vjd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZCY1cwd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSklSMU5DY25oSU9WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSklSMU5DY25oU09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSkhTM1ZCU1ZSbU9WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting ...</title>
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="author" content="s-b0t">
|
||||||
|
<meta name="googlebot" content="noindex,nofollow">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting ..
|
||||||
|
<script type="text/javascript">
|
||||||
|
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
|
||||||
|
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSkhTM1ZCU1ZSd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue