webscout 4.2__py3-none-any.whl → 4.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of webscout might be problematic. Click here for more details.
- webscout/AIauto.py +5 -7
- webscout/AIutel.py +6 -8
- webscout/Extra/autollama.py +20 -9
- webscout/Extra/gguf.py +5 -19
- webscout/Extra/weather.py +27 -9
- webscout/Extra/weather_ascii.py +5 -0
- webscout/GoogleS.py +342 -0
- webscout/Local/_version.py +1 -1
- webscout/Provider/FreeGemini.py +169 -0
- webscout/Provider/Llama.py +211 -0
- webscout/Provider/__init__.py +5 -5
- webscout/__init__.py +7 -4
- webscout/async_providers.py +0 -2
- webscout/cli.py +22 -21
- webscout/utils.py +13 -3
- webscout/version.py +1 -1
- webscout/webai.py +3 -0
- webscout/webscout_search.py +34 -26
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/METADATA +35 -1
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/RECORD +24 -22
- webscout/Provider/Llama2.py +0 -437
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/LICENSE.md +0 -0
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/WHEEL +0 -0
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/entry_points.txt +0 -0
- {webscout-4.2.dist-info → webscout-4.4.dist-info}/top_level.txt +0 -0
webscout/webscout_search.py
CHANGED
|
@@ -5,11 +5,14 @@ from datetime import datetime, timezone
|
|
|
5
5
|
from decimal import Decimal
|
|
6
6
|
from functools import cached_property
|
|
7
7
|
from itertools import cycle, islice
|
|
8
|
+
from random import choice
|
|
8
9
|
from threading import Event
|
|
9
10
|
from types import TracebackType
|
|
10
11
|
from typing import Dict, List, Optional, Tuple, Type, Union, cast
|
|
11
12
|
|
|
12
|
-
import pyreqwest_impersonate as pri
|
|
13
|
+
import pyreqwest_impersonate as pri
|
|
14
|
+
|
|
15
|
+
from .utils import _calculate_distance, _extract_vqd, _normalize, _normalize_url, _text_extract_json, json_loads # type: ignore
|
|
13
16
|
|
|
14
17
|
try:
|
|
15
18
|
from lxml.etree import _Element
|
|
@@ -20,15 +23,8 @@ try:
|
|
|
20
23
|
except ImportError:
|
|
21
24
|
LXML_AVAILABLE = False
|
|
22
25
|
|
|
23
|
-
from .exceptions import
|
|
24
|
-
|
|
25
|
-
_calculate_distance,
|
|
26
|
-
_extract_vqd,
|
|
27
|
-
_normalize,
|
|
28
|
-
_normalize_url,
|
|
29
|
-
_text_extract_json,
|
|
30
|
-
json_loads,
|
|
31
|
-
)
|
|
26
|
+
from .exceptions import *
|
|
27
|
+
|
|
32
28
|
|
|
33
29
|
logger = logging.getLogger("webscout.WEBS")
|
|
34
30
|
|
|
@@ -37,6 +33,15 @@ class WEBS:
|
|
|
37
33
|
"""webscout class to get search results from duckduckgo.com."""
|
|
38
34
|
|
|
39
35
|
_executor: ThreadPoolExecutor = ThreadPoolExecutor()
|
|
36
|
+
_impersonates = (
|
|
37
|
+
"chrome_99", "chrome_100", "chrome_101", "chrome_104", "chrome_105", "chrome_106", "chrome_108",
|
|
38
|
+
"chrome_107", "chrome_109", "chrome_114", "chrome_116", "chrome_117", "chrome_118", "chrome_119",
|
|
39
|
+
"chrome_120", #"chrome_123", "chrome_124", "chrome_126",
|
|
40
|
+
"safari_ios_16.5", "safari_ios_17.2", "safari_ios_17.4.1", "safari_15.3", "safari_15.5",
|
|
41
|
+
"safari_15.6.1", "safari_16", "safari_16.5", "safari_17.2.1", "safari_17.4.1", "safari_17.5",
|
|
42
|
+
#"okhttp_3.9", "okhttp_3.11", "okhttp_3.13", "okhttp_3.14", "okhttp_4.9", "okhttp_4.10", "okhttp_5",
|
|
43
|
+
"edge_99", "edge_101", "edge_122",
|
|
44
|
+
) # fmt: skip
|
|
40
45
|
|
|
41
46
|
def __init__(
|
|
42
47
|
self,
|
|
@@ -66,7 +71,7 @@ class WEBS:
|
|
|
66
71
|
timeout=timeout,
|
|
67
72
|
cookie_store=True,
|
|
68
73
|
referer=True,
|
|
69
|
-
impersonate=
|
|
74
|
+
impersonate=choice(self._impersonates),
|
|
70
75
|
follow_redirects=False,
|
|
71
76
|
verify=False,
|
|
72
77
|
)
|
|
@@ -120,13 +125,14 @@ class WEBS:
|
|
|
120
125
|
resp_content = self._get_url("POST", "https://duckduckgo.com", data={"q": keywords})
|
|
121
126
|
return _extract_vqd(resp_content, keywords)
|
|
122
127
|
|
|
123
|
-
def chat(self, keywords: str, model: str = "gpt-3.5") -> str:
|
|
128
|
+
def chat(self, keywords: str, model: str = "gpt-3.5", timeout: int = 20) -> str:
|
|
124
129
|
"""Initiates a chat session with DuckDuckGo AI.
|
|
125
130
|
|
|
126
131
|
Args:
|
|
127
132
|
keywords (str): The initial message or question to send to the AI.
|
|
128
133
|
model (str): The model to use: "gpt-3.5", "claude-3-haiku", "llama-3-70b", "mixtral-8x7b".
|
|
129
134
|
Defaults to "gpt-3.5".
|
|
135
|
+
timeout (int): Timeout value for the HTTP client. Defaults to 20.
|
|
130
136
|
|
|
131
137
|
Returns:
|
|
132
138
|
str: The response from the AI.
|
|
@@ -149,18 +155,16 @@ class WEBS:
|
|
|
149
155
|
"messages": self._chat_messages,
|
|
150
156
|
}
|
|
151
157
|
resp = self.client.post(
|
|
152
|
-
"https://duckduckgo.com/duckchat/v1/chat",
|
|
158
|
+
"https://duckduckgo.com/duckchat/v1/chat",
|
|
159
|
+
headers={"x-vqd-4": self._chat_vqd},
|
|
160
|
+
json=json_data,
|
|
161
|
+
timeout=timeout,
|
|
153
162
|
)
|
|
154
163
|
self._chat_vqd = resp.headers.get("x-vqd-4", "")
|
|
155
164
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
if x:
|
|
160
|
-
j = json_loads(x)
|
|
161
|
-
message = j.get("message", "")
|
|
162
|
-
messages.append(message)
|
|
163
|
-
result = "".join(messages)
|
|
165
|
+
data = ",".join(x for line in resp.text.rstrip("[DONE]\n").split("data:") if (x := line.strip()))
|
|
166
|
+
result = "".join(x.get("message", "") for x in json_loads("[" + data + "]"))
|
|
167
|
+
|
|
164
168
|
self._chat_messages.append({"role": "assistant", "content": result})
|
|
165
169
|
return result
|
|
166
170
|
|
|
@@ -347,7 +351,7 @@ class WEBS:
|
|
|
347
351
|
for e in elements:
|
|
348
352
|
if isinstance(e, _Element):
|
|
349
353
|
hrefxpath = e.xpath("./a/@href")
|
|
350
|
-
href = str(hrefxpath[0]) if isinstance(hrefxpath, List) else None
|
|
354
|
+
href = str(hrefxpath[0]) if hrefxpath and isinstance(hrefxpath, List) else None
|
|
351
355
|
if (
|
|
352
356
|
href
|
|
353
357
|
and href not in cache
|
|
@@ -357,9 +361,9 @@ class WEBS:
|
|
|
357
361
|
):
|
|
358
362
|
cache.add(href)
|
|
359
363
|
titlexpath = e.xpath("./h2/a/text()")
|
|
360
|
-
title = str(titlexpath[0]) if isinstance(titlexpath, List) else ""
|
|
364
|
+
title = str(titlexpath[0]) if titlexpath and isinstance(titlexpath, List) else ""
|
|
361
365
|
bodyxpath = e.xpath("./a//text()")
|
|
362
|
-
body = "".join(str(x) for x in bodyxpath) if isinstance(bodyxpath, List) else ""
|
|
366
|
+
body = "".join(str(x) for x in bodyxpath) if bodyxpath and isinstance(bodyxpath, List) else ""
|
|
363
367
|
result = {
|
|
364
368
|
"title": _normalize(title),
|
|
365
369
|
"href": _normalize_url(href),
|
|
@@ -449,10 +453,14 @@ class WEBS:
|
|
|
449
453
|
else:
|
|
450
454
|
cache.add(href)
|
|
451
455
|
titlexpath = e.xpath(".//a//text()")
|
|
452
|
-
title = str(titlexpath[0]) if isinstance(titlexpath, List) else ""
|
|
456
|
+
title = str(titlexpath[0]) if titlexpath and isinstance(titlexpath, List) else ""
|
|
453
457
|
elif i == 2:
|
|
454
458
|
bodyxpath = e.xpath(".//td[@class='result-snippet']//text()")
|
|
455
|
-
body =
|
|
459
|
+
body = (
|
|
460
|
+
"".join(str(x) for x in bodyxpath).strip()
|
|
461
|
+
if bodyxpath and isinstance(bodyxpath, List)
|
|
462
|
+
else ""
|
|
463
|
+
)
|
|
456
464
|
if href:
|
|
457
465
|
result = {
|
|
458
466
|
"title": _normalize(title),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4
|
|
4
4
|
Summary: Search for anything using Google, DuckDuckGo, brave, qwant, phind.com, Contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, webai (terminal gpt and open interpreter) and offline LLMs and more
|
|
5
5
|
Author: OEvortex
|
|
6
6
|
Author-email: helpingai5@gmail.com
|
|
@@ -34,6 +34,7 @@ Requires-Dist: tqdm
|
|
|
34
34
|
Requires-Dist: webdriver-manager
|
|
35
35
|
Requires-Dist: halo >=0.0.31
|
|
36
36
|
Requires-Dist: g4f >=0.2.2.3
|
|
37
|
+
Requires-Dist: g4f[webdriver]
|
|
37
38
|
Requires-Dist: rich
|
|
38
39
|
Requires-Dist: python-dotenv
|
|
39
40
|
Requires-Dist: beautifulsoup4
|
|
@@ -55,6 +56,11 @@ Requires-Dist: playsound
|
|
|
55
56
|
Requires-Dist: poe-api-wrapper
|
|
56
57
|
Requires-Dist: pyreqwest-impersonate
|
|
57
58
|
Requires-Dist: ballyregan
|
|
59
|
+
Requires-Dist: nodriver
|
|
60
|
+
Requires-Dist: PyExecJS
|
|
61
|
+
Requires-Dist: ollama
|
|
62
|
+
Requires-Dist: pyfiglet
|
|
63
|
+
Requires-Dist: yaspin
|
|
58
64
|
Provides-Extra: dev
|
|
59
65
|
Requires-Dist: ruff >=0.1.6 ; extra == 'dev'
|
|
60
66
|
Requires-Dist: pytest >=7.4.2 ; extra == 'dev'
|
|
@@ -1472,6 +1478,34 @@ response = ollama_provider.chat("What is the meaning of life?")
|
|
|
1472
1478
|
print(response)
|
|
1473
1479
|
```
|
|
1474
1480
|
|
|
1481
|
+
### 22. GROQ
|
|
1482
|
+
```python
|
|
1483
|
+
from webscout import GROQ
|
|
1484
|
+
ai = GROQ(api_key="")
|
|
1485
|
+
response = ai.chat("What is the meaning of life?")
|
|
1486
|
+
print(response)
|
|
1487
|
+
|
|
1488
|
+
```
|
|
1489
|
+
|
|
1490
|
+
### 23. Freegemini - chat with gemini for free
|
|
1491
|
+
```python
|
|
1492
|
+
from webscout import FreeGemini
|
|
1493
|
+
ai = FreeGemini()
|
|
1494
|
+
response = ai.chat("What is the meaning of life?")
|
|
1495
|
+
print(response)
|
|
1496
|
+
```
|
|
1497
|
+
|
|
1498
|
+
### 24. LLama 70b - chat with meta's llama 3 70b
|
|
1499
|
+
```python
|
|
1500
|
+
|
|
1501
|
+
from webscout import LLAMA
|
|
1502
|
+
|
|
1503
|
+
llama = LLAMA()
|
|
1504
|
+
|
|
1505
|
+
r = llama.chat("What is the meaning of life?")
|
|
1506
|
+
print(r)
|
|
1507
|
+
```
|
|
1508
|
+
|
|
1475
1509
|
### `LLM`
|
|
1476
1510
|
```python
|
|
1477
1511
|
from webscout.LLM import LLM
|
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
webscout/AIauto.py,sha256=
|
|
1
|
+
webscout/AIauto.py,sha256=gC01wLPpnqONf9DwKqkmbC_gIWo5Lh5V8YPu4OmYnhE,19923
|
|
2
2
|
webscout/AIbase.py,sha256=GoHbN8r0gq2saYRZv6LA-Fr9Jlcjv80STKFXUq2ZeGU,4710
|
|
3
|
-
webscout/AIutel.py,sha256=
|
|
3
|
+
webscout/AIutel.py,sha256=1NQAchS2e6c1SrIq0efsVtX3ANZ5XI1hjKVHGpJG7OU,34076
|
|
4
4
|
webscout/DWEBS.py,sha256=QLuT1IKu0lnwdl7W6c-ctBAO7Jj0Zk3PYm6-13BC7rU,25740
|
|
5
|
+
webscout/GoogleS.py,sha256=dW_iArNTyFT5MWBEI1HQvqf-Noj3uJeJA_Eods8D4ms,11587
|
|
5
6
|
webscout/LLM.py,sha256=LbGCZdJf8A5dwfoGS4tyy39tAh5BDdhMZP0ScKaaQfU,4184
|
|
6
7
|
webscout/YTdownloader.py,sha256=uWpUWnw9pxeEGw9KJ_3XDyQ5gd38gH1dJpr-HJo4vzU,39144
|
|
7
|
-
webscout/__init__.py,sha256=
|
|
8
|
+
webscout/__init__.py,sha256=teSwl1Gx50AfNu7OibwZrltsErbRDcUuD7W5oAjIc7M,2257
|
|
8
9
|
webscout/__main__.py,sha256=ZtTRgsRjUi2JOvYFLF1ZCh55Sdoz94I-BS-TlJC7WDU,126
|
|
9
|
-
webscout/async_providers.py,sha256=
|
|
10
|
-
webscout/cli.py,sha256=
|
|
10
|
+
webscout/async_providers.py,sha256=MRj0klEhBYVQXnzZGG_15d0e-TPA0nOc2nn735H-wR4,622
|
|
11
|
+
webscout/cli.py,sha256=RlBKeS9CSIsiBMqlzxevWtKjbY9htkZvA7J0bM_hHE8,14999
|
|
11
12
|
webscout/exceptions.py,sha256=YtIs-vXBwcjbt9TZ_wB7yI0dO7ANYIZAmEEeLmoQ2fI,487
|
|
12
13
|
webscout/g4f.py,sha256=NNcnlOtIWV9R93UsBN4jBGBEJ9sJ-Np1WbgjkGVDcYc,24487
|
|
13
14
|
webscout/models.py,sha256=5iQIdtedT18YuTZ3npoG7kLMwcrKwhQ7928dl_7qZW0,692
|
|
14
15
|
webscout/tempid.py,sha256=5oc3UbXhPGKxrMRTfRABT-V-dNzH_hOKWtLYM6iCWd4,5896
|
|
15
16
|
webscout/transcriber.py,sha256=EddvTSq7dPJ42V3pQVnGuEiYQ7WjJ9uyeR9kMSxN7uY,20622
|
|
16
|
-
webscout/utils.py,sha256=
|
|
17
|
-
webscout/version.py,sha256=
|
|
17
|
+
webscout/utils.py,sha256=2O8_lftBKsv5OEvVaXCN-h0sipup0m3jxzhFdWQrdY8,2873
|
|
18
|
+
webscout/version.py,sha256=Pp5thQN3CvwDpubKz9MHn-UvDhuocamnBfB2VckwBGI,44
|
|
18
19
|
webscout/voice.py,sha256=0QjXTHAQmCK07IDZXRc7JXem47cnPJH7u3X0sVP1-UQ,967
|
|
19
|
-
webscout/webai.py,sha256=
|
|
20
|
-
webscout/webscout_search.py,sha256=
|
|
20
|
+
webscout/webai.py,sha256=32mRZqAGCOSCeyfAMzqac-94r2RD5_SWUxfh4QjZ95M,89037
|
|
21
|
+
webscout/webscout_search.py,sha256=lYrsPVB4QdSGJl4zehvSmGxK61xBAZ2dZGCmuN3ar2w,43686
|
|
21
22
|
webscout/webscout_search_async.py,sha256=dooKGwLm0cwTml55Vy6NHPPY-nymEqX2h8laX94Zg5A,14537
|
|
22
23
|
webscout/websx_search.py,sha256=n-qVwiHozJEF-GFRPcAfh4k1d_tscTmDe1dNL-1ngcU,12094
|
|
23
24
|
webscout/Extra/__init__.py,sha256=GG1qUwS-HspT4TeeAIT4qFpM8PaO1ZdQhpelctaM7Rs,99
|
|
24
|
-
webscout/Extra/autollama.py,sha256=
|
|
25
|
-
webscout/Extra/gguf.py,sha256=
|
|
26
|
-
webscout/Extra/weather.py,sha256=
|
|
27
|
-
webscout/Extra/weather_ascii.py,sha256=
|
|
25
|
+
webscout/Extra/autollama.py,sha256=8lyodIWAgJABzlMMHytlolPCgvUKh8ynkZD6MMEltXs,5970
|
|
26
|
+
webscout/Extra/gguf.py,sha256=3QzQIClcVoHyAeb60xxv4msJudC2Maf41StdbzAq1bk,7009
|
|
27
|
+
webscout/Extra/weather.py,sha256=wdSrQxZRpbNfyaux0BeLdaDWyde5KwxZjSUM13820X0,2460
|
|
28
|
+
webscout/Extra/weather_ascii.py,sha256=Aed-_EUzvTEjBXbOpNRxkJBLa6fXsclknXP06HnQD18,808
|
|
28
29
|
webscout/Local/__init__.py,sha256=RN6klpbabPGNX2YzPm_hdeUcQvieUwvJt22uAO2RKSM,238
|
|
29
|
-
webscout/Local/_version.py,sha256=
|
|
30
|
+
webscout/Local/_version.py,sha256=yH-h9AKl_KbJwMWeq0PDDOVI2FQ9NutjLDqcCGuAQ6I,83
|
|
30
31
|
webscout/Local/formats.py,sha256=BiZZSoN3e8S6-S-ykBL9ogSUs0vK11GaZ3ghc9U8GRk,18994
|
|
31
32
|
webscout/Local/model.py,sha256=T_bzNNrxEyOyLyhp6fKwiuVBBkXC2a37LzJVCxFIxOU,30710
|
|
32
33
|
webscout/Local/rawdog.py,sha256=ojY_O8Vb1KvR34OwWdfLgllgaAK_7HMf64ElMATvCXs,36689
|
|
@@ -40,13 +41,14 @@ webscout/Provider/ChatGPTUK.py,sha256=qmuCb_a71GNE5LelOb5AKJUBndvj7soebiNey4VdDv
|
|
|
40
41
|
webscout/Provider/Cohere.py,sha256=IXnRosYOaMAA65nvsKmN6ZkJGSdZFYQYBidzuNaCqX8,8711
|
|
41
42
|
webscout/Provider/Deepinfra.py,sha256=kVnWARJdEtIeIsZwGw3POq8B2dO87bDcJso3uOeCeOA,18750
|
|
42
43
|
webscout/Provider/Deepseek.py,sha256=pnOB44ObuOfAsoi_bUGUvha3tfwd0rTJ9rnX-14QkL4,10550
|
|
44
|
+
webscout/Provider/FreeGemini.py,sha256=GbTJEG09vs5IKWKy9FqHBvDNKVq-HdMexOplctpb0RI,6426
|
|
43
45
|
webscout/Provider/Gemini.py,sha256=_4DHWvlWuNAmVHPwHB1RjmryjTZZCthLa6lvPEHLvkQ,8451
|
|
44
46
|
webscout/Provider/Geminiflash.py,sha256=1kMPA-ypi1gmJoms606Z7j_51znpdofM2aAyo4Hl7wU,5951
|
|
45
47
|
webscout/Provider/Geminipro.py,sha256=nOifT5CRmnUg28iifSbOHkNLoKucLRr5zCj607mVrhw,5948
|
|
46
48
|
webscout/Provider/Groq.py,sha256=QfgP3hKUcqq5vUA4Pzuu3HAgpJkKwLWNjjsnxtkCYd8,21094
|
|
47
49
|
webscout/Provider/Koboldai.py,sha256=KwWx2yPlvT9BGx37iNvSbgzWkJ9I8kSOmeg7sL1hb0M,15806
|
|
48
50
|
webscout/Provider/Leo.py,sha256=wbuDR-vFjLptfRC6yDlk74tINqNvCOzpISsK92lIgGg,19987
|
|
49
|
-
webscout/Provider/
|
|
51
|
+
webscout/Provider/Llama.py,sha256=F_srqtdo6ws03tnEaetZOfDolXrQEnLZaIxmQaY_tJQ,8052
|
|
50
52
|
webscout/Provider/OLLAMA.py,sha256=G8sz_P7OZINFI1qGnpDhNPWU789Sv2cpDnShOA5Nbmw,7075
|
|
51
53
|
webscout/Provider/OpenGPT.py,sha256=ZymwLgNJSPlGZHW3msMlnRR7NxmALqJw9yuToqrRrhw,35515
|
|
52
54
|
webscout/Provider/Openai.py,sha256=SjfVOwY94unVnXhvN0Fkome-q2-wi4mPJk_vCGq5Fjc,20617
|
|
@@ -59,10 +61,10 @@ webscout/Provider/VTLchat.py,sha256=_sErGr-wOi16ZAfiGOo0bPsAEMkjzzwreEsIqjIZMIU,
|
|
|
59
61
|
webscout/Provider/Xjai.py,sha256=BIlk2ouz9Kh_0Gg9hPvTqhI7XtcmWdg5vHSX_4uGrIs,9039
|
|
60
62
|
webscout/Provider/Yepchat.py,sha256=2Eit-A7w1ph1GQKNQuur_yaDzI64r0yBGxCIjDefJxQ,19875
|
|
61
63
|
webscout/Provider/Youchat.py,sha256=fhMpt94pIPE_XDbC4z9xyfgA7NbkNE2wlRFJabsjv90,8069
|
|
62
|
-
webscout/Provider/__init__.py,sha256=
|
|
63
|
-
webscout-4.
|
|
64
|
-
webscout-4.
|
|
65
|
-
webscout-4.
|
|
66
|
-
webscout-4.
|
|
67
|
-
webscout-4.
|
|
68
|
-
webscout-4.
|
|
64
|
+
webscout/Provider/__init__.py,sha256=j6lZqjLYext2a-KTnvGEvVm-D3jezHIlnanlj2H37FI,1962
|
|
65
|
+
webscout-4.4.dist-info/LICENSE.md,sha256=9P0imsudI7MEvZe2pOcg8rKBn6E5FGHQ-riYozZI-Bk,2942
|
|
66
|
+
webscout-4.4.dist-info/METADATA,sha256=bgSEbiMKbSplv_CNKFCFWvY9Mp44VyxuuWpBJSxIKgQ,57749
|
|
67
|
+
webscout-4.4.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
|
68
|
+
webscout-4.4.dist-info/entry_points.txt,sha256=Hh4YIIjvkqB9SVxZ2ri4DZUkgEu_WF_5_r_nZDIvfG8,73
|
|
69
|
+
webscout-4.4.dist-info/top_level.txt,sha256=nYIw7OKBQDr_Z33IzZUKidRD3zQEo8jOJYkMVMeN334,9
|
|
70
|
+
webscout-4.4.dist-info/RECORD,,
|