sticker-convert 2.9.0__py3-none-any.whl → 2.9.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -51,11 +51,17 @@ class ViberGetAuthWindow(BaseWindow):
51
51
  justify="left",
52
52
  anchor="w",
53
53
  )
54
+ else:
55
+ self.explanation_lbl2 = Label(
56
+ self.frame_info,
57
+ text="You may be asked for admin password.",
58
+ justify="left",
59
+ anchor="w",
60
+ )
54
61
 
55
62
  self.explanation_lbl0.grid(column=0, row=0, sticky="w", padx=3, pady=3)
56
63
  self.explanation_lbl1.grid(column=0, row=1, sticky="w", padx=3, pady=3)
57
- if self.explanation_lbl2 is not None:
58
- self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
64
+ self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
59
65
 
60
66
  # Start button frame
61
67
  self.launch_btn = Button(
@@ -0,0 +1,8 @@
1
+ param($processId)
2
+ $dumpFilePath = "$Env:TEMP\memdump.bin.$processId"
3
+
4
+ Powershell -c rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump $processId $dumpFilePath full
5
+
6
+ icacls $dumpFilePath /remove "Everyone"
7
+ icacls $dumpFilePath /grant "Everyone:(r)"
8
+ icacls $dumpFilePath /grant "Everyone:(w)"
@@ -1,137 +1,183 @@
1
1
  #!/usr/bin/env python3
2
+ import importlib.util
2
3
  import os
3
4
  import platform
4
5
  import shutil
6
+ import signal
5
7
  import subprocess
6
8
  import time
7
9
  from getpass import getpass
8
10
  from pathlib import Path
9
- from typing import Callable, Optional, Tuple, cast
11
+ from typing import Callable, List, Optional, Tuple, cast
10
12
 
11
13
  from sticker_convert.definitions import ROOT_DIR
12
14
 
13
- # psutil is missing on arm64 linux appimage
14
- # Note: There is no Viber Desktop on arm64 linux anyway
15
- try:
16
- import psutil
17
-
18
- PSUTIL_LOADED = True
19
- except ModuleNotFoundError:
20
- PSUTIL_LOADED = False # type: ignore
21
-
22
15
  MSG_NO_BIN = """Viber Desktop not detected.
23
16
  Download and install Viber Desktop,
24
17
  then login to Viber Desktop and try again."""
25
-
26
18
  MSG_NO_AUTH = """Viber Desktop installed,
27
19
  but viber_auth not found.
28
20
  Please login to Viber Desktop and try again."""
29
-
30
21
  MSG_SIP_ENABLED = """You need to disable SIP:
31
22
  1. Restart computer in Recovery mode
32
23
  2. Launch Terminal from the Utilities menu
33
24
  3. Run the command `csrutil disable`
34
25
  4. Restart your computer"""
26
+ MSG_NO_PGREP = "pgrep command or psutil python package is necessary"
27
+ MSG_LAUNCH_FAIL = "Failed to launch Viber"
28
+ MSG_PERMISSION_ERROR = "Failed to read Viber process memory"
35
29
 
36
- MSG_NO_PSUTIL = "Python package psutil is necessary"
37
30
 
38
-
39
- def killall(name: str) -> bool:
40
- if not PSUTIL_LOADED:
31
+ def check_admin_windows() -> bool:
32
+ username = os.getenv("username")
33
+ if username is None:
41
34
  return False
42
35
 
36
+ s = subprocess.run(
37
+ ["net", "user", username],
38
+ capture_output=True,
39
+ text=True,
40
+ ).stdout
41
+
42
+ return True if "*Administrators" in s else False
43
+
44
+
45
+ def check_admin_linux() -> bool:
46
+ s = subprocess.run(
47
+ ["sudo", "-l"],
48
+ capture_output=True,
49
+ text=True,
50
+ ).stdout
51
+
52
+ return True if "may run the following commands" in s else False
53
+
54
+
55
+ def killall(name: str) -> bool:
43
56
  result = False
44
57
 
45
- for proc in psutil.process_iter(): # type: ignore
46
- if name in proc.name().lower():
47
- proc.kill()
58
+ while True:
59
+ pid = find_pid_by_name(name)
60
+ if pid is not None:
61
+ os.kill(pid, signal.SIGTERM)
48
62
  result = True
63
+ else:
64
+ break
49
65
 
50
66
  return result
51
67
 
52
68
 
53
69
  def find_pid_by_name(name: str) -> Optional[int]:
54
- if not PSUTIL_LOADED:
70
+ if platform.system() == "Windows":
71
+ s = subprocess.run(
72
+ ["powershell", "-c", "Get-Process", f"*{name}*"],
73
+ capture_output=True,
74
+ text=True,
75
+ ).stdout
76
+
77
+ for line in s.split("\n"):
78
+ if name in line.lower():
79
+ info = name.split()
80
+ pid = info[5]
81
+ if pid.isnumeric():
82
+ return int(pid)
83
+
55
84
  return None
85
+ else:
86
+ if platform.system() == "Darwin":
87
+ pattern = "Viber"
88
+ else:
89
+ pattern = ".*[Vv]iber.*"
90
+ pid = (
91
+ subprocess.run(["pgrep", pattern], capture_output=True, text=True)
92
+ .stdout.split("\n")[0]
93
+ .strip()
94
+ )
95
+ if pid == "" or pid.isnumeric() is False:
96
+ return None
97
+ else:
98
+ return int(pid)
99
+
100
+
101
+ if importlib.util.find_spec("psutil"):
102
+ import psutil
103
+
104
+ def killall(name: str) -> bool:
105
+ result = False
56
106
 
57
- for proc in psutil.process_iter(): # type: ignore
58
- if name in proc.name().lower():
59
- return proc.pid
107
+ for proc in psutil.process_iter(): # type: ignore
108
+ if name in proc.name().lower():
109
+ proc.kill()
110
+ result = True
60
111
 
61
- return None
112
+ return result
113
+
114
+ def find_pid_by_name(name: str) -> Optional[int]:
115
+ for proc in psutil.process_iter(): # type: ignore
116
+ if name in proc.name().lower():
117
+ return proc.pid
118
+
119
+ return None
62
120
 
63
121
 
64
122
  class GetViberAuth:
65
123
  def __init__(self, cb_ask_str: Callable[..., str] = input):
66
124
  self.cb_ask_str = cb_ask_str
67
125
 
68
- def get_auth_windows(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
69
- if not PSUTIL_LOADED:
70
- return None, MSG_NO_PSUTIL
71
-
72
- member_id = None
73
- m_token = None
74
- m_ts = None
75
-
126
+ def relaunch_viber(self, viber_bin_path: str) -> Optional[int]:
76
127
  killed = killall("viber")
77
128
  if killed:
78
129
  time.sleep(5)
79
- subprocess.Popen([viber_bin_path])
130
+
131
+ if platform.system() == "Darwin":
132
+ cmd = ["open", "-n", viber_bin_path]
133
+ else:
134
+ cmd = [viber_bin_path]
135
+ subprocess.Popen(cmd)
80
136
  time.sleep(10)
81
137
 
82
- from PyMemoryEditor import OpenProcess # type: ignore
138
+ return find_pid_by_name("viber")
83
139
 
84
- viber_pid = find_pid_by_name("viber")
85
- with OpenProcess(pid=viber_pid) as process:
86
- for address in process.search_by_value(str, 18, "X-Viber-Auth-Mid: "): # type: ignore
87
- member_id_addr = cast(int, address) + 18
88
- member_id_bytes = process.read_process_memory(member_id_addr, bytes, 20)
89
- member_id_term = member_id_bytes.find(b"\x0d\x0a")
90
- if member_id_term == -1:
91
- continue
92
- member_id = member_id_bytes[:member_id_term].decode(encoding="ascii")
93
- break
94
- if member_id is None:
95
- return None, MSG_NO_AUTH
140
+ def get_mem_windows(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
141
+ from pathlib import WindowsPath
96
142
 
97
- for address in process.search_by_value(str, 20, "X-Viber-Auth-Token: "): # type: ignore
98
- m_token_addr = cast(int, address) + 20
99
- m_token = process.read_process_memory(m_token_addr, str, 64)
100
- break
101
- if m_token is None:
102
- return None, MSG_NO_AUTH
103
-
104
- for address in process.search_by_value(str, 24, "X-Viber-Auth-Timestamp: "): # type: ignore
105
- m_ts_addr = cast(int, address) + 24
106
- m_ts = process.read_process_memory(m_ts_addr, str, 13)
143
+ memdump_ps_path = str(WindowsPath(ROOT_DIR / "resources/memdump_windows.ps1"))
144
+ arglist = (
145
+ f'-NoProfile -ExecutionPolicy Bypass -File "{memdump_ps_path}" {viber_pid}'
146
+ )
147
+ dump_fpath = os.path.expandvars(f"%temp%/memdump.bin.{viber_pid}")
148
+
149
+ cmd = [
150
+ "powershell",
151
+ "-NoProfile",
152
+ "-ExecutionPolicy",
153
+ "Bypass",
154
+ "-Command",
155
+ f"Start-Process -Verb RunAs powershell -ArgumentList '{arglist}'",
156
+ ]
157
+
158
+ subprocess.run(cmd, capture_output=True, text=True)
159
+
160
+ while True:
161
+ try:
162
+ with open(dump_fpath, "rb") as f:
163
+ s = f.read()
164
+ if len(s) != 0:
165
+ break
166
+ time.sleep(1)
167
+ except (FileNotFoundError, PermissionError):
168
+ pass
169
+
170
+ while True:
171
+ try:
172
+ os.remove(dump_fpath)
107
173
  break
108
- if m_ts is None:
109
- return None, MSG_NO_AUTH
110
-
111
- killall("viber")
112
-
113
- viber_auth = f"member_id:{member_id};m_token:{m_token};m_ts:{m_ts}"
114
- msg = "Got viber_auth successfully:\n"
115
- msg += f"{viber_auth=}\n"
116
-
117
- return viber_auth, msg
118
-
119
- def get_auth_linux(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
120
- if not PSUTIL_LOADED:
121
- return None, MSG_NO_PSUTIL
122
-
123
- member_id = None
124
- m_token = None
125
- m_ts = None
174
+ except PermissionError:
175
+ pass
126
176
 
127
- killed = killall("viber")
128
- if killed:
129
- time.sleep(5)
130
- subprocess.Popen([viber_bin_path])
131
- time.sleep(10)
177
+ return s, ""
132
178
 
133
- viber_pid = find_pid_by_name("viber")
134
- memdump_sh_path = (ROOT_DIR / "resources/memdump.sh").as_posix()
179
+ def get_mem_linux(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
180
+ memdump_sh_path = (ROOT_DIR / "resources/memdump_linux.sh").as_posix()
135
181
 
136
182
  s = subprocess.run(
137
183
  [
@@ -141,7 +187,7 @@ class GetViberAuth:
141
187
  capture_output=True,
142
188
  ).stdout
143
189
 
144
- if s.find(b"X-Viber-Auth-Mid: ") != -1:
190
+ if len(s) > 1000:
145
191
  pass
146
192
  elif shutil.which("pkexec") and os.getenv("DISPLAY"):
147
193
  s = subprocess.run(
@@ -174,27 +220,80 @@ class GetViberAuth:
174
220
  stdin=sudo_password_pipe.stdout,
175
221
  ).stdout
176
222
 
177
- member_id_addr = s.find(b"X-Viber-Auth-Mid: ")
178
- m_token_addr = s.find(b"X-Viber-Auth-Token: ")
179
- m_ts_addr = s.find(b"X-Viber-Auth-Timestamp: ")
223
+ return s, ""
180
224
 
181
- if member_id_addr == -1 or m_token_addr == -1 or m_ts_addr == -1:
182
- return None, MSG_NO_AUTH
225
+ def get_mem_darwin(self, viber_pid: int) -> Tuple[Optional[bytes], str]:
226
+ subprocess.run(
227
+ [
228
+ "lldb",
229
+ "--attach-pid",
230
+ str(viber_pid),
231
+ "-o",
232
+ "process save-core /tmp/viber.dmp",
233
+ "-o",
234
+ "quit",
235
+ ],
236
+ stdout=subprocess.DEVNULL,
237
+ stderr=subprocess.DEVNULL,
238
+ )
183
239
 
184
- member_id_addr += 18
185
- m_token_addr += 20
186
- m_ts_addr += 24
240
+ with open("/tmp/viber.dmp", "rb") as f:
241
+ s = f.read()
187
242
 
188
- member_id_bytes = s[member_id_addr : member_id_addr + 20]
189
- member_id_term = member_id_bytes.find(b"\x0d\x0a")
190
- if member_id_term == -1:
191
- return None, MSG_NO_AUTH
192
- member_id = member_id_bytes[:member_id_term].decode(encoding="ascii")
243
+ os.remove("/tmp/viber.dmp")
193
244
 
194
- m_token = s[m_token_addr : m_token_addr + 64].decode(encoding="ascii")
195
- m_ts = s[m_ts_addr : m_ts_addr + 13].decode(encoding="ascii")
245
+ return s, ""
196
246
 
197
- killall("viber")
247
+ def get_auth_by_pme(
248
+ self, viber_bin_path: str, relaunch: bool = True
249
+ ) -> Tuple[Optional[str], str]:
250
+ from PyMemoryEditor import OpenProcess # type: ignore
251
+
252
+ member_id = None
253
+ m_token = None
254
+ m_ts = None
255
+
256
+ if relaunch:
257
+ viber_pid = self.relaunch_viber(viber_bin_path)
258
+ else:
259
+ viber_pid = find_pid_by_name("viber")
260
+ if viber_pid is None:
261
+ return None, MSG_LAUNCH_FAIL
262
+
263
+ try:
264
+ with OpenProcess(pid=int(viber_pid)) as process:
265
+ for address in process.search_by_value(str, 18, "X-Viber-Auth-Mid: "): # type: ignore
266
+ member_id_addr = cast(int, address) + 18
267
+ member_id_bytes = process.read_process_memory(
268
+ member_id_addr, bytes, 20
269
+ )
270
+ member_id_term = member_id_bytes.find(b"\x0d\x0a")
271
+ if member_id_term == -1:
272
+ continue
273
+ member_id = member_id_bytes[:member_id_term].decode(
274
+ encoding="ascii"
275
+ )
276
+ break
277
+ if member_id is None:
278
+ return None, MSG_NO_AUTH
279
+
280
+ for address in process.search_by_value(str, 20, "X-Viber-Auth-Token: "): # type: ignore
281
+ m_token_addr = cast(int, address) + 20
282
+ m_token = process.read_process_memory(m_token_addr, str, 64)
283
+ break
284
+ if m_token is None:
285
+ return None, MSG_NO_AUTH
286
+
287
+ for address in process.search_by_value( # type: ignore
288
+ str, 24, "X-Viber-Auth-Timestamp: "
289
+ ):
290
+ m_ts_addr = cast(int, address) + 24
291
+ m_ts = process.read_process_memory(m_ts_addr, str, 13)
292
+ break
293
+ if m_ts is None:
294
+ return None, MSG_NO_AUTH
295
+ except PermissionError:
296
+ return None, MSG_PERMISSION_ERROR
198
297
 
199
298
  viber_auth = f"member_id:{member_id};m_token:{m_token};m_ts:{m_ts}"
200
299
  msg = "Got viber_auth successfully:\n"
@@ -202,50 +301,43 @@ class GetViberAuth:
202
301
 
203
302
  return viber_auth, msg
204
303
 
205
- def get_auth_darwin(self, viber_bin_path: str) -> Tuple[Optional[str], str]:
304
+ def get_auth_by_dump(
305
+ self, viber_bin_path: str, relaunch: bool = True
306
+ ) -> Tuple[Optional[str], str]:
206
307
  member_id = None
207
308
  m_token = None
208
309
  m_ts = None
209
310
 
210
- csrutil_status = subprocess.run(
211
- ["csrutil", "status"], capture_output=True, text=True
212
- ).stdout
213
-
214
- if "enabled" in csrutil_status:
215
- return None, MSG_SIP_ENABLED
216
-
217
- killed = killall("viber")
218
- if killed:
219
- time.sleep(5)
220
- subprocess.run(
221
- ["open", "-n", viber_bin_path],
222
- stdout=subprocess.DEVNULL,
223
- stderr=subprocess.DEVNULL,
224
- )
225
- time.sleep(10)
311
+ if platform.system() == "Darwin":
312
+ csrutil_status = subprocess.run(
313
+ ["csrutil", "status"], capture_output=True, text=True
314
+ ).stdout
226
315
 
227
- viber_pid = subprocess.run(
228
- ["pgrep", "Viber"], capture_output=True, text=True
229
- ).stdout.strip()
230
- subprocess.run(
231
- [
232
- "lldb",
233
- "--attach-pid",
234
- viber_pid,
235
- "-o",
236
- "process save-core /tmp/viber.dmp",
237
- "-o",
238
- "quit",
239
- ],
240
- stdout=subprocess.DEVNULL,
241
- stderr=subprocess.DEVNULL,
242
- )
316
+ if "enabled" in csrutil_status:
317
+ return None, MSG_SIP_ENABLED
318
+ elif (
319
+ platform.system() != "Windows"
320
+ and shutil.which("pgrep") is None
321
+ and importlib.find_loader("psutil") is None
322
+ ):
323
+ return None, MSG_NO_PGREP
324
+
325
+ if relaunch:
326
+ viber_pid = self.relaunch_viber(viber_bin_path)
327
+ else:
328
+ viber_pid = find_pid_by_name("viber")
329
+ if viber_pid is None:
330
+ return None, MSG_LAUNCH_FAIL
243
331
 
244
- with open("/tmp/viber.dmp", "rb") as f:
245
- s = f.read()
332
+ if platform.system() == "Windows":
333
+ s, msg = self.get_mem_windows(viber_pid)
334
+ elif platform.system() == "Darwin":
335
+ s, msg = self.get_mem_darwin(viber_pid)
336
+ else:
337
+ s, msg = self.get_mem_linux(viber_pid)
246
338
 
247
- os.remove("/tmp/viber.dmp")
248
- killall("viber")
339
+ if s is None:
340
+ return None, msg
249
341
 
250
342
  member_id_addr = s.find(b"X-Viber-Auth-Mid: ")
251
343
  m_token_addr = s.find(b"X-Viber-Auth-Token: ")
@@ -307,9 +399,43 @@ class GetViberAuth:
307
399
  if not viber_bin_path:
308
400
  return None, MSG_NO_BIN
309
401
 
310
- if platform.system() == "Windows":
311
- return self.get_auth_windows(viber_bin_path)
312
- elif platform.system() == "Darwin":
313
- return self.get_auth_darwin(viber_bin_path)
402
+ # get_auth_by_dump()
403
+ # + Fast
404
+ # - Requires admin
405
+
406
+ # get_auth_by_pme()
407
+ # + No admin (If have permission to read process)
408
+ # - Slow
409
+ # - Cannot run on macOS
410
+
411
+ # If admin, prefer get_auth_by_dump() over get_auth_by_pme(), vice versa
412
+ methods: List[Callable[[str, bool], Tuple[Optional[str], str]]] = []
413
+ relaunch = True
414
+ viber_auth = None
415
+ msg = ""
416
+
417
+ pme_present = importlib.util.find_spec("PyMemoryEditor") is not None
418
+ if platform.system() == "Darwin":
419
+ methods.append(self.get_auth_by_dump)
420
+ elif platform.system() == "Windows":
421
+ methods.append(self.get_auth_by_dump)
422
+ if pme_present:
423
+ methods.append(self.get_auth_by_pme)
424
+ if check_admin_windows() is False:
425
+ methods.reverse()
314
426
  else:
315
- return self.get_auth_linux(viber_bin_path)
427
+ if not os.path.isfile("/.dockerenv"):
428
+ methods.append(self.get_auth_by_dump)
429
+ if pme_present:
430
+ methods.append(self.get_auth_by_pme)
431
+ if check_admin_linux() is False:
432
+ methods.reverse()
433
+
434
+ for method in methods:
435
+ viber_auth, msg = method(viber_bin_path, relaunch)
436
+ relaunch = False
437
+ if viber_auth is not None:
438
+ break
439
+
440
+ killall("viber")
441
+ return viber_auth, msg
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- __version__ = "2.9.0"
3
+ __version__ = "2.9.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.9.0
3
+ Version: 2.9.1
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -376,11 +376,11 @@ Requires-Dist: mergedeep ~=1.3.4
376
376
  Requires-Dist: numpy >=1.22.4
377
377
  Requires-Dist: Pillow ~=10.3.0
378
378
  Requires-Dist: pyoxipng ~=9.0.0
379
- Requires-Dist: python-telegram-bot ~=21.2
379
+ Requires-Dist: python-telegram-bot ~=21.3
380
380
  Requires-Dist: psutil ~=5.9.8
381
381
  Requires-Dist: PyMemoryEditor ~=1.5.22
382
382
  Requires-Dist: requests ~=2.32.3
383
- Requires-Dist: rlottie-python ~=1.3.5
383
+ Requires-Dist: rlottie-python ~=1.3.6
384
384
  Requires-Dist: signalstickers-client-fork-laggykiller ~=3.3.0.post2
385
385
  Requires-Dist: sqlcipher3-wheels ~=0.5.2.post1
386
386
  Requires-Dist: tqdm ~=4.66.4
@@ -6,7 +6,7 @@ sticker_convert/definitions.py,sha256=ZhP2ALCEud-w9ZZD4c3TDG9eHGPZyaAL7zPUsJAbjt
6
6
  sticker_convert/gui.py,sha256=hZOp2SyEYKbCRm9SRTItBqEk724SHtSqK_Txo0wpL8Q,31194
7
7
  sticker_convert/job.py,sha256=4C2WwB3PFldacqI8UPnM10thM087VLEl9wn6P9_LtS0,26128
8
8
  sticker_convert/job_option.py,sha256=yFwHEhW8Gzp9dfiXakkCREfejAIJhiOxwD4Wlg9jcPk,7805
9
- sticker_convert/version.py,sha256=UUJ5qrYrmZsock_EC-nYp5wKxs3ZAkgVkQPLxSv6l1E,46
9
+ sticker_convert/version.py,sha256=baBhLdXSz6WrhsijOG00KYOzp3-KSIDIG59dfAQPMrQ,46
10
10
  sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  sticker_convert/downloaders/download_base.py,sha256=x18bI2mPpbXRnSmStBHEb1IvN-VPCilOHLQUs6YPUEU,4041
12
12
  sticker_convert/downloaders/download_kakao.py,sha256=TCygK-LiSkk3yEYZymZsHVwtW5JmQX6JeIneh25XxFA,14984
@@ -31,7 +31,7 @@ sticker_convert/gui_components/windows/base_window.py,sha256=xBE1peGMPvWsdrFej0C
31
31
  sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=AvXB2Q8pAPkKILHTvlLGV9jfBcvskCA4arko4nvBTdo,7115
32
32
  sticker_convert/gui_components/windows/line_get_auth_window.py,sha256=S4ES_lk2-GDvPokZtYALnUc5zW1VbS4WulNqO9K1aSs,3375
33
33
  sticker_convert/gui_components/windows/signal_get_auth_window.py,sha256=kbJPe558lLP4PbPT2mCw4Xgh06FX5mBEZXoW-Q1LvWY,4584
34
- sticker_convert/gui_components/windows/viber_get_auth_window.py,sha256=_LOAhyNEp4OL24i_PsVtXYE01EArH-9gOOdEaFG4H30,4876
34
+ sticker_convert/gui_components/windows/viber_get_auth_window.py,sha256=Ne0DG4wog7Pzw-fPsbr7HX40okFFo1INusVCSwSAQdQ,5051
35
35
  sticker_convert/ios-message-stickers-template/.gitignore,sha256=4uuTph_9eHfqXHUavLOmGOji6aIHOif2bUEU_hCBn4Y,9
36
36
  sticker_convert/ios-message-stickers-template/README.md,sha256=oN0FvJkCWWjSZ3PMrCvY3T1zCsdkZYFgGHAoFh0Kmt8,467
37
37
  sticker_convert/ios-message-stickers-template/.github/FUNDING.yml,sha256=3LlmdSAGDsBA2o_C1iBYTNLwkABnyZuN0zxgPPyd-f8,70
@@ -72,7 +72,8 @@ sticker_convert/resources/compression.json,sha256=tNBGCmFqZ4Bsik1-xtvkOSlRu1uF6K
72
72
  sticker_convert/resources/emoji.json,sha256=sXSuKusyG1L2Stuf9BL5ZqfzOIOdeAeE3RXcrXAsLdY,413367
73
73
  sticker_convert/resources/help.json,sha256=VgRYw5iNQGn_CDA4pTnk5QUO21lsx0JIvWgUV2kHPvY,6906
74
74
  sticker_convert/resources/input.json,sha256=S3CkInBMLrk5OS9aJfuTCDsf_64NOjNT3IKQr7d1hM0,2665
75
- sticker_convert/resources/memdump.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw5-kFDx5bQp9tY,651
75
+ sticker_convert/resources/memdump_linux.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw5-kFDx5bQp9tY,651
76
+ sticker_convert/resources/memdump_windows.ps1,sha256=CfyNSSEW3HJOkTu-mKrP3qh5aprN-1VCBfj-R1fELA0,302
76
77
  sticker_convert/resources/output.json,sha256=V4OseXEm3O16cAjHDVZRq8-SY-0_7cFFR_cyF-0Y_eQ,1570
77
78
  sticker_convert/uploaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
79
  sticker_convert/uploaders/compress_wastickers.py,sha256=SMPf1_ir30ZKO2ChHspDFuyaufx0XeVBVLOlHmawEdY,6021
@@ -86,7 +87,7 @@ sticker_convert/utils/url_detect.py,sha256=L2QwE2jwN85MoyYsW_4GvBHuoedrlhoIdAmzw
86
87
  sticker_convert/utils/auth/get_kakao_auth.py,sha256=ipAZ1DUd5CMTpUoxRXHVOFC3DKIpxwxpTYAfrOJ6UZ8,9829
87
88
  sticker_convert/utils/auth/get_line_auth.py,sha256=8l8ha2vQmk3rHGvDE7PkcxQXbH3oe62LKbI3qVUtvqc,2196
88
89
  sticker_convert/utils/auth/get_signal_auth.py,sha256=6Sx-lMuyBHeX1RpjAWI8u03qnRu9fmO4p89pd7fowOE,4925
89
- sticker_convert/utils/auth/get_viber_auth.py,sha256=U3_8qxVifiZ7T47PMW6Cdo7CcLJnUW-_rf8QIYL9bYY,9984
90
+ sticker_convert/utils/auth/get_viber_auth.py,sha256=UUdnESATVGj-mrDuM_5wq75ouQFqPvFtdyqjGDqxi5Y,13734
90
91
  sticker_convert/utils/files/cache_store.py,sha256=etfe614OAhAyrnM5fGeESKq6R88YLNqkqkxSzEmZ0V0,1047
91
92
  sticker_convert/utils/files/json_manager.py,sha256=Vr6pZJdLMkrJJWN99210aduVHb0ILyf0SSTaw4TZqgc,541
92
93
  sticker_convert/utils/files/json_resources_loader.py,sha256=flZFixUXRTrOAhvRQpuSQgmJ69yXL94sxukcowLT1JQ,1049
@@ -97,9 +98,9 @@ sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE
97
98
  sticker_convert/utils/media/codec_info.py,sha256=1QfW3wgZ5vOk7T4XtLHYvJK1x8RbASRPSvhKEPkcu9A,15747
98
99
  sticker_convert/utils/media/decrypt_kakao.py,sha256=4wq9ZDRnFkx1WmFZnyEogBofiLGsWQM_X69HlA36578,1947
99
100
  sticker_convert/utils/media/format_verify.py,sha256=MH68GLJfXeL8WFT8emtj355K5BLAtUX64tQ59nugx2c,5673
100
- sticker_convert-2.9.0.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
101
- sticker_convert-2.9.0.dist-info/METADATA,sha256=aGTUdCCINVKxrj8kM3b5pMpMDKbVu51_uuvVR8ee_2A,51091
102
- sticker_convert-2.9.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
103
- sticker_convert-2.9.0.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
104
- sticker_convert-2.9.0.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
105
- sticker_convert-2.9.0.dist-info/RECORD,,
101
+ sticker_convert-2.9.1.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
102
+ sticker_convert-2.9.1.dist-info/METADATA,sha256=Sim5kcFjuwRWedkvQhuAIyCMmpYRQ-bA3cAIqQiZuFw,51091
103
+ sticker_convert-2.9.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
104
+ sticker_convert-2.9.1.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
105
+ sticker_convert-2.9.1.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
106
+ sticker_convert-2.9.1.dist-info/RECORD,,